From 50c66e0f1711bbb6e1a1656e2f43557af91cea24 Mon Sep 17 00:00:00 2001 From: tbulle Date: Thu, 9 Jan 2014 11:09:19 +0100 Subject: [PATCH 001/575] Changes to make it easier to use and customize the propertygrid from external project --- .../Project/PropertyGrid/PropertyGrid.cs | 6 ++++++ .../Project/PropertyGrid/PropertyGridView.cs | 9 ++++++--- .../Project/Services/CreateComponentTool.cs | 13 ++++++++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs index 5884022a92..a5203c289a 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs @@ -40,9 +40,13 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid Dictionary nodeFromDescriptor = new Dictionary(); + public Dictionary NodeFromDescriptor { get { return nodeFromDescriptor; } } + public CategoriesCollection Categories { get; private set; } public PropertyNodeCollection Events { get; private set; } + public EventHandler AggregatePropertiesUpdated; + private PropertyGridGroupMode _groupMode; public PropertyGridGroupMode GroupMode @@ -205,6 +209,8 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid } } finally { reloadActive = false; + if (AggregatePropertiesUpdated != null) + AggregatePropertiesUpdated(this, EventArgs.Empty); } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs index f4f8ef44b0..bf4affab54 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs @@ -27,13 +27,16 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid DefaultStyleKeyProperty.OverrideMetadata(typeof(PropertyGridView), new FrameworkPropertyMetadata(typeof(PropertyGridView))); } + public PropertyGridView() : this(null) + { + } - public PropertyGridView() + public PropertyGridView(PropertyGrid pg) { - PropertyGrid = new PropertyGrid(); + PropertyGrid = pg??new PropertyGrid(); DataContext = PropertyGrid; } - + private Thumb thumb; public override void OnApplyTemplate() { diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs index 7f130e3945..3d3cc1382f 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs @@ -142,9 +142,20 @@ namespace ICSharpCode.WpfDesign.Designer.Services return item; } + public static bool AddItemWithDefaultSize(DesignItem container, Type createdItem, Size size) + { + CreateComponentTool cct = new CreateComponentTool(createdItem); + return AddItemWithCustomSize(container, cct.CreateItem(container.Context), new Point(0, 0), size); + } + internal static bool AddItemWithDefaultSize(DesignItem container, DesignItem createdItem, Point position) { - var size = ModelTools.GetDefaultSize(createdItem); + return AddItemWithCustomSize(container, createdItem, position, ModelTools.GetDefaultSize(createdItem)); + } + + internal static bool AddItemWithCustomSize(DesignItem container, DesignItem createdItem, Point position, Size size) + { + PlacementOperation operation = PlacementOperation.TryStartInsertNewComponents( container, new DesignItem[] { createdItem }, From c22443ba71577f5aa882e17cc25305ee3a02f63b Mon Sep 17 00:00:00 2001 From: tbulle Date: Thu, 23 Jan 2014 10:58:53 +0100 Subject: [PATCH 002/575] Setter methods for implementing a custom HitTestFilterCallback --- .../WpfDesign.Designer/Project/DesignPanel.cs | 17 +++++++++++------ .../Project/PropertyGrid/PropertyGrid.cs | 2 +- .../Project/Services/CreateComponentTool.cs | 6 ++++++ .../Project/Services/ToolService.cs | 7 ++++++- .../WpfDesign/WpfDesign/Project/Tools.cs | 9 +++++++++ 5 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs index b7af3ec784..dfe6ff2763 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs @@ -86,12 +86,15 @@ namespace ICSharpCode.WpfDesign.Designer return; } // First try hit-testing on the adorner layer. - + bool continueHitTest = true; - + + HitTestFilterCallback filterBehavior = CustomHitTestFilterBehavior ?? FilterHitTestInvisibleElements; + CustomHitTestFilterBehavior = null; if (testAdorners) { + RunHitTest( - _adornerLayer, mousePosition, FilterHitTestInvisibleElements, + _adornerLayer, mousePosition, filterBehavior, delegate(HitTestResult result) { if (result != null && result.VisualHit != null && result.VisualHit is Visual) { DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit); @@ -110,14 +113,14 @@ namespace ICSharpCode.WpfDesign.Designer } }); } - + if (continueHitTest && testDesignSurface) { RunHitTest( - this.Child, mousePosition, FilterHitTestInvisibleElements, + this.Child, mousePosition, filterBehavior, delegate(HitTestResult result) { if (result != null && result.VisualHit != null && result.VisualHit is Visual) { DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit); - + ViewService viewService = _context.Services.View; DependencyObject obj = result.VisualHit; while (obj != null) { @@ -165,6 +168,8 @@ namespace ICSharpCode.WpfDesign.Designer #region Properties + //Set custom HitTestFilterCallbak + public HitTestFilterCallback CustomHitTestFilterBehavior { get; set; } /// /// Gets/Sets the design context. /// diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs index a5203c289a..b4a6d06841 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs @@ -45,7 +45,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid public CategoriesCollection Categories { get; private set; } public PropertyNodeCollection Events { get; private set; } - public EventHandler AggregatePropertiesUpdated; + public EventHandler AggregatePropertiesUpdated { get; set; } private PropertyGridGroupMode _groupMode; diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs index 3d3cc1382f..5716300d9e 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs @@ -142,6 +142,12 @@ namespace ICSharpCode.WpfDesign.Designer.Services return item; } + public static bool AddItemWithCustomSizePosition(DesignItem container, Type createdItem, Size size, Point position) + { + CreateComponentTool cct = new CreateComponentTool(createdItem); + return AddItemWithCustomSize(container, cct.CreateItem(container.Context), position, size); + } + public static bool AddItemWithDefaultSize(DesignItem container, Type createdItem, Size size) { CreateComponentTool cct = new CreateComponentTool(createdItem); diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs index 2c262998ca..66ae19fcc5 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs @@ -3,7 +3,7 @@ using System; using System.Windows.Input; - +using System.Windows.Media; namespace ICSharpCode.WpfDesign.Designer.Services { // See IToolService for description. @@ -22,6 +22,11 @@ namespace ICSharpCode.WpfDesign.Designer.Services }); } + public HitTestFilterCallback DesignPanelHitTestFilterCallback + { + set{ _designPanel.CustomHitTestFilterBehavior = value; } + } + public void Dispose() { if (_designPanel != null) { diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs index 4525e7c246..b23c75603d 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Input; +using System.Windows.Media; using ICSharpCode.WpfDesign.Adorners; @@ -38,6 +39,10 @@ namespace ICSharpCode.WpfDesign /// public interface IToolService { + /// + /// Set custom HitTestFilterCallback for DesignPanel + /// + HitTestFilterCallback DesignPanelHitTestFilterCallback{ set; } /// /// Gets the 'pointer' tool. /// The pointer tool is the default tool for selecting and moving elements. @@ -62,6 +67,10 @@ namespace ICSharpCode.WpfDesign public interface IDesignPanel : IInputElement { /// + /// Set a custom filter callback so that any element can be filtered out + /// + HitTestFilterCallback CustomHitTestFilterBehavior { get; set; } + /// /// Gets the design context used by the DesignPanel. /// DesignContext Context { get; } From b67af16c453ac9808337cd316276ee22753bcc6f Mon Sep 17 00:00:00 2001 From: tbulle Date: Tue, 28 Jan 2014 10:45:19 +0100 Subject: [PATCH 003/575] Implemented inteface for OutlineNode so that a custom outlinenode can be implemented --- .../Project/FormsDesigner.csproj | 1 + .../Project/OutlineView/Outline.xaml.cs | 7 +- .../Project/OutlineView/OutlineNode.cs | 344 +++++------------- .../Project/OutlineView/OutlineNodeBase.cs | 239 ++++++++++++ .../Editors/CollectionEditor.xaml.cs | 2 +- .../Project/PropertyGrid/PropertyGrid.cs | 4 +- .../Project/Services/CreateComponentTool.cs | 2 +- .../Project/WpfDesign.Designer.csproj | 1 + 8 files changed, 347 insertions(+), 253 deletions(-) create mode 100644 src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj b/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj index 088d5066b6..80ced74cdb 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj @@ -54,6 +54,7 @@ + diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs index 25043cbff7..754849fd7a 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs @@ -25,10 +25,11 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView } public static readonly DependencyProperty RootProperty = - DependencyProperty.Register("Root", typeof(OutlineNode), typeof(Outline)); + DependencyProperty.Register("Root", typeof(IOutlineNode), typeof(Outline)); - public OutlineNode Root { - get { return (OutlineNode)GetValue(RootProperty); } + public IOutlineNode Root + { + get { return (IOutlineNode)GetValue(RootProperty); } set { SetValue(RootProperty, value); } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs index f3e03c08ba..5508d1a1ed 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs @@ -19,249 +19,101 @@ using ICSharpCode.WpfDesign.XamlDom; namespace ICSharpCode.WpfDesign.Designer.OutlineView { - public class OutlineNode : INotifyPropertyChanged - { - //Used to check if element can enter other containers - public static PlacementType DummyPlacementType; - - static OutlineNode() - { - DummyPlacementType = PlacementType.Register("DummyPlacement"); - } - public static OutlineNode Create(DesignItem designItem) - { - OutlineNode node; - if (!outlineNodes.TryGetValue(designItem, out node)) { - node = new OutlineNode(designItem); - outlineNodes[designItem] = node; - } - return node; - } - - //TODO: Reset with DesignContext - static Dictionary outlineNodes = new Dictionary(); - - OutlineNode(DesignItem designItem) - { - DesignItem = designItem; - UpdateChildren(); - - var hidden = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).ValueOnInstance; - if (hidden != null && (bool) hidden == true) { - this._isDesignTimeVisible = false; - ((FrameworkElement) this.DesignItem.Component).Visibility = Visibility.Hidden; - } - - var locked = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance; - if (locked != null && (bool) locked == true) { - this._isDesignTimeLocked = true; - } - - //TODO - DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged); - DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged); - SelectionService.SelectionChanged += new EventHandler(Selection_SelectionChanged); - } - - public DesignItem DesignItem { get; private set; } - - public ISelectionService SelectionService { - get { return DesignItem.Services.Selection; } - } - - bool isExpanded = true; - - public bool IsExpanded { - get { - return isExpanded; - } - set { - isExpanded = value; - RaisePropertyChanged("IsExpanded"); - } - } - - bool isSelected; - - public bool IsSelected { - get { - return isSelected; - } - set { - if (isSelected != value) { - isSelected = value; - SelectionService.SetSelectedComponents(new[] { DesignItem }, - value ? SelectionTypes.Add : SelectionTypes.Remove); - RaisePropertyChanged("IsSelected"); - } - } - } - - bool _isDesignTimeVisible = true; - - public bool IsDesignTimeVisible - { - get { - return _isDesignTimeVisible; - } - set { - _isDesignTimeVisible = value; - var ctl = DesignItem.Component as UIElement; - ctl.Visibility = _isDesignTimeVisible ? Visibility.Visible : Visibility.Hidden; - - RaisePropertyChanged("IsDesignTimeVisible"); - - if (!value) - DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).SetValue(true); - else - DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).Reset(); - } - } - - bool _isDesignTimeLocked = false; - - public bool IsDesignTimeLocked - { - get { - return _isDesignTimeLocked; - } - set { - _isDesignTimeLocked = value; - ((XamlDesignItem)DesignItem).IsDesignTimeLocked = _isDesignTimeLocked; - - RaisePropertyChanged("IsDesignTimeLocked"); - -// if (value) -// DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true); -// else -// DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset(); - } - } - - ObservableCollection children = new ObservableCollection(); - - public ObservableCollection Children { - get { return children; } - } - - public string Name { - get { - if (string.IsNullOrEmpty(DesignItem.Name)) { - return DesignItem.ComponentType.Name; - } - return DesignItem.ComponentType.Name + " (" + DesignItem.Name + ")"; - } - } - - void Selection_SelectionChanged(object sender, DesignItemCollectionEventArgs e) - { - IsSelected = DesignItem.Services.Selection.IsComponentSelected(DesignItem); - } - - void DesignItem_NameChanged(object sender, EventArgs e) - { - RaisePropertyChanged("Name"); - } - - void DesignItem_PropertyChanged(object sender, PropertyChangedEventArgs e) - { - if (e.PropertyName == DesignItem.ContentPropertyName) { - UpdateChildren(); - } - } - - void UpdateChildren() - { - Children.Clear(); - - if (DesignItem.ContentPropertyName != null) { - var content = DesignItem.ContentProperty; - if (content.IsCollection) { - UpdateChildrenCore(content.CollectionElements); - } - else { - if (content.Value != null) { - UpdateChildrenCore(new[] { content.Value }); - } - } - } - } - - void UpdateChildrenCore(IEnumerable items) - { - foreach (var item in items) { - if (ModelTools.CanSelectComponent(item)) { - var node = OutlineNode.Create(item); - Children.Add(node); - } - else - { - var content = item.ContentProperty; - if (content != null) - { - if (content.IsCollection) { - UpdateChildrenCore(content.CollectionElements); - } - else { - if (content.Value != null) { - UpdateChildrenCore(new[] { content.Value }); - } - } - } - } - } - } - - public bool CanInsert(IEnumerable nodes, OutlineNode after, bool copy) - { - var placementBehavior = DesignItem.GetBehavior(); - if (placementBehavior == null) - return false; - var operation = PlacementOperation.Start(nodes.Select(node => node.DesignItem).ToArray(), DummyPlacementType); - if (operation != null) { - bool canEnter = placementBehavior.CanEnterContainer(operation, true); - operation.Abort(); - return canEnter; - } - return false; - } - - public void Insert(IEnumerable nodes, OutlineNode after, bool copy) - { - using (var moveTransaction = DesignItem.Context.OpenGroup("Item moved in outline view", nodes.Select(n => n.DesignItem).ToList())) { - if (copy) { - nodes = nodes.Select(n => OutlineNode.Create(n.DesignItem.Clone())).ToList(); - } else { - foreach (var node in nodes) { - node.DesignItem.Remove(); - } - } - - var index = after == null ? 0 : Children.IndexOf(after) + 1; - - var content = DesignItem.ContentProperty; - if (content.IsCollection) { - foreach (var node in nodes) { - content.CollectionElements.Insert(index++, node.DesignItem); - } - } else { - content.SetValue(nodes.First().DesignItem); - } - moveTransaction.Commit(); - } - } - - #region INotifyPropertyChanged Members - - public event PropertyChangedEventHandler PropertyChanged; - - void RaisePropertyChanged(string name) - { - if (PropertyChanged != null) { - PropertyChanged(this, new PropertyChangedEventArgs(name)); - } - } - - #endregion - } -} + public interface IOutlineNode + { + ISelectionService SelectionService { get; } + bool IsExpanded { get; set; } + DesignItem DesignItem { get; set; } + bool IsSelected { get; set; } + bool IsDesignTimeVisible { get; set; } + bool IsDesignTimeLocked { get; } + string Name { get; } + bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy); + void Insert(IEnumerable nodes, IOutlineNode after, bool copy); + } + + + public class OutlineNode: OutlineNodeBase + { + //TODO: Reset with DesignContext + static Dictionary outlineNodes = new Dictionary(); + + protected OutlineNode(DesignItem designitem): base(designitem) + { + UpdateChildren(); + SelectionService.SelectionChanged += new EventHandler(Selection_SelectionChanged); + } + + static OutlineNode() + { + DummyPlacementType = PlacementType.Register("DummyPlacement"); + } + + public static IOutlineNode Create(DesignItem designItem) + { + IOutlineNode node; + if (!outlineNodes.TryGetValue(designItem, out node)) + { + node = new OutlineNode(designItem); + outlineNodes[designItem] = node; + } + return node; + } + + void Selection_SelectionChanged(object sender, DesignItemCollectionEventArgs e) + { + IsSelected = DesignItem.Services.Selection.IsComponentSelected(DesignItem); + } + + protected override void UpdateChildren() + { + Children.Clear(); + + if (DesignItem.ContentPropertyName != null) + { + var content = DesignItem.ContentProperty; + if (content.IsCollection) + { + UpdateChildrenCore(content.CollectionElements); + } + else + { + if (content.Value != null) + { + UpdateChildrenCore(new[] { content.Value }); + } + } + } + } + + void UpdateChildrenCore(IEnumerable items) + { + foreach (var item in items) + { + if (ModelTools.CanSelectComponent(item)) + { + var node = OutlineNode.Create(item); + Children.Add(node); + } + else + { + var content = item.ContentProperty; + if (content != null) + { + if (content.IsCollection) + { + UpdateChildrenCore(content.CollectionElements); + } + else + { + if (content.Value != null) + { + UpdateChildrenCore(new[] { content.Value }); + } + } + } + } + } + } + } +} diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs new file mode 100644 index 0000000000..2e807f6967 --- /dev/null +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs @@ -0,0 +1,239 @@ +/* + * Created by SharpDevelop. + * User: trubra + * Date: 2014-01-28 + * Time: 10:09 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Windows; +using System.Linq; +using ICSharpCode.WpfDesign.Designer.Xaml; +using ICSharpCode.WpfDesign.XamlDom; + +namespace ICSharpCode.WpfDesign.Designer.OutlineView +{ + /// + /// Description of OutlineNodeBase. + /// + public abstract class OutlineNodeBase : INotifyPropertyChanged, IOutlineNode + { + + protected abstract void UpdateChildren(); + //Used to check if element can enter other containers + protected static PlacementType DummyPlacementType; + + protected OutlineNodeBase(DesignItem designItem) + { + DesignItem = designItem; + + + var hidden = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).ValueOnInstance; + if (hidden != null && (bool)hidden) + { + _isDesignTimeVisible = false; + ((FrameworkElement)DesignItem.Component).Visibility = Visibility.Hidden; + } + + var locked = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance; + if (locked != null && (bool)locked) + { + _isDesignTimeLocked = true; + } + + //TODO + + DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged); + DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged); + } + + public DesignItem DesignItem { get; set; } + + public ISelectionService SelectionService + { + get { return DesignItem.Services.Selection; } + } + + bool isExpanded = true; + + public bool IsExpanded + { + get + { + return isExpanded; + } + set + { + isExpanded = value; + RaisePropertyChanged("IsExpanded"); + } + } + + bool isSelected; + + public bool IsSelected + { + get + { + return isSelected; + } + set + { + if (isSelected != value) + { + isSelected = value; + SelectionService.SetSelectedComponents(new[] { DesignItem }, + value ? SelectionTypes.Add : SelectionTypes.Remove); + RaisePropertyChanged("IsSelected"); + } + } + } + + bool _isDesignTimeVisible = true; + + public bool IsDesignTimeVisible + { + get + { + return _isDesignTimeVisible; + } + set + { + _isDesignTimeVisible = value; + var ctl = DesignItem.Component as UIElement; + if(ctl!=null) + ctl.Visibility = _isDesignTimeVisible ? Visibility.Visible : Visibility.Hidden; + + RaisePropertyChanged("IsDesignTimeVisible"); + + if (!value) + DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).SetValue(true); + else + DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).Reset(); + } + } + + bool _isDesignTimeLocked = false; + + public bool IsDesignTimeLocked + { + get + { + return _isDesignTimeLocked; + } + set + { + _isDesignTimeLocked = value; + ((XamlDesignItem)DesignItem).IsDesignTimeLocked = _isDesignTimeLocked; + + RaisePropertyChanged("IsDesignTimeLocked"); + + // if (value) + // DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true); + // else + // DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset(); + } + } + + ObservableCollection children = new ObservableCollection(); + + public ObservableCollection Children + { + get { return children; } + } + + public string Name + { + get + { + if (string.IsNullOrEmpty(DesignItem.Name)) + { + return DesignItem.ComponentType.Name; + } + return DesignItem.ComponentType.Name + " (" + DesignItem.Name + ")"; + } + } + + void DesignItem_NameChanged(object sender, EventArgs e) + { + RaisePropertyChanged("Name"); + } + + void DesignItem_PropertyChanged(object sender, PropertyChangedEventArgs e) + { + if (e.PropertyName == DesignItem.ContentPropertyName) + { + UpdateChildren(); + } + } + + + + public bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy) + { + var placementBehavior = DesignItem.GetBehavior(); + if (placementBehavior == null) + return false; + var operation = PlacementOperation.Start(nodes.Select(node => node.DesignItem).ToArray(), DummyPlacementType); + if (operation != null) + { + bool canEnter = placementBehavior.CanEnterContainer(operation, true); + operation.Abort(); + return canEnter; + } + return false; + } + + public virtual void Insert(IEnumerable nodes, IOutlineNode after, bool copy) + { + using (var moveTransaction = DesignItem.Context.OpenGroup("Item moved in outline view", nodes.Select(n => n.DesignItem).ToList())) + { + if (copy) + { + nodes = nodes.Select(n => OutlineNode.Create(n.DesignItem.Clone())).ToList(); + } + else + { + foreach (var node in nodes) + { + node.DesignItem.Remove(); + } + } + + var index = after == null ? 0 : Children.IndexOf(after) + 1; + + var content = DesignItem.ContentProperty; + if (content.IsCollection) + { + foreach (var node in nodes) + { + content.CollectionElements.Insert(index++, node.DesignItem); + } + } + else + { + content.SetValue(nodes.First().DesignItem); + } + moveTransaction.Commit(); + } + } + + #region INotifyPropertyChanged Members + + public event PropertyChangedEventHandler PropertyChanged; + + public void RaisePropertyChanged(string name) + { + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(name)); + } + } + + #endregion + } +} diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/CollectionEditor.xaml.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/CollectionEditor.xaml.cs index 57e1b3ccb7..0313d7dc0b 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/CollectionEditor.xaml.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/CollectionEditor.xaml.cs @@ -49,7 +49,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid.Editors if(control!=null){ TypeMappings.TryGetValue(control.GetType(), out _type); if (_type != null) { - OutlineNode node = OutlineNode.Create(item); + IOutlineNode node = OutlineNode.Create(item); Outline.Root = node; PropertyGridView.PropertyGrid.SelectedItems = item.Services.Selection.SelectedItems; } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs index b4a6d06841..bb7003011d 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs @@ -45,13 +45,13 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid public CategoriesCollection Categories { get; private set; } public PropertyNodeCollection Events { get; private set; } - public EventHandler AggregatePropertiesUpdated { get; set; } + public event EventHandler AggregatePropertiesUpdated; private PropertyGridGroupMode _groupMode; public PropertyGridGroupMode GroupMode { - get { return _groupMode; } + get { return _groupMode; } set { if (_groupMode != value) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs index 5716300d9e..0ac05437a8 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs @@ -146,7 +146,7 @@ namespace ICSharpCode.WpfDesign.Designer.Services { CreateComponentTool cct = new CreateComponentTool(createdItem); return AddItemWithCustomSize(container, cct.CreateItem(container.Context), position, size); - } + } public static bool AddItemWithDefaultSize(DesignItem container, Type createdItem, Size size) { diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj index a335f5f1f6..53a407d42d 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj @@ -87,6 +87,7 @@ + FlatCollectionEditor.xaml Code From a3c162e9c0c6e7dc31bd6532cc082188897be7d6 Mon Sep 17 00:00:00 2001 From: tbulle Date: Tue, 28 Jan 2014 11:57:56 +0100 Subject: [PATCH 004/575] Format changes --- .../Project/OutlineView/Outline.xaml.cs | 8 +- .../Project/OutlineView/OutlineNode.cs | 163 ++++--- .../Project/OutlineView/OutlineNodeBase.cs | 418 +++++++++--------- .../Project/PropertyGrid/PropertyGrid.cs | 6 +- 4 files changed, 283 insertions(+), 312 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs index 754849fd7a..7e2cec2296 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs @@ -25,11 +25,11 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView } public static readonly DependencyProperty RootProperty = - DependencyProperty.Register("Root", typeof(IOutlineNode), typeof(Outline)); + DependencyProperty.Register("Root", typeof(IOutlineNode), typeof(Outline)); - public IOutlineNode Root - { - get { return (IOutlineNode)GetValue(RootProperty); } + public IOutlineNode Root + { + get { return (IOutlineNode)GetValue(RootProperty); } set { SetValue(RootProperty, value); } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs index 5508d1a1ed..5116f1f425 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs @@ -20,100 +20,85 @@ using ICSharpCode.WpfDesign.XamlDom; namespace ICSharpCode.WpfDesign.Designer.OutlineView { public interface IOutlineNode - { - ISelectionService SelectionService { get; } - bool IsExpanded { get; set; } - DesignItem DesignItem { get; set; } - bool IsSelected { get; set; } - bool IsDesignTimeVisible { get; set; } - bool IsDesignTimeLocked { get; } - string Name { get; } - bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy); - void Insert(IEnumerable nodes, IOutlineNode after, bool copy); - } - + { + ISelectionService SelectionService { get; } + bool IsExpanded { get; set; } + DesignItem DesignItem { get; set; } + bool IsSelected { get; set; } + bool IsDesignTimeVisible { get; set; } + bool IsDesignTimeLocked { get; } + string Name { get; } + bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy); + void Insert(IEnumerable nodes, IOutlineNode after, bool copy); + } + - public class OutlineNode: OutlineNodeBase - { - //TODO: Reset with DesignContext - static Dictionary outlineNodes = new Dictionary(); + public class OutlineNode: OutlineNodeBase + { + //TODO: Reset with DesignContext + static Dictionary outlineNodes = new Dictionary(); - protected OutlineNode(DesignItem designitem): base(designitem) - { - UpdateChildren(); - SelectionService.SelectionChanged += new EventHandler(Selection_SelectionChanged); - } + protected OutlineNode(DesignItem designitem): base(designitem) + { + UpdateChildren(); + SelectionService.SelectionChanged += new EventHandler(Selection_SelectionChanged); + } - static OutlineNode() - { - DummyPlacementType = PlacementType.Register("DummyPlacement"); - } + static OutlineNode() + { + DummyPlacementType = PlacementType.Register("DummyPlacement"); + } - public static IOutlineNode Create(DesignItem designItem) - { - IOutlineNode node; - if (!outlineNodes.TryGetValue(designItem, out node)) - { - node = new OutlineNode(designItem); - outlineNodes[designItem] = node; - } - return node; - } + public static IOutlineNode Create(DesignItem designItem) + { + IOutlineNode node; + if (!outlineNodes.TryGetValue(designItem, out node)) { + node = new OutlineNode(designItem); + outlineNodes[designItem] = node; + } + return node; + } - void Selection_SelectionChanged(object sender, DesignItemCollectionEventArgs e) - { - IsSelected = DesignItem.Services.Selection.IsComponentSelected(DesignItem); - } + void Selection_SelectionChanged(object sender, DesignItemCollectionEventArgs e) + { + IsSelected = DesignItem.Services.Selection.IsComponentSelected(DesignItem); + } - protected override void UpdateChildren() - { - Children.Clear(); + protected override void UpdateChildren() + { + Children.Clear(); - if (DesignItem.ContentPropertyName != null) - { - var content = DesignItem.ContentProperty; - if (content.IsCollection) - { - UpdateChildrenCore(content.CollectionElements); - } - else - { - if (content.Value != null) - { - UpdateChildrenCore(new[] { content.Value }); - } - } - } - } + if (DesignItem.ContentPropertyName != null) { + var content = DesignItem.ContentProperty; + if (content.IsCollection) { + UpdateChildrenCore(content.CollectionElements); + } else { + if (content.Value != null) { + UpdateChildrenCore(new[] { content.Value }); + } + } + } + } - void UpdateChildrenCore(IEnumerable items) - { - foreach (var item in items) - { - if (ModelTools.CanSelectComponent(item)) - { - var node = OutlineNode.Create(item); - Children.Add(node); - } - else - { - var content = item.ContentProperty; - if (content != null) - { - if (content.IsCollection) - { - UpdateChildrenCore(content.CollectionElements); - } - else - { - if (content.Value != null) - { - UpdateChildrenCore(new[] { content.Value }); - } - } - } - } - } - } - } -} + void UpdateChildrenCore(IEnumerable items) + { + foreach (var item in items) { + if (ModelTools.CanSelectComponent(item)) { + var node = OutlineNode.Create(item); + Children.Add(node); + } else { + var content = item.ContentProperty; + if (content != null) { + if (content.IsCollection) { + UpdateChildrenCore(content.CollectionElements); + } else { + if (content.Value != null) { + UpdateChildrenCore(new[] { content.Value }); + } + } + } + } + } + } + } +} diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs index 2e807f6967..648b4097ec 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs @@ -12,7 +12,7 @@ using System.Collections.ObjectModel; using System.ComponentModel; using System.Windows; using System.Linq; -using ICSharpCode.WpfDesign.Designer.Xaml; +using ICSharpCode.WpfDesign.Designer.Xaml; using ICSharpCode.WpfDesign.XamlDom; namespace ICSharpCode.WpfDesign.Designer.OutlineView @@ -21,219 +21,205 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView /// Description of OutlineNodeBase. /// public abstract class OutlineNodeBase : INotifyPropertyChanged, IOutlineNode - { - - protected abstract void UpdateChildren(); - //Used to check if element can enter other containers - protected static PlacementType DummyPlacementType; - - protected OutlineNodeBase(DesignItem designItem) - { - DesignItem = designItem; - - - var hidden = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).ValueOnInstance; - if (hidden != null && (bool)hidden) - { - _isDesignTimeVisible = false; - ((FrameworkElement)DesignItem.Component).Visibility = Visibility.Hidden; - } - - var locked = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance; - if (locked != null && (bool)locked) - { - _isDesignTimeLocked = true; - } - - //TODO - - DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged); - DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged); - } - - public DesignItem DesignItem { get; set; } - - public ISelectionService SelectionService - { - get { return DesignItem.Services.Selection; } - } - - bool isExpanded = true; - - public bool IsExpanded - { - get - { - return isExpanded; - } - set - { - isExpanded = value; - RaisePropertyChanged("IsExpanded"); - } - } - - bool isSelected; - - public bool IsSelected - { - get - { - return isSelected; - } - set - { - if (isSelected != value) - { - isSelected = value; - SelectionService.SetSelectedComponents(new[] { DesignItem }, - value ? SelectionTypes.Add : SelectionTypes.Remove); - RaisePropertyChanged("IsSelected"); - } - } - } - - bool _isDesignTimeVisible = true; - - public bool IsDesignTimeVisible - { - get - { - return _isDesignTimeVisible; - } - set - { - _isDesignTimeVisible = value; - var ctl = DesignItem.Component as UIElement; - if(ctl!=null) - ctl.Visibility = _isDesignTimeVisible ? Visibility.Visible : Visibility.Hidden; - - RaisePropertyChanged("IsDesignTimeVisible"); - - if (!value) - DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).SetValue(true); - else - DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).Reset(); - } - } - - bool _isDesignTimeLocked = false; - - public bool IsDesignTimeLocked - { - get - { - return _isDesignTimeLocked; - } - set - { - _isDesignTimeLocked = value; - ((XamlDesignItem)DesignItem).IsDesignTimeLocked = _isDesignTimeLocked; - - RaisePropertyChanged("IsDesignTimeLocked"); - - // if (value) - // DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true); - // else - // DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset(); - } - } - - ObservableCollection children = new ObservableCollection(); - - public ObservableCollection Children - { - get { return children; } - } - - public string Name - { - get - { - if (string.IsNullOrEmpty(DesignItem.Name)) - { - return DesignItem.ComponentType.Name; - } - return DesignItem.ComponentType.Name + " (" + DesignItem.Name + ")"; - } - } - - void DesignItem_NameChanged(object sender, EventArgs e) - { - RaisePropertyChanged("Name"); - } - - void DesignItem_PropertyChanged(object sender, PropertyChangedEventArgs e) - { - if (e.PropertyName == DesignItem.ContentPropertyName) - { - UpdateChildren(); - } - } - - - - public bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy) - { - var placementBehavior = DesignItem.GetBehavior(); - if (placementBehavior == null) - return false; - var operation = PlacementOperation.Start(nodes.Select(node => node.DesignItem).ToArray(), DummyPlacementType); - if (operation != null) - { - bool canEnter = placementBehavior.CanEnterContainer(operation, true); - operation.Abort(); - return canEnter; - } - return false; - } - - public virtual void Insert(IEnumerable nodes, IOutlineNode after, bool copy) - { - using (var moveTransaction = DesignItem.Context.OpenGroup("Item moved in outline view", nodes.Select(n => n.DesignItem).ToList())) - { - if (copy) - { - nodes = nodes.Select(n => OutlineNode.Create(n.DesignItem.Clone())).ToList(); - } - else - { - foreach (var node in nodes) - { - node.DesignItem.Remove(); - } - } - - var index = after == null ? 0 : Children.IndexOf(after) + 1; - - var content = DesignItem.ContentProperty; - if (content.IsCollection) - { - foreach (var node in nodes) - { - content.CollectionElements.Insert(index++, node.DesignItem); - } - } - else - { - content.SetValue(nodes.First().DesignItem); - } - moveTransaction.Commit(); - } - } - - #region INotifyPropertyChanged Members - - public event PropertyChangedEventHandler PropertyChanged; - - public void RaisePropertyChanged(string name) - { - if (PropertyChanged != null) - { - PropertyChanged(this, new PropertyChangedEventArgs(name)); - } - } - - #endregion - } + { + + protected abstract void UpdateChildren(); + //Used to check if element can enter other containers + protected static PlacementType DummyPlacementType; + + protected OutlineNodeBase(DesignItem designItem) + { + DesignItem = designItem; + + + var hidden = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).ValueOnInstance; + if (hidden != null && (bool)hidden) { + _isDesignTimeVisible = false; + ((FrameworkElement)DesignItem.Component).Visibility = Visibility.Hidden; + } + + var locked = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance; + if (locked != null && (bool)locked) { + _isDesignTimeLocked = true; + } + + //TODO + + DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged); + DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged); + } + + public DesignItem DesignItem { get; set; } + + public ISelectionService SelectionService + { + get { return DesignItem.Services.Selection; } + } + + bool isExpanded = true; + + public bool IsExpanded + { + get + { + return isExpanded; + } + set + { + isExpanded = value; + RaisePropertyChanged("IsExpanded"); + } + } + + bool isSelected; + + public bool IsSelected + { + get + { + return isSelected; + } + set + { + if (isSelected != value) { + isSelected = value; + SelectionService.SetSelectedComponents(new[] { DesignItem }, + value ? SelectionTypes.Add : SelectionTypes.Remove); + RaisePropertyChanged("IsSelected"); + } + } + } + + bool _isDesignTimeVisible = true; + + public bool IsDesignTimeVisible + { + get + { + return _isDesignTimeVisible; + } + set + { + _isDesignTimeVisible = value; + var ctl = DesignItem.Component as UIElement; + if(ctl!=null) + ctl.Visibility = _isDesignTimeVisible ? Visibility.Visible : Visibility.Hidden; + + RaisePropertyChanged("IsDesignTimeVisible"); + + if (!value) + DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).SetValue(true); + else + DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).Reset(); + } + } + + bool _isDesignTimeLocked = false; + + public bool IsDesignTimeLocked + { + get + { + return _isDesignTimeLocked; + } + set + { + _isDesignTimeLocked = value; + ((XamlDesignItem)DesignItem).IsDesignTimeLocked = _isDesignTimeLocked; + + RaisePropertyChanged("IsDesignTimeLocked"); + + // if (value) + // DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true); + // else + // DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset(); + } + } + + ObservableCollection children = new ObservableCollection(); + + public ObservableCollection Children + { + get { return children; } + } + + public string Name + { + get + { + if (string.IsNullOrEmpty(DesignItem.Name)) { + return DesignItem.ComponentType.Name; + } + return DesignItem.ComponentType.Name + " (" + DesignItem.Name + ")"; + } + } + + void DesignItem_NameChanged(object sender, EventArgs e) + { + RaisePropertyChanged("Name"); + } + + void DesignItem_PropertyChanged(object sender, PropertyChangedEventArgs e) + { + if (e.PropertyName == DesignItem.ContentPropertyName) { + UpdateChildren(); + } + } + + + + public bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy) + { + var placementBehavior = DesignItem.GetBehavior(); + if (placementBehavior == null) + return false; + var operation = PlacementOperation.Start(nodes.Select(node => node.DesignItem).ToArray(), DummyPlacementType); + if (operation != null) { + bool canEnter = placementBehavior.CanEnterContainer(operation, true); + operation.Abort(); + return canEnter; + } + return false; + } + + public virtual void Insert(IEnumerable nodes, IOutlineNode after, bool copy) + { + using (var moveTransaction = DesignItem.Context.OpenGroup("Item moved in outline view", nodes.Select(n => n.DesignItem).ToList())) + { + if (copy) { + nodes = nodes.Select(n => OutlineNode.Create(n.DesignItem.Clone())).ToList(); + } else { + foreach (var node in nodes) { + node.DesignItem.Remove(); + } + } + + var index = after == null ? 0 : Children.IndexOf(after) + 1; + + var content = DesignItem.ContentProperty; + if (content.IsCollection) { + foreach (var node in nodes) { + content.CollectionElements.Insert(index++, node.DesignItem); + } + } else { + content.SetValue(nodes.First().DesignItem); + } + moveTransaction.Commit(); + } + } + + #region INotifyPropertyChanged Members + + public event PropertyChangedEventHandler PropertyChanged; + + public void RaisePropertyChanged(string name) + { + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(name)); + } + } + + #endregion + } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs index bb7003011d..40a2cb834a 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs @@ -51,7 +51,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid public PropertyGridGroupMode GroupMode { - get { return _groupMode; } + get { return _groupMode; } set { if (_groupMode != value) @@ -202,7 +202,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid if (selectedItems == null || selectedItems.Count == 0) return; if (selectedItems.Count == 1) SingleItem = selectedItems[0]; - + foreach (var md in GetDescriptors()) { if (PassesFilter(md.Name)) AddNode(md); @@ -210,7 +210,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid } finally { reloadActive = false; if (AggregatePropertiesUpdated != null) - AggregatePropertiesUpdated(this, EventArgs.Empty); + AggregatePropertiesUpdated(this, EventArgs.Empty); } } From 78e4702ca306efa3cf42a5de8c6a3537c8374316 Mon Sep 17 00:00:00 2001 From: tbulle Date: Thu, 30 Jan 2014 12:28:29 +0100 Subject: [PATCH 005/575] changes to make tests work --- .../Project/OutlineView/OutlineNode.cs | 1 + .../Tests/Designer/OutlineView/HierarchyTests.cs | 2 +- .../Tests/Designer/OutlineView/InsertTests.cs | 16 ++++++++-------- .../Tests/Designer/OutlineView/SelectionTests.cs | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs index 5116f1f425..874b126f31 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs @@ -30,6 +30,7 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView string Name { get; } bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy); void Insert(IEnumerable nodes, IOutlineNode after, bool copy); + ObservableCollection Children{ get; } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/HierarchyTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/HierarchyTests.cs index 4d7080f558..416bb610fd 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/HierarchyTests.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/HierarchyTests.cs @@ -11,7 +11,7 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView public class HierarchyTests : ModelTestHelper { private DesignItem _grid; - private OutlineNode _outline; + private IOutlineNode _outline; [TestFixtureSetUp] public void Intialize() diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/InsertTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/InsertTests.cs index bdcb418e3e..eabc1bdff6 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/InsertTests.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/InsertTests.cs @@ -11,15 +11,15 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView public class CollectionElementsInsertTests : ModelTestHelper { private DesignItem _grid; - private OutlineNode _outline; + private IOutlineNode _outline; private DesignItem _gridButton; private DesignItem _stackPanel; private DesignItem _stackPanelButton; - private OutlineNode _gridButtonNode; - private OutlineNode _stackPanelNode; - private OutlineNode _stackPanelButtonNode; + private IOutlineNode _gridButtonNode; + private IOutlineNode _stackPanelNode; + private IOutlineNode _stackPanelButtonNode; [SetUp] public void Intialize() @@ -147,15 +147,15 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView public class ContentControlInsertTests : ModelTestHelper { private DesignItem _grid; - private OutlineNode _outline; + private IOutlineNode _outline; private DesignItem _gridButton; private DesignItem _stackPanel; private DesignItem _stackPanelImage; - private OutlineNode _gridButtonNode; - private OutlineNode _stackPanelNode; - private OutlineNode _stackPanelImageNode; + private IOutlineNode _gridButtonNode; + private IOutlineNode _stackPanelNode; + private IOutlineNode _stackPanelImageNode; [SetUp] public void Intialize() diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/SelectionTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/SelectionTests.cs index b5a5820b7a..cefd803a62 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/SelectionTests.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/SelectionTests.cs @@ -11,7 +11,7 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView public class SelectionTests : ModelTestHelper { private DesignItem _grid; - private OutlineNode _outline; + private IOutlineNode _outline; [SetUp] public void Intialize() From f4f0f39cb7132504e96bff64a68d6641c649e1c4 Mon Sep 17 00:00:00 2001 From: tbulle Date: Fri, 31 Jan 2014 00:20:33 +0100 Subject: [PATCH 006/575] Changes to OutlineTreeView to Work With IOutlineNode --- .../Project/OutlineView/OutlineTreeView.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs index f739db7366..0225f58a47 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs @@ -13,30 +13,30 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView protected override bool CanInsert(DragTreeViewItem target, DragTreeViewItem[] items, DragTreeViewItem after, bool copy) { UpdateCustomNodes(items); - return (target.DataContext as OutlineNode).CanInsert(_customOutlineNodes, - after == null ? null : after.DataContext as OutlineNode, copy); + return (target.DataContext as IOutlineNode).CanInsert(_customOutlineNodes, + after == null ? null : after.DataContext as IOutlineNode, copy); } protected override void Insert(DragTreeViewItem target, DragTreeViewItem[] items, DragTreeViewItem after, bool copy) { UpdateCustomNodes(items); - (target.DataContext as OutlineNode).Insert(_customOutlineNodes, - after == null ? null : after.DataContext as OutlineNode, copy); + (target.DataContext as IOutlineNode).Insert(_customOutlineNodes, + after == null ? null : after.DataContext as IOutlineNode, copy); } // Need to do this through a seperate List since previously LINQ queries apparently disconnected DataContext;bug in .NET 4.0 - private List _customOutlineNodes; + private List _customOutlineNodes; void UpdateCustomNodes(IEnumerable items) { - _customOutlineNodes = new List(); + _customOutlineNodes = new List(); foreach (var item in items) - _customOutlineNodes.Add(item.DataContext as OutlineNode); + _customOutlineNodes.Add(item.DataContext as IOutlineNode); } public override bool ShouldItemBeVisible(DragTreeViewItem dragTreeViewitem) { - var node = dragTreeViewitem.DataContext as OutlineNode; + var node = dragTreeViewitem.DataContext as IOutlineNode; return string.IsNullOrEmpty(Filter) || node.Name.ToLower().Contains(Filter.ToLower()); } @@ -45,7 +45,7 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView { base.SelectOnly(item); - var node = item.DataContext as OutlineNode; + var node = item.DataContext as IOutlineNode; var surface = node.DesignItem.View.TryFindParent(); if (surface != null) From 1b4e816e79b9a005e8f93d3a5bcf2b048c0e3732 Mon Sep 17 00:00:00 2001 From: Aaron Lenoir Date: Sat, 22 Mar 2014 23:11:21 +0100 Subject: [PATCH 007/575] Fixes #105: Toggling multiple block comments --- .../Project/Src/Editor/IFormattingStrategy.cs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Main/Base/Project/Src/Editor/IFormattingStrategy.cs b/src/Main/Base/Project/Src/Editor/IFormattingStrategy.cs index 5b5ea746c7..d688dcecdc 100644 --- a/src/Main/Base/Project/Src/Editor/IFormattingStrategy.cs +++ b/src/Main/Base/Project/Src/Editor/IFormattingStrategy.cs @@ -143,8 +143,21 @@ namespace ICSharpCode.SharpDevelop.Editor BlockCommentRegion region = FindSelectedCommentRegion(editor, blockStart, blockEnd); if (region != null) { - editor.Document.Remove(region.EndOffset, region.CommentEnd.Length); - editor.Document.Remove(region.StartOffset, region.CommentStart.Length); + do { + editor.Document.Remove(region.EndOffset, region.CommentEnd.Length); + editor.Document.Remove(region.StartOffset, region.CommentStart.Length); + + int selectionStart = region.EndOffset; + int selectionLength = editor.SelectionLength - (region.EndOffset - editor.SelectionStart); + + if(selectionLength > 0) { + editor.Select(region.EndOffset, selectionLength); + region = FindSelectedCommentRegion(editor, blockStart, blockEnd); + } else { + region = null; + } + } while(region != null); + } else { editor.Document.Insert(endOffset, blockEnd); editor.Document.Insert(startOffset, blockStart); From 8b8cdfbc406c138c1082e16fc1a42ef3b6643b5a Mon Sep 17 00:00:00 2001 From: tbulle Date: Thu, 8 May 2014 14:35:55 +0200 Subject: [PATCH 008/575] Created Interface to be able to customize PropertyGrid --- .../Project/PropertyGrid/PropertyGrid.cs | 20 +++++++++++++++++-- .../Project/PropertyGrid/PropertyGridView.cs | 10 +++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs index 14de050360..290ba2f121 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs @@ -35,7 +35,20 @@ using System.Windows; namespace ICSharpCode.WpfDesign.Designer.PropertyGrid { - public class PropertyGrid : INotifyPropertyChanged + public interface IPropertyGrid + { + IEnumerable SelectedItems { get; set; } + Dictionary NodeFromDescriptor { get; } + DesignItem SingleItem { get; } + string Name { get; set; } + string OldName { get; } + bool IsNameCorrect { get; set; } + bool ReloadActive { get; } + event EventHandler AggregatePropertiesUpdated; + event PropertyChangedEventHandler PropertyChanged; + } + + public class PropertyGrid : INotifyPropertyChanged, IPropertyGrid { public PropertyGrid() { @@ -54,7 +67,8 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid Category attachedCategory = new Category("Attached"); Dictionary nodeFromDescriptor = new Dictionary(); - + public Dictionary NodeFromDescriptor { get { return nodeFromDescriptor; } } + public event EventHandler AggregatePropertiesUpdated; public CategoriesCollection Categories { get; private set; } public PropertyNodeCollection Events { get; private set; } @@ -220,6 +234,8 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid } } finally { reloadActive = false; + if (AggregatePropertiesUpdated != null) + AggregatePropertiesUpdated(this, EventArgs.Empty); } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs index b80aeb5582..c213b05690 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs @@ -43,9 +43,13 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid } - public PropertyGridView() + public PropertyGridView() : this(null) { - PropertyGrid = new PropertyGrid(); + } + + public PropertyGridView(IPropertyGrid pg) + { + PropertyGrid = pg??new PropertyGrid(); DataContext = PropertyGrid; } @@ -61,7 +65,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid static PropertyContextMenu propertyContextMenu = new PropertyContextMenu(); - public PropertyGrid PropertyGrid { get; private set; } + public IPropertyGrid PropertyGrid { get; private set; } public static readonly DependencyProperty FirstColumnWidthProperty = DependencyProperty.Register("FirstColumnWidth", typeof(double), typeof(PropertyGridView), From 2b8f0cba26e3d2318488e191f92695f195d0c9dc Mon Sep 17 00:00:00 2001 From: jkuehner Date: Fri, 16 May 2014 08:36:07 +0200 Subject: [PATCH 009/575] Fix Assembly resolving in WPF Designer if Control DLLs require other Control DLLs --- .../WpfDesign.AddIn/Src/WpfViewContent.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs index fdca8ae69b..9de299b37a 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs @@ -22,6 +22,7 @@ using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; +using System.Reflection; using System.Threading; using System.Threading.Tasks; using System.Windows; @@ -60,6 +61,19 @@ namespace ICSharpCode.WpfDesign.AddIn this.TabPageText = "${res:FormsDesigner.DesignTabPages.DesignTabPage}"; this.IsActiveViewContentChanged += OnIsActiveViewContentChanged; + + var compilation = SD.ParserService.GetCompilationForFile(file.FileName); + _path = Path.GetDirectoryName(compilation.MainAssembly.UnresolvedAssembly.Location); + AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; + } + + System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) + { + var assemblyName = (new AssemblyName(args.Name)); + string fileName = Path.Combine(_path, assemblyName.Name) + ".dll"; + if (File.Exists(fileName)) + return Assembly.LoadFile(fileName); + return null; } static WpfViewContent() @@ -68,7 +82,8 @@ namespace ICSharpCode.WpfDesign.AddIn ICSharpCode.Core.MessageService.ShowException(e.Exception); }; } - + + private string _path; DesignSurface designer; List tasks = new List(); @@ -285,6 +300,7 @@ namespace ICSharpCode.WpfDesign.AddIn public override void Dispose() { + AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve; SD.ProjectService.ProjectItemAdded -= OnReferenceAdded; propertyContainer.Clear(); From 164af14443f9bc639d47d29bcc96226d249d5219 Mon Sep 17 00:00:00 2001 From: Dragan Date: Mon, 26 May 2014 14:11:12 +0200 Subject: [PATCH 010/575] CodeCoverage: Apply C# filter only to .cs files --- .../Project/Src/CodeCoverageMethodElement.cs | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethodElement.cs b/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethodElement.cs index 3b19dba9b2..36ed616511 100644 --- a/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethodElement.cs +++ b/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethodElement.cs @@ -58,6 +58,7 @@ namespace ICSharpCode.CodeCoverage public string FileID { get; private set; } public string FileName { get; private set; } + public string FileNameExt { get; private set; } public bool IsVisited { get; private set; } public int CyclomaticComplexity { get; private set; } public decimal SequenceCoverage { get; private set; } @@ -86,9 +87,14 @@ namespace ICSharpCode.CodeCoverage this.FileID = GetFileRef(); this.FileName = String.Empty; + this.FileNameExt = String.Empty; if (!String.IsNullOrEmpty(this.FileID)) { if (results != null) { this.FileName = results.GetFileName(this.FileID); + try { + this.FileNameExt = Path.GetExtension(this.FileName); + } + catch {} if (cacheFileName != this.FileName) { cacheFileName = this.FileName; cacheDocument = GetSource (cacheFileName); @@ -303,23 +309,26 @@ namespace ICSharpCode.CodeCoverage continue; // skip } - // 1) Generated "in" code for IEnumerables contains hidden "try/catch/finally" branches that - // one do not want or cannot cover by test-case because is handled earlier at same method. - // ie: NullReferenceException in foreach loop is pre-handled at method entry, ie. by Contract.Require(items!=null) - // 2) Branches within sequence points "{" and "}" are not source branches but compiler generated branches - // ie: static methods start sequence point "{" contains compiler generated branches - // 3) Exclude Contract class (EnsuresOnThrow/Assert/Assume is inside method body) - // 4) Exclude NUnit Assert(.Throws) class - const string assert = "Assert"; - const string contract = "Contract"; - if (sp.Content == "in" || sp.Content == "{" || sp.Content == "}" || - sp.Content.StartsWith(assert + ".", StringComparison.Ordinal) || - sp.Content.StartsWith(assert + " ", StringComparison.Ordinal) || - sp.Content.StartsWith(contract + ".", StringComparison.Ordinal) || - sp.Content.StartsWith(contract + " ", StringComparison.Ordinal) - ) { - sp.BranchCoverage = true; - continue; // skip + if (this.FileNameExt == ".cs") { + // 0) Only for C# + // 1) Generated "in" code for IEnumerables contains hidden "try/catch/finally" branches that + // one do not want or cannot cover by test-case because is handled earlier at same method. + // ie: NullReferenceException in foreach loop is pre-handled at method entry, ie. by Contract.Require(items!=null) + // 2) Branches within sequence points "{" and "}" are not source branches but compiler generated branches + // ie: static methods start sequence point "{" contains compiler generated branches + // 3) Exclude Contract class (EnsuresOnThrow/Assert/Assume is inside method body) + // 4) Exclude NUnit Assert(.Throws) class + const string assert = "Assert"; + const string contract = "Contract"; + if (sp.Content == "in" || sp.Content == "{" || sp.Content == "}" || + sp.Content.StartsWith(assert + ".", StringComparison.Ordinal) || + sp.Content.StartsWith(assert + " ", StringComparison.Ordinal) || + sp.Content.StartsWith(contract + ".", StringComparison.Ordinal) || + sp.Content.StartsWith(contract + " ", StringComparison.Ordinal) + ) { + sp.BranchCoverage = true; + continue; // skip + } } totalBranchCount += sp.BranchExitsCount; From 44b7357ad957699e3479a4762a383e8dc8e95fae Mon Sep 17 00:00:00 2001 From: Dragan Date: Thu, 12 Jun 2014 09:13:11 +0200 Subject: [PATCH 011/575] CodeCoverage: Apply ccrewrite filter on C# only Apply Branch-Coverage Code-Contract ccrewrite filter only to C#(.cs) files --- .../Project/Src/CodeCoverageMethodElement.cs | 96 +++++++++++-------- 1 file changed, 54 insertions(+), 42 deletions(-) diff --git a/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethodElement.cs b/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethodElement.cs index 36ed616511..9f47b35148 100644 --- a/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethodElement.cs +++ b/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethodElement.cs @@ -92,7 +92,7 @@ namespace ICSharpCode.CodeCoverage if (results != null) { this.FileName = results.GetFileName(this.FileID); try { - this.FileNameExt = Path.GetExtension(this.FileName); + this.FileNameExt = Path.GetExtension(this.FileName).ToLowerInvariant(); } catch {} if (cacheFileName != this.FileName) { @@ -226,14 +226,19 @@ namespace ICSharpCode.CodeCoverage // -> this method SP with lowest Line/Column void getBodyStartSP() { if (this.SequencePoints.Count != 0) { - foreach (CodeCoverageSequencePoint sp in this.SequencePoints) { - if (sp.FileID != this.FileID) continue; - if (this.BodyStartSP == null || (sp.Line < this.BodyStartSP.Line) || - (sp.Line == this.BodyStartSP.Line && sp.Column < this.BodyStartSP.Column) - ) { - this.BodyStartSP = sp; + if (this.FileNameExt == ".cs") { + foreach (CodeCoverageSequencePoint sp in this.SequencePoints) { + if (sp.FileID != this.FileID) continue; + if (this.BodyStartSP == null || (sp.Line < this.BodyStartSP.Line) || + (sp.Line == this.BodyStartSP.Line && sp.Column < this.BodyStartSP.Column) + ) { + this.BodyStartSP = sp; + } } } + else { + this.BodyStartSP = this.SequencePoints.First(); + } } } @@ -242,29 +247,34 @@ namespace ICSharpCode.CodeCoverage // and lowest Offset (when duplicated bw ccrewrite) void getBodyFinalSP() { if (this.SequencePoints.Count != 0) { - for (int i = this.SequencePoints.Count-1; i > 0; i--) { - var sp = this.SequencePoints[i]; - if (sp.FileID != this.FileID) continue; - if (sp.Content != "}") continue; - if (this.BodyFinalSP == null || (sp.Line > this.BodyFinalSP.Line) || - (sp.Line == this.BodyFinalSP.Line && sp.Column >= this.BodyFinalSP.Column) - ) { - // ccrewrite ContractClass/ContractClassFor - // adds duplicate method end-sequence-point "}" - // - // Take duplicate BodyFinalSP with lower Offset - // Because IL.Offset of second duplicate - // will extend branch coverage of this method - // by coverage of ContractClassFor inserted SequencePoint! - if (this.BodyFinalSP != null && - sp.Line == this.BodyFinalSP.Line && - sp.Column == this.BodyFinalSP.Column && - sp.Offset < this.BodyFinalSP.Offset) { - this.SequencePoints.Remove(this.BodyFinalSP); // remove duplicate + if (this.FileNameExt == ".cs") { + for (int i = this.SequencePoints.Count-1; i > 0; i--) { + var sp = this.SequencePoints[i]; + if (sp.FileID != this.FileID) continue; + if (sp.Content != "}") continue; + if (this.BodyFinalSP == null || (sp.Line > this.BodyFinalSP.Line) || + (sp.Line == this.BodyFinalSP.Line && sp.Column >= this.BodyFinalSP.Column) + ) { + // ccrewrite ContractClass/ContractClassFor + // adds duplicate method end-sequence-point "}" + // + // Take duplicate BodyFinalSP with lower Offset + // Because IL.Offset of second duplicate + // will extend branch coverage of this method + // by coverage of ContractClassFor inserted SequencePoint! + if (this.BodyFinalSP != null && + sp.Line == this.BodyFinalSP.Line && + sp.Column == this.BodyFinalSP.Column && + sp.Offset < this.BodyFinalSP.Offset) { + this.SequencePoints.Remove(this.BodyFinalSP); // remove duplicate + } + this.BodyFinalSP = sp; } - this.BodyFinalSP = sp; } } + else { + this.BodyFinalSP = this.SequencePoints.Last(); + } } } @@ -279,6 +289,9 @@ namespace ICSharpCode.CodeCoverage return 0; } + const string @assert = "Assert"; + const string @contract = "Contract"; + void GetBranchRatio () { this.BranchCoverageRatio = null; @@ -301,16 +314,17 @@ namespace ICSharpCode.CodeCoverage // SequencePoint is visited and belongs to this method? if (sp.VisitCount != 0 && sp.FileID == this.FileID) { - // Don't want branch coverage of ccrewrite(n) - // SequencePoint's with offset before and after method body - if (sp.Offset < BodyStartSP.Offset || - sp.Offset > BodyFinalSP.Offset) { - sp.BranchCoverage = true; - continue; // skip - } - if (this.FileNameExt == ".cs") { - // 0) Only for C# + // Only for C# + + // Don't want branch coverage of ccrewrite(n) + // SequencePoint(s) with offset before and after method body + if (sp.Offset < BodyStartSP.Offset || + sp.Offset > BodyFinalSP.Offset) { + sp.BranchCoverage = true; + continue; // skip + } + // 1) Generated "in" code for IEnumerables contains hidden "try/catch/finally" branches that // one do not want or cannot cover by test-case because is handled earlier at same method. // ie: NullReferenceException in foreach loop is pre-handled at method entry, ie. by Contract.Require(items!=null) @@ -318,13 +332,11 @@ namespace ICSharpCode.CodeCoverage // ie: static methods start sequence point "{" contains compiler generated branches // 3) Exclude Contract class (EnsuresOnThrow/Assert/Assume is inside method body) // 4) Exclude NUnit Assert(.Throws) class - const string assert = "Assert"; - const string contract = "Contract"; if (sp.Content == "in" || sp.Content == "{" || sp.Content == "}" || - sp.Content.StartsWith(assert + ".", StringComparison.Ordinal) || - sp.Content.StartsWith(assert + " ", StringComparison.Ordinal) || - sp.Content.StartsWith(contract + ".", StringComparison.Ordinal) || - sp.Content.StartsWith(contract + " ", StringComparison.Ordinal) + sp.Content.StartsWith(@assert + ".", StringComparison.Ordinal) || + sp.Content.StartsWith(@assert + " ", StringComparison.Ordinal) || + sp.Content.StartsWith(@contract + ".", StringComparison.Ordinal) || + sp.Content.StartsWith(@contract + " ", StringComparison.Ordinal) ) { sp.BranchCoverage = true; continue; // skip From 11662db1b968207130832556e1504c271d8b3b2a Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 13 Jun 2014 19:03:45 +0200 Subject: [PATCH 012/575] fix #418: File rename can break project file. The SVN AddIn should check if the rename operation is legal before attempting to rename a file. --- .../Src/Commands/AutostartCommands.cs | 4 ++ .../Project/ICSharpCode.SharpDevelop.csproj | 1 + .../Project/Workbench/File/FileHelpers.cs | 49 +++++++++++++++++++ .../SharpDevelop/Workbench/FileService.cs | 36 ++++---------- 4 files changed, 64 insertions(+), 26 deletions(-) create mode 100644 src/Main/Base/Project/Workbench/File/FileHelpers.cs diff --git a/src/AddIns/VersionControl/SubversionAddIn/Src/Commands/AutostartCommands.cs b/src/AddIns/VersionControl/SubversionAddIn/Src/Commands/AutostartCommands.cs index 639719169e..20e32b2a72 100644 --- a/src/AddIns/VersionControl/SubversionAddIn/Src/Commands/AutostartCommands.cs +++ b/src/AddIns/VersionControl/SubversionAddIn/Src/Commands/AutostartCommands.cs @@ -389,6 +389,10 @@ namespace ICSharpCode.Svn.Commands if (!AddInOptions.AutomaticallyRenameFiles) return; string fullSource = Path.GetFullPath(e.SourceFile); if (!CanBeVersionControlledFile(fullSource)) return; + if (!FileHelpers.CheckRenameOrReplacePossible(e)) { + e.Cancel = true; + return; + } try { using (SvnClientWrapper client = new SvnClientWrapper()) { SvnMessageView.HandleNotifications(client); diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index b5d00fc3bb..07b470e716 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -366,6 +366,7 @@ + diff --git a/src/Main/Base/Project/Workbench/File/FileHelpers.cs b/src/Main/Base/Project/Workbench/File/FileHelpers.cs new file mode 100644 index 0000000000..d2f27371d5 --- /dev/null +++ b/src/Main/Base/Project/Workbench/File/FileHelpers.cs @@ -0,0 +1,49 @@ +// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this +// software and associated documentation files (the "Software"), to deal in the Software +// without restriction, including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +// to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +using System; +using System.IO; +using ICSharpCode.Core; + +namespace ICSharpCode.SharpDevelop.Workbench +{ + /// + /// Utility/helper methods for IFileService to avoid changing the IFileService interface. + /// + public static class FileHelpers + { + /// + /// Checks that the rename/overwrite operation is possible. + /// + public static bool CheckRenameOrReplacePossible(FileRenameEventArgs e, bool replaceAllowed = false) + { + if (e.IsDirectory && Directory.Exists(e.SourceFile)) { + if (!replaceAllowed && Directory.Exists(e.TargetFile)) { + SD.MessageService.ShowMessage(StringParser.Parse("${res:Gui.ProjectBrowser.FileInUseError}")); + return false; + } + } else if (File.Exists(e.SourceFile)) { + if (!replaceAllowed && File.Exists(e.TargetFile)) { + SD.MessageService.ShowMessage(StringParser.Parse("${res:Gui.ProjectBrowser.FileInUseError}")); + return false; + } + } + return true; + } + } +} diff --git a/src/Main/SharpDevelop/Workbench/FileService.cs b/src/Main/SharpDevelop/Workbench/FileService.cs index 41a18fb0ff..36816e36a4 100644 --- a/src/Main/SharpDevelop/Workbench/FileService.cs +++ b/src/Main/SharpDevelop/Workbench/FileService.cs @@ -580,20 +580,12 @@ namespace ICSharpCode.SharpDevelop.Workbench return false; if (!eargs.OperationAlreadyDone) { try { - if (isDirectory && Directory.Exists(oldName)) { - - if (Directory.Exists(newName)) { - MessageService.ShowMessage(StringParser.Parse("${res:Gui.ProjectBrowser.FileInUseError}")); - return false; + if (FileHelpers.CheckRenameOrReplacePossible(eargs)) { + if (isDirectory) { + Directory.Move(oldName, newName); + } else { + File.Move(oldName, newName); } - Directory.Move(oldName, newName); - - } else if (File.Exists(oldName)) { - if (File.Exists(newName)) { - MessageService.ShowMessage(StringParser.Parse("${res:Gui.ProjectBrowser.FileInUseError}")); - return false; - } - File.Move(oldName, newName); } } catch (Exception e) { if (isDirectory) { @@ -624,20 +616,12 @@ namespace ICSharpCode.SharpDevelop.Workbench return false; if (!eargs.OperationAlreadyDone) { try { - if (isDirectory && Directory.Exists(oldName)) { - - if (!overwrite && Directory.Exists(newName)) { - MessageService.ShowMessage(StringParser.Parse("${res:Gui.ProjectBrowser.FileInUseError}")); - return false; - } - FileUtility.DeepCopy(oldName, newName, overwrite); - - } else if (File.Exists(oldName)) { - if (!overwrite && File.Exists(newName)) { - MessageService.ShowMessage(StringParser.Parse("${res:Gui.ProjectBrowser.FileInUseError}")); - return false; + if (FileHelpers.CheckRenameOrReplacePossible(eargs, overwrite)) { + if (isDirectory) { + FileUtility.DeepCopy(oldName, newName, overwrite); + } else { + File.Copy(oldName, newName, overwrite); } - File.Copy(oldName, newName, overwrite); } } catch (Exception e) { if (isDirectory) { From a98e6967d8391743f4a7c63321a13198edb90d09 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Sat, 14 Jun 2014 20:12:46 +0200 Subject: [PATCH 013/575] CanGrow --- .../Src/Wpf/Visitor/FixedDocumentCreator.cs | 14 ++++++++------ .../Src/Wpf/Visitor/WpfVisitor.cs | 16 ++++++---------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/FixedDocumentCreator.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/FixedDocumentCreator.cs index e0abb1b986..aee385c9d8 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/FixedDocumentCreator.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/FixedDocumentCreator.cs @@ -66,11 +66,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor FlowDirection flowDirection; var culture = CultureInfo.CurrentCulture; - if (culture.TextInfo.IsRightToLeft) { - flowDirection = FlowDirection.RightToLeft; - } else { - flowDirection = FlowDirection.LeftToRight; - } + flowDirection = culture.TextInfo.IsRightToLeft ? FlowDirection.RightToLeft : FlowDirection.LeftToRight; var emSize = ExtensionMethodes.ToPoints((int)exportText.Font.SizeInPoints +1); @@ -81,8 +77,14 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor emSize, new SolidColorBrush(exportText.ForeColor.ToWpf()), null, TextFormattingMode.Display); - formattedText.MaxTextWidth = ExtensionMethodes.ToPoints(exportText.DesiredSize.Width); + formattedText.MaxTextWidth = exportText.DesiredSize.Width ; +// formattedText.TextAlignment = TextAlignment.Justify; + if (!exportText.CanGrow) { + formattedText.MaxTextHeight = exportText.Size.Height; + } else { + formattedText.MaxTextHeight = ExtensionMethodes.ToPoints(exportText.DesiredSize.Height ); + } ApplyPrintStyles(formattedText,exportText); return formattedText; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs index 70ed71dbdf..e843cc16e5 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs @@ -120,26 +120,22 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor public override void Visit(ExportText exportColumn){ var formattedText = FixedDocumentCreator.CreateFormattedText((ExportText)exportColumn); - var visual = new DrawingVisual(); - var location = new Point(exportColumn.Location.X,exportColumn.Location.Y); - using (var dc = visual.RenderOpen()){ + var visual = new DrawingVisual(); + using (var drawingContext = visual.RenderOpen()){ if (ShouldSetBackcolor(exportColumn)) { - dc.DrawRectangle(FixedDocumentCreator.ConvertBrush(exportColumn.BackColor), + drawingContext.DrawRectangle(FixedDocumentCreator.ConvertBrush(exportColumn.BackColor), null, new Rect(location,new Size(exportColumn.Size.Width,exportColumn.Size.Height))); } - +//http://stackoverflow.com/questions/4542717/length-of-string-that-will-fit-in-a-specific-width // http://stackoverflow.com/questions/9264398/how-to-calculate-wpf-textblock-width-for-its-known-font-size-and-characters -// if (exportColumn.ContentAlignment == System.Drawing.ContentAlignment.MiddleCenter) { -// location = new Point(location.X + (exportColumn.Size.Width - formattedText.Width) /2,location.Y + (exportColumn.Size.Height - formattedText.Height) / 2); -// } var offset = FixedDocumentCreator.CalculateAlignmentOffset(formattedText,exportColumn); var newLoc = new Point(location.X + offset.X,location.Y + offset.Y); -// dc.DrawText(formattedText,location); - dc.DrawText(formattedText,newLoc); + + drawingContext.DrawText(formattedText,newLoc); } var dragingElement = new DrawingElement(visual); UIElement = dragingElement; From 63298a275201c740836d68a509d00e44744b03e1 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sat, 14 Jun 2014 23:12:46 +0200 Subject: [PATCH 014/575] fix #399: NotImplementedException when updating watch pad in decompiled code --- .../DisplayBindings/ILSpyAddIn/ILSpyParser.cs | 28 ++++++++++++++++++- .../InsertMissingTokensDecorator.cs | 1 + 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs b/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs index 12d74a23aa..de246b0a27 100644 --- a/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs +++ b/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs @@ -20,6 +20,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Reflection; +using System.Text; using System.Threading; using ICSharpCode.Core; using ICSharpCode.NRefactory; @@ -82,7 +83,32 @@ namespace ICSharpCode.ILSpyAddIn public ResolveResult ResolveSnippet(ParseInformation parseInfo, TextLocation location, string codeSnippet, ICompilation compilation, CancellationToken cancellationToken) { - return null; + var decompiledParseInfo = parseInfo as ILSpyFullParseInformation; + if (decompiledParseInfo == null) + throw new ArgumentException("ParseInfo does not have SyntaxTree"); + CSharpAstResolver contextResolver = new CSharpAstResolver(compilation, decompiledParseInfo.SyntaxTree, null); + var node = decompiledParseInfo.SyntaxTree.GetNodeAt(location); + CSharpResolver context; + if (node != null) + context = contextResolver.GetResolverStateAfter(node, cancellationToken); + else + context = new CSharpResolver(compilation); + CSharpParser parser = new CSharpParser(); + var expr = parser.ParseExpression(codeSnippet); + if (parser.HasErrors) + return new ErrorResolveResult(SpecialType.UnknownType, PrintErrorsAsString(parser.Errors), TextLocation.Empty); + CSharpAstResolver snippetResolver = new CSharpAstResolver(context, expr); + return snippetResolver.Resolve(expr, cancellationToken); + } + + string PrintErrorsAsString(IEnumerable errors) + { + StringBuilder builder = new StringBuilder(); + + foreach (var error in errors) + builder.AppendLine(error.Message); + + return builder.ToString(); } public void FindLocalReferences(ParseInformation parseInfo, ITextSource fileContent, IVariable variable, ICompilation compilation, Action callback, CancellationToken cancellationToken) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertMissingTokensDecorator.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertMissingTokensDecorator.cs index 4f390d92dc..3f92001457 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertMissingTokensDecorator.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertMissingTokensDecorator.cs @@ -61,6 +61,7 @@ namespace ICSharpCode.NRefactory.CSharp public override void WriteToken(Role role, string token) { CSharpTokenNode t = new CSharpTokenNode(locationProvider.Location, (TokenRole)role); + t.Role = role; EmptyStatement node = nodes.Peek().LastOrDefault() as EmptyStatement; if (node == null) currentList.Add(t); From 0f397285c89ff23ef75cb4be867e90ea6e1064b7 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Sun, 15 Jun 2014 23:50:57 +0200 Subject: [PATCH 015/575] Fix #394: Code hidden by method completion. --- .../Project/Src/Completion/CSharpMethodInsight.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpMethodInsight.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpMethodInsight.cs index 33b42b37bd..8fb08c9316 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpMethodInsight.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpMethodInsight.cs @@ -50,7 +50,9 @@ namespace CSharpBinding.Completion public void Show() { window = editor.ShowInsightWindow(items); - window.StartOffset = startOffset; + // Set startOffset so that window always appears below the caret line + var startLocation = editor.Document.GetLocation(startOffset); + window.StartOffset = editor.Document.GetOffset(editor.Caret.Line, startLocation.Column); // closing the window at the end of the parameter list is handled by the CaretPositionChanged event window.EndOffset = editor.Document.TextLength; if (initiallySelectedItem != null) From 69bef7e8e902eeaf54766ef6f75a2516af0fd7a2 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Mon, 16 Jun 2014 11:12:53 +0200 Subject: [PATCH 016/575] fix #451: InvalidOperationException when creating event handler for Slider.ValueChanged --- .../Project/Src/Refactoring/CSharpCodeGenerator.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs index a341e62b93..9902fef703 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs @@ -86,7 +86,10 @@ namespace CSharpBinding.Refactoring var node = context.RootNode.GetNodeAt(last.Region.Begin); var resolver = context.GetResolverStateAfter(node); var builder = new TypeSystemAstBuilder(resolver); - var delegateDecl = builder.ConvertEntity(eventDefinition.ReturnType.GetDefinition()) as DelegateDeclaration; + var invokeMethod = eventDefinition.ReturnType.GetDelegateInvokeMethod(); + if (invokeMethod == null) return; + var importedMethod = resolver.Compilation.Import(invokeMethod); + var delegateDecl = builder.ConvertEntity(importedMethod) as MethodDeclaration; if (delegateDecl == null) return; var throwStmt = new ThrowStatement(new ObjectCreateExpression(context.CreateShortType("System", "NotImplementedException"))); var decl = new MethodDeclaration() { @@ -96,7 +99,7 @@ namespace CSharpBinding.Refactoring throwStmt } }; - var param = delegateDecl.Parameters.Select(p => p.Clone()).OfType().ToArray(); + var param = delegateDecl.Parameters.Select(p => p.Clone()).ToArray(); decl.Parameters.AddRange(param); using (Script script = context.StartScript()) { From 00e3da97d84729d4f6e34b7b104cf883469fda84 Mon Sep 17 00:00:00 2001 From: jkuehner Date: Mon, 16 Jun 2014 14:05:48 +0200 Subject: [PATCH 017/575] WPF Extended Toolkit DLL Update --- .../WPFExtendedToolkit/Xceed.Wpf.Toolkit.dll | Bin 1203200 -> 1253888 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/Libraries/WPFExtendedToolkit/Xceed.Wpf.Toolkit.dll b/src/Libraries/WPFExtendedToolkit/Xceed.Wpf.Toolkit.dll index 7af68875f999b1ce2cddb48597a6b031bf834b56..edc55cca2f1cded24e50b4b3eb3272cc1044b8d3 100644 GIT binary patch delta 440928 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

Ft0$6EI^ykGKs=i&6; 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%0D$zE^K32p9P)8Mn>0PAaLc)!}mBu9% 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

l81COhLfJ7R6+V?@(G4kbdIutZA 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 Ag#Z8m From fffcd64ee977d4fd72e52e326a05e46d1961e8c6 Mon Sep 17 00:00:00 2001 From: Ciprian Khlud Date: Mon, 16 Jun 2014 22:27:11 +0300 Subject: [PATCH 018/575] Added a search box for adding project references. It is important for big projects --- .../ReferenceDialog/ProjectReferencePanel.cs | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs index b77ef92be8..7cd6010d48 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs @@ -27,6 +27,7 @@ namespace ICSharpCode.SharpDevelop.Gui public class ProjectReferencePanel : ListView, IReferencePanel { ISelectReferenceDialog selectDialog; + TextBox filterTextBox; public ProjectReferencePanel(ISelectReferenceDialog selectDialog) { @@ -48,6 +49,15 @@ namespace ICSharpCode.SharpDevelop.Gui ItemActivate += delegate { AddReference(); }; PopulateListView(); + + + Panel upperPanel = new Panel { Dock = DockStyle.Top, Height = 20 }; + filterTextBox = new TextBox { Width = 150, Dock = DockStyle.Right }; + filterTextBox.TextChanged += delegate { Search(); }; + + upperPanel.Controls.Add(filterTextBox); + + this.Controls.Add(upperPanel); } public void AddReference() @@ -60,6 +70,7 @@ namespace ICSharpCode.SharpDevelop.Gui new ProjectReferenceProjectItem(selectDialog.ConfigureProject, project) ); } + filterTextBox.Text = ""; } void PopulateListView() @@ -74,5 +85,32 @@ namespace ICSharpCode.SharpDevelop.Gui Items.Add(newItem); } } + + static bool ContainsAnyOfTokens(string bigText, string[] tokens) + { + if(tokens.Length==0) + return true; + foreach(var token in tokens) + { + if(bigText.Contains(token)) + return true; + } + return false; + } + + void Search() + { + Items.Clear(); + var tokens = filterTextBox.Text.Split(new []{' '}, StringSplitOptions.RemoveEmptyEntries); + + foreach (IProject project in ProjectService.OpenSolution.Projects. + Where(pr=>ContainsAnyOfTokens(pr.Name, tokens)) + .OrderBy(p => p.Name, StringComparer.OrdinalIgnoreCase) + ) { + ListViewItem newItem = new ListViewItem(new string[] { project.Name, project.Directory }); + newItem.Tag = project; + Items.Add(newItem); + } + } } } From f486456ec06518d6379f38bbe7964a7af9a7c4f8 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Tue, 17 Jun 2014 02:02:10 +0200 Subject: [PATCH 019/575] Part of #234: There was no key handling for Ctrl+Z & Ctrl+Y. --- .../DisplayBindings/HexEditor/Project/Src/Editor.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/AddIns/DisplayBindings/HexEditor/Project/Src/Editor.cs b/src/AddIns/DisplayBindings/HexEditor/Project/Src/Editor.cs index c88ff715ba..fab5025825 100644 --- a/src/AddIns/DisplayBindings/HexEditor/Project/Src/Editor.cs +++ b/src/AddIns/DisplayBindings/HexEditor/Project/Src/Editor.cs @@ -1413,6 +1413,14 @@ namespace HexEditor this.Delete(); } break; + // Ctrl-Y is pressed -> redo + case 89: + Redo(); + break; + // Ctrl-Z is pressed -> undo + case 90: + Undo(); + break; } break; } From 8fa0692cfadef16cb9a4bf72065df429c5f54a1f Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Tue, 17 Jun 2014 22:33:06 +0100 Subject: [PATCH 020/575] Generate repositories.config file after NuGet package restore. The repositories.config contains a list of projects that share the packages directory. If this is not restored then uninstalling a NuGet package from one project could end up with NuGet removing it completely from the packages directory since it believes that no other project is referencing this NuGet package even if this is not the case. --- .../Project/Src/RestorePackagesCommand.cs | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/RestorePackagesCommand.cs b/src/AddIns/Misc/PackageManagement/Project/Src/RestorePackagesCommand.cs index 76a175950d..5020d26206 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/RestorePackagesCommand.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/RestorePackagesCommand.cs @@ -18,6 +18,9 @@ using System; using System.IO; +using System.Linq; +using System.Threading.Tasks; + using ICSharpCode.Core; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui; @@ -71,7 +74,33 @@ namespace ICSharpCode.PackageManagement var runner = new ProcessRunner(); runner.WorkingDirectory = Path.GetDirectoryName(solution.FileName); - runner.RunInOutputPadAsync(outputMessagesView.OutputCategory, commandLine.Command, commandLine.Arguments).FireAndForget(); + runner.RunInOutputPadAsync(outputMessagesView.OutputCategory, commandLine.Command, commandLine.Arguments) + .ContinueWith(task => OnNuGetPackageRestoreComplete(task)); + } + + void OnNuGetPackageRestoreComplete(Task task) + { + if (task.Exception != null) { + LoggingService.Debug(task.Exception.ToString()); + outputMessagesView.AppendLine(task.Exception.Message); + } else { + ForceGenerationOfRepositoriesConfigFile(); + } + } + + ///

+ /// Create a Package Manager for each project to force a new repositories.config file + /// to be generated with references to all projects that have NuGet packages. + /// + void ForceGenerationOfRepositoriesConfigFile() + { + try { + var repository = PackageManagementServices.RegisteredPackageRepositories.CreateAggregateRepository(); + var projects = solution.GetProjects(repository).ToList(); + } catch (Exception ex) { + LoggingService.Debug(ex.ToString()); + outputMessagesView.AppendLine(ex.Message); + } } } } From 921973184889a375303c52894112c5e8e8e568f4 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Fri, 20 Jun 2014 20:36:58 +0200 Subject: [PATCH 021/575] ContentAlignment is Obsolte, use TextAlignment as replacement to print Left,Center,Right and Justified Text --- .../src/DesignableItems/BaseTextItem.cs | 34 +++++---- .../src/TypeProvider/TypeProviderHelper.cs | 6 +- .../Src/Arrange/ArrangeStrategy.cs | 5 +- .../Src/BaseClasses/TextDrawer.cs | 71 +++++++++---------- .../Src/Globals/MeasurementService.cs | 1 + .../Src/Items/BaseTextItem.cs | 10 ++- .../PageBuilder/ExportColumns/ExportText.cs | 5 ++ .../Src/Wpf/Visitor/FixedDocumentCreator.cs | 19 +++-- .../Src/Wpf/Visitor/WpfVisitor.cs | 16 +++-- 9 files changed, 88 insertions(+), 79 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseTextItem.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseTextItem.cs index a68d6e640a..e77e78f57c 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseTextItem.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseTextItem.cs @@ -10,6 +10,7 @@ using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Design; +using System.Windows; using ICSharpCode.Reporting.BaseClasses; using ICSharpCode.Reporting.Globals; using ICSharpCode.Reporting.Addin.Designer; @@ -31,18 +32,18 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems StringFormat stringFormat; StringTrimming stringTrimming; ContentAlignment contentAlignment; - + TextAlignment textAlignment; public BaseTextItem(){ DefaultSize = GlobalValues.PreferedSize; Size = GlobalValues.PreferedSize; BackColor = Color.White; contentAlignment = ContentAlignment.TopLeft; + textAlignment = TextAlignment.Left; TypeDescriptor.AddProvider(new TextItemTypeProvider(), typeof(BaseTextItem)); } -// [EditorBrowsableAttribute()] protected override void OnPaint(System.Windows.Forms.PaintEventArgs e){ base.OnPaint(e); Draw(e.Graphics); @@ -64,7 +65,8 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems designTrimmimg = stringTrimming; } - stringFormat = TextDrawer.BuildStringFormat(designTrimmimg, contentAlignment); +// stringFormat = TextDrawer.BuildStringFormat(designTrimmimg, contentAlignment); + stringFormat = TextDrawer.BuildStringFormat(designTrimmimg, textAlignment); using (var textBrush = new SolidBrush(ForeColor)) { TextDrawer.DrawString(graphics, Text, Font, textBrush, ClientRectangle, stringFormat); } @@ -119,10 +121,9 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems } - [Category("Appearance")] [EditorAttribute(typeof(ContentAlignmentEditor), - typeof(UITypeEditor) )] + typeof(UITypeEditor) )] public ContentAlignment ContentAlignment { get { return contentAlignment; } set { @@ -132,18 +133,15 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems } + [Category("Appearance")] + public TextAlignment TextAlignment { + get { return textAlignment;} + set {textAlignment = value; + Invalidate();} + } + #endregion -// #region RighToLeft -// -// [Category("Appearance")] -// public System.Windows.Forms.RightToLeft RTL -// { -// get { return base.RightToLeft; } -// set { base.RightToLeft = value; } -// } -// -// #endregion #region DataType @@ -158,10 +156,10 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems #region Expression [Browsable(true), - Category("Expression"), - Description("Enter a valid Expression")] + Category("Expression"), + Description("Enter a valid Expression")] [EditorAttribute(typeof(ExpressionEditor), - typeof(UITypeEditor) )] + typeof(UITypeEditor) )] public string Expression {get;set;} #endregion diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/TypeProviderHelper.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/TypeProviderHelper.cs index e8195390bb..9fa4b908d5 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/TypeProviderHelper.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/TypeProviderHelper.cs @@ -99,6 +99,9 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider prop = props.Find("ContentAlignment",true); allProperties.Add(prop); + prop = props.Find("TextAlignment",true); + allProperties.Add(prop); + prop = props.Find("CanGrow",true); allProperties.Add(prop); @@ -107,9 +110,6 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider prop = props.Find("DataType",true); allProperties.Add(prop); - -// prop = props.Find("RTL",true); -// allProperties.Add(prop); } public static void AddGraphicProperties (List allProperties, diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs index fa56c5c805..c954a572cf 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs @@ -58,7 +58,6 @@ namespace ICSharpCode.Reporting.Arrange { var containerRectangle = container.DisplayRectangle; Rectangle elementRectangle = Rectangle.Empty; - foreach (var element in container.ExportedItems) { var con = element as IExportContainer; if (con != null) { @@ -76,9 +75,7 @@ namespace ICSharpCode.Reporting.Arrange containerRectangle = new Rectangle(containerRectangle.Left, containerRectangle.Top , containerRectangle.Width, - element.Location.Y + elementRectangle.Size.Height + 5); - -// containerRectangle = Rectangle.Union(containerRectangle,elementRectangle); + element.Location.Y + elementRectangle.Size.Height + 5); } } return containerRectangle.Size; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/TextDrawer.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/TextDrawer.cs index 4a43d14f4b..ccd2668d51 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/TextDrawer.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/TextDrawer.cs @@ -9,20 +9,15 @@ using System; using System.Drawing; using System.Drawing.Text; +using System.Windows; namespace ICSharpCode.Reporting.BaseClasses { /// /// Description of TextDrawer. /// - public sealed class TextDrawer + public static class TextDrawer { - - private TextDrawer() - { - } - - public static void DrawString(Graphics graphics,string text, Font font,Brush brush, RectangleF rectangle, @@ -38,41 +33,40 @@ namespace ICSharpCode.Reporting.BaseClasses rectangle, format); } + - - public static void DrawString (Graphics graphics,string text) - - { - if (graphics == null) { - throw new ArgumentNullException("graphics"); + public static StringFormat BuildStringFormat(StringTrimming stringTrimming,TextAlignment alignment){ + StringFormat format = StringFormat.GenericTypographic; + format.Trimming = stringTrimming; + format.FormatFlags = StringFormatFlags.LineLimit; + switch (alignment) { + case TextAlignment.Left:{ + format.Alignment = StringAlignment.Near; + format.LineAlignment = StringAlignment.Near; + return format; + } + case TextAlignment.Center:{ + format.Alignment = StringAlignment.Center; + format.LineAlignment = StringAlignment.Near; + return format; + } + + case TextAlignment.Right:{ + format.Alignment = StringAlignment.Far; + format.LineAlignment = StringAlignment.Near; + return format; + } + + case TextAlignment.Justify:{ + format.Alignment = StringAlignment.Center; + format.LineAlignment = StringAlignment.Near; + return format; + } } -// if (decorator == null) { -// throw new ArgumentNullException("decorator"); -// } - -// StringFormat stringFormat = BuildStringFormat(decorator.StringTrimming,decorator.ContentAlignment); -// -// if (decorator.RightToLeft ==System.Windows.Forms.RightToLeft.Yes) { -// stringFormat.FormatFlags = stringFormat.FormatFlags | StringFormatFlags.DirectionRightToLeft; -// } - - var formattedString = text; -// if (! String.IsNullOrEmpty(decorator.FormatString)) { -// formattedString = StandardFormatter.FormatOutput(text,decorator.FormatString,decorator.DataType,String.Empty); -// } - - graphics.TextRenderingHint = TextRenderingHint.AntiAlias; - -// graphics.DrawString (formattedString,decorator.Font, -// new SolidBrush(decorator.ForeColor), -// new Rectangle(decorator.Location.X, -// decorator.Location.Y, -// decorator.Size.Width, -// decorator.Size.Height), -// stringFormat); + return format; } - + /* public static StringFormat BuildStringFormat(StringTrimming stringTrimming,ContentAlignment alignment) { StringFormat format = StringFormat.GenericTypographic; @@ -139,5 +133,6 @@ namespace ICSharpCode.Reporting.BaseClasses format.LineAlignment = StringAlignment.Far; return format; } + */ } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/MeasurementService.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/MeasurementService.cs index 6b5f61572a..133dfeeadd 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/MeasurementService.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/MeasurementService.cs @@ -45,6 +45,7 @@ namespace ICSharpCode.Reporting.Globals } return new Size(item.Size.Width,(int)Math.Ceiling(sizeF.Height)); } + Console.WriteLine ("measure {0}",item.Size); return item.Size; } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseTextItem.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseTextItem.cs index b9e0068025..242c524eed 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseTextItem.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseTextItem.cs @@ -18,6 +18,7 @@ using System; using System.Drawing; +using System.Windows; using ICSharpCode.Reporting.Globals; using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Interfaces.Export; @@ -33,6 +34,7 @@ namespace ICSharpCode.Reporting.Items Font Font {get;set;} string Text {get;set;} ContentAlignment ContentAlignment {get;set;} + TextAlignment TextAlignment {get;set;} string FormatString {get;set;} string DataType {get;set;} @@ -44,7 +46,8 @@ namespace ICSharpCode.Reporting.Items Name = "BaseTextItem"; Font = GlobalValues.DefaultFont; } - + + public Font Font {get;set;} @@ -52,8 +55,12 @@ namespace ICSharpCode.Reporting.Items public string FormatString {get;set;} + [Obsolete ("Use TextAlignment")] public ContentAlignment ContentAlignment {get;set;} + public TextAlignment TextAlignment {get;set;} + + string dataType; public string DataType @@ -83,6 +90,7 @@ namespace ICSharpCode.Reporting.Items ex.Text = Text; ex.FormatString = FormatString; ex.ContentAlignment = ContentAlignment; + ex.TextAlignment = TextAlignment; ex.DataType = DataType; ex.CanGrow = CanGrow; ex.DrawBorder = DrawBorder; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportText.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportText.cs index 2304ba1e4c..1b9d89c9f5 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportText.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportText.cs @@ -18,6 +18,7 @@ using System; using System.Drawing; +using System.Windows; using ICSharpCode.Reporting.Arrange; using ICSharpCode.Reporting.Exporter; using ICSharpCode.Reporting.Exporter.Visitors; @@ -34,6 +35,7 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns Font Font {get;set;} string Text {get;set;} ContentAlignment ContentAlignment {get;set;} + TextAlignment TextAlignment {get;set;} string DataType {get;set;} string FormatString {get;set;} } @@ -57,8 +59,11 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns public string FormatString {get;set;} + [Obsolete ("Use TextAlignment")] public ContentAlignment ContentAlignment {get;set;} + public TextAlignment TextAlignment {get;set;} + public string DataType {get;set;} public override ICSharpCode.Reporting.Arrange.IMeasurementStrategy MeasurementStrategy() diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/FixedDocumentCreator.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/FixedDocumentCreator.cs index aee385c9d8..13524e669d 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/FixedDocumentCreator.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/FixedDocumentCreator.cs @@ -40,7 +40,6 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor static class FixedDocumentCreator { - public static FixedPage CreateFixedPage(ExportPage exportPage) { var fixedPage = new FixedPage(); fixedPage.Width = exportPage.Size.ToWpf().Width; @@ -63,10 +62,8 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor public static FormattedText CreateFormattedText(ExportText exportText) { - FlowDirection flowDirection; - var culture = CultureInfo.CurrentCulture; - flowDirection = culture.TextInfo.IsRightToLeft ? FlowDirection.RightToLeft : FlowDirection.LeftToRight; + var flowDirection = culture.TextInfo.IsRightToLeft ? FlowDirection.RightToLeft : FlowDirection.LeftToRight; var emSize = ExtensionMethodes.ToPoints((int)exportText.Font.SizeInPoints +1); @@ -78,15 +75,16 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor new SolidColorBrush(exportText.ForeColor.ToWpf()), null, TextFormattingMode.Display); formattedText.MaxTextWidth = exportText.DesiredSize.Width ; + formattedText.TextAlignment = exportText.TextAlignment; -// formattedText.TextAlignment = TextAlignment.Justify; if (!exportText.CanGrow) { - formattedText.MaxTextHeight = exportText.Size.Height; - } else { + formattedText.MaxTextHeight = exportText.Size.Height; + } else { formattedText.MaxTextHeight = ExtensionMethodes.ToPoints(exportText.DesiredSize.Height ); - } + } + ApplyPrintStyles(formattedText,exportText); - + return formattedText; } @@ -153,6 +151,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor FixedPage.SetTop(element,exportColumn.Location.Y); } + /* public static Point CalculateAlignmentOffset (FormattedText formattedText, ExportText exportText) { var offset = new Point(0,0); double y = 0; @@ -206,7 +205,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor } return new Point(x,y); } - + */ public static Pen CreateWpfPen(IReportObject exportColumn){ if (exportColumn == null) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs index e843cc16e5..d1c3365b10 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs @@ -60,7 +60,8 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor Canvas RenderSectionContainer (ExportContainer container) { - + Console.WriteLine("--------------"); + Console.WriteLine("Container {0}",container.Name); var canvas = FixedDocumentCreator.CreateContainer(container); foreach (var element in container.ExportedItems) { if (IsContainer(element)) { @@ -120,11 +121,13 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor public override void Visit(ExportText exportColumn){ var formattedText = FixedDocumentCreator.CreateFormattedText((ExportText)exportColumn); + var location = new Point(exportColumn.Location.X,exportColumn.Location.Y); var visual = new DrawingVisual(); using (var drawingContext = visual.RenderOpen()){ if (ShouldSetBackcolor(exportColumn)) { + var r = new Rect(location,new Size(exportColumn.Size.Width,exportColumn.Size.Height)); drawingContext.DrawRectangle(FixedDocumentCreator.ConvertBrush(exportColumn.BackColor), null, new Rect(location,new Size(exportColumn.Size.Width,exportColumn.Size.Height))); @@ -132,12 +135,15 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor //http://stackoverflow.com/questions/4542717/length-of-string-that-will-fit-in-a-specific-width // http://stackoverflow.com/questions/9264398/how-to-calculate-wpf-textblock-width-for-its-known-font-size-and-characters - var offset = FixedDocumentCreator.CalculateAlignmentOffset(formattedText,exportColumn); - var newLoc = new Point(location.X + offset.X,location.Y + offset.Y); - - drawingContext.DrawText(formattedText,newLoc); +// var offset = FixedDocumentCreator.CalculateAlignmentOffset(formattedText,exportColumn); +// var newLoc = new Point(location.X + offset.X,location.Y + offset.Y); + +// Console.WriteLine(" FT for {0} at {1}",formattedText.Text.Substring(0,5),newLoc); +// drawingContext.DrawText(formattedText,newLoc); + drawingContext.DrawText(formattedText,location); } var dragingElement = new DrawingElement(visual); + UIElement = dragingElement; } From aededd6a35fd4ad2afcb98038c147fddceac2646 Mon Sep 17 00:00:00 2001 From: gumme Date: Mon, 23 Jun 2014 12:10:38 +0200 Subject: [PATCH 022/575] Moving controls several steps by holding down arrow keys is now working again. Removed canvas special handling in DesignPanel and instead letting each placement behavior handle its own special needs, and handling the Canvas issue by overriding GetPosition in CanvasPlacementSupport instead. Fixed SetPosition in CanvasPlacementSupport so Left/Top properties have priority over Right/Bottom, as this is the priority that the runtime uses. --- .../WpfDesign.Designer/Project/DesignPanel.cs | 41 +++++++++------- .../Extensions/CanvasPlacementSupport.cs | 48 ++++++++++++++----- 2 files changed, 60 insertions(+), 29 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs index 48fee4dbe8..85d3229f24 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs @@ -377,28 +377,35 @@ namespace ICSharpCode.WpfDesign.Designer placementOp = PlacementOperation.Start(Context.Services.Selection.SelectedItems, PlacementType.Move); } + switch (e.Key) { + case Key.Left: + dx += Keyboard.IsKeyDown(Key.LeftShift) ? -10 : -1; + break; + case Key.Up: + dy += Keyboard.IsKeyDown(Key.LeftShift) ? -10 : -1; + break; + case Key.Right: + dx += Keyboard.IsKeyDown(Key.LeftShift) ? 10 : 1; + break; + case Key.Down: + dy += Keyboard.IsKeyDown(Key.LeftShift) ? 10 : 1; + break; + } - dx = (e.Key == Key.Left) ? Keyboard.IsKeyDown(Key.LeftShift) ? -10 : -1 : 0; - dy = (e.Key == Key.Up) ? Keyboard.IsKeyDown(Key.LeftShift) ? -10 : -1 : 0; - dx = (e.Key == Key.Right) ? Keyboard.IsKeyDown(Key.LeftShift) ? 10 : 1 : (dx != 0 ? dx : 0); - dy = (e.Key == Key.Down) ? Keyboard.IsKeyDown(Key.LeftShift) ? 10 : 1 : (dy != 0 ? dy : 0); - double left, top; foreach (PlacementInformation info in placementOp.PlacedItems) { - //Let canvas position preceed bounds definition since there can be a discrepancy between them. - left = IsPropertySet(info.Item.View,Canvas.LeftProperty)?(double)info.Item.Properties.GetAttachedProperty(Canvas.LeftProperty).ValueOnInstance: info.OriginalBounds.Left; - - top = IsPropertySet(info.Item.View, Canvas.TopProperty) ? (double)info.Item.Properties.GetAttachedProperty(Canvas.TopProperty).ValueOnInstance : info.OriginalBounds.Top; + var bounds = info.OriginalBounds; + if (!Keyboard.IsKeyDown(Key.LeftCtrl)) { - info.Bounds = new Rect(left + dx, - top + dy, - info.OriginalBounds.Width, - info.OriginalBounds.Height); + info.Bounds = new Rect(bounds.Left + dx, + bounds.Top + dy, + bounds.Width, + bounds.Height); } else { - info.Bounds = new Rect(left, - top, - info.OriginalBounds.Width + dx, - info.OriginalBounds.Height + dy); + info.Bounds = new Rect(bounds.Left, + bounds.Top, + bounds.Width + dx, + bounds.Height + dy); } placementOp.CurrentContainerBehavior.SetPosition(info); } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/CanvasPlacementSupport.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/CanvasPlacementSupport.cs index 206796fda3..bc776c99ca 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/CanvasPlacementSupport.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/CanvasPlacementSupport.cs @@ -58,6 +58,32 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions extendedView = (FrameworkElement)this.ExtendedItem.View; } + public override Rect GetPosition(PlacementOperation operation, DesignItem item) + { + UIElement child = item.View; + + if (child == null) + return Rect.Empty; + + double x, y; + + if (IsPropertySet(child, Canvas.LeftProperty) || !IsPropertySet(child, Canvas.RightProperty)) { + x = GetCanvasProperty(child, Canvas.LeftProperty); + } else { + x = extendedComponent.ActualWidth - GetCanvasProperty(child, Canvas.RightProperty) - child.RenderSize.Width; + } + + + if (IsPropertySet(child, Canvas.TopProperty) || !IsPropertySet(child, Canvas.BottomProperty)) { + y = GetCanvasProperty(child, Canvas.TopProperty); + } else { + y = extendedComponent.ActualHeight - GetCanvasProperty(child, Canvas.BottomProperty) - child.RenderSize.Height; + } + + var p = new Point(x, y); + return new Rect(p, child.RenderSize); + } + public override void SetPosition(PlacementInformation info) { base.SetPosition(info); @@ -66,28 +92,26 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions UIElement child = info.Item.View; Rect newPosition = info.Bounds; - if (IsPropertySet(child, Canvas.RightProperty)) - { + if (IsPropertySet(child, Canvas.LeftProperty) || !IsPropertySet(child, Canvas.RightProperty)) { + if (newPosition.Left != GetCanvasProperty(child, Canvas.LeftProperty)) { + info.Item.Properties.GetAttachedProperty(Canvas.LeftProperty).SetValue(newPosition.Left); + } + } else { var newR = extendedComponent.ActualWidth - newPosition.Right; if (newR != GetCanvasProperty(child, Canvas.RightProperty)) info.Item.Properties.GetAttachedProperty(Canvas.RightProperty).SetValue(newR); } - else if (newPosition.Left != GetCanvasProperty(child, Canvas.LeftProperty)) - { - info.Item.Properties.GetAttachedProperty(Canvas.LeftProperty).SetValue(newPosition.Left); - } - if (IsPropertySet(child, Canvas.BottomProperty)) - { + if (IsPropertySet(child, Canvas.TopProperty) || !IsPropertySet(child, Canvas.BottomProperty)) { + if (newPosition.Top != GetCanvasProperty(child, Canvas.TopProperty)) { + info.Item.Properties.GetAttachedProperty(Canvas.TopProperty).SetValue(newPosition.Top); + } + } else { var newB = extendedComponent.ActualHeight - newPosition.Bottom; if (newB != GetCanvasProperty(child, Canvas.BottomProperty)) info.Item.Properties.GetAttachedProperty(Canvas.BottomProperty).SetValue(newB); } - else if (newPosition.Top != GetCanvasProperty(child, Canvas.TopProperty)) - { - info.Item.Properties.GetAttachedProperty(Canvas.TopProperty).SetValue(newPosition.Top); - } if (info.Item == Services.Selection.PrimarySelection) { From 82e98ec949bc57b01c5fe1468285077298bea587 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Mon, 23 Jun 2014 21:29:49 +0100 Subject: [PATCH 023/575] Support custom NuGet package directory. NuGet allows a solution to override the standard packages directory with a repositoryPath setting in the NuGet.config file at the solution level in the .nuget directory. This is now supported by SharpDevelop. --- .../Project/Src/Design/FakeSettings.cs | 17 ++++++++++++- .../Project/Src/PackageManagementOptions.cs | 5 ++++ .../Src/RegisteredPackageSourceSettings.cs | 4 ++++ .../Src/SharpDevelopPackageManagerFactory.cs | 2 +- .../Src/SolutionPackageRepositoryPath.cs | 15 +++++++----- .../Src/SolutionPackageRepositoryPathTests.cs | 24 ++++++++++++++++++- 6 files changed, 58 insertions(+), 9 deletions(-) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs index bc37ce523f..0c1980b65c 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs @@ -18,6 +18,8 @@ using System; using System.Collections.Generic; +using System.Linq; + using NuGet; namespace ICSharpCode.PackageManagement.Design @@ -36,6 +38,8 @@ namespace ICSharpCode.PackageManagement.Design public Dictionary>> Sections = new Dictionary>>(); + public const string ConfigSectionName = "config"; + public FakeSettings() { Sections.Add(RegisteredPackageSourceSettings.PackageSourcesSectionName, PackageSources); @@ -200,7 +204,11 @@ namespace ICSharpCode.PackageManagement.Design public string GetValue(string section, string key, bool isPath) { - throw new NotImplementedException(); + if (Sections.ContainsKey(section)) { + var matchedSection = Sections[section]; + return matchedSection.FirstOrDefault(item => item.Key == key).Value; + } + return null; } public IList> GetValues(string section, bool isPath) @@ -212,5 +220,12 @@ namespace ICSharpCode.PackageManagement.Design { throw new NotImplementedException(); } + + public void SetRepositoryPathSetting(string fullPath) + { + var items = new List> (); + items.Add (new KeyValuePair("repositoryPath", fullPath)); + Sections.Add(ConfigSectionName, items); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs index 655d9be0d1..4ae99a301d 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs @@ -95,5 +95,10 @@ namespace ICSharpCode.PackageManagement { properties.SetList(RecentPackagesPropertyName, recentPackages); } + + public string GetCustomPackagesDirectory() + { + return registeredPackageSourceSettings.Settings.GetRepositoryPath(); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs b/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs index 2a6aae2c30..829c1bef8d 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs @@ -204,5 +204,9 @@ namespace ICSharpCode.PackageManagement packageSources = null; } } + + public ISettings Settings { + get { return settings; } + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManagerFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManagerFactory.cs index dc79c7c396..92d31f3a12 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManagerFactory.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManagerFactory.cs @@ -32,7 +32,7 @@ namespace ICSharpCode.PackageManagement : this( new SharpDevelopPackageRepositoryFactory(), new SharpDevelopProjectSystemFactory(), - new PackageManagementOptions()) + PackageManagementServices.Options) { } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SolutionPackageRepositoryPath.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SolutionPackageRepositoryPath.cs index 9be3cb7e0b..b188e91669 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/SolutionPackageRepositoryPath.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/SolutionPackageRepositoryPath.cs @@ -25,12 +25,11 @@ namespace ICSharpCode.PackageManagement { public class SolutionPackageRepositoryPath { - string packagesRelativeDirectory; ISolution solution; DefaultPackagePathResolver pathResolver; public SolutionPackageRepositoryPath(IProject project) - : this(project, new PackageManagementOptions()) + : this(project, PackageManagementServices.Options) { } @@ -41,14 +40,18 @@ namespace ICSharpCode.PackageManagement public SolutionPackageRepositoryPath(ISolution solution, PackageManagementOptions options) { - packagesRelativeDirectory = options.PackagesDirectory; this.solution = solution; - GetSolutionPackageRepositoryPath(); + PackageRepositoryPath = GetSolutionPackageRepositoryPath(options); } - void GetSolutionPackageRepositoryPath() + string GetSolutionPackageRepositoryPath(PackageManagementOptions options) { - PackageRepositoryPath = Path.Combine(solution.Directory, packagesRelativeDirectory); + string customPath = options.GetCustomPackagesDirectory (); + if (!String.IsNullOrEmpty (customPath)) { + return customPath; + } + + return Path.Combine (solution.Directory, options.PackagesDirectory); } public string PackageRepositoryPath { get; private set; } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/SolutionPackageRepositoryPathTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/SolutionPackageRepositoryPathTests.cs index 6623b8e461..5e55e9cef6 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/SolutionPackageRepositoryPathTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/SolutionPackageRepositoryPathTests.cs @@ -32,8 +32,9 @@ namespace PackageManagement.Tests { SolutionPackageRepositoryPath repositoryPath; IProject testProject; - PackageManagementOptions options; + TestablePackageManagementOptions options; ISolution solution; + FakeSettings settings; void CreateSolutionPackageRepositoryPath() { @@ -61,6 +62,12 @@ namespace PackageManagement.Tests void CreateOptions() { options = new TestablePackageManagementOptions(); + settings = options.FakeSettings; + } + + void SolutionNuGetConfigFileHasCustomPackagesPath(string fullPath) + { + settings.SetRepositoryPathSetting(fullPath); } [Test] @@ -109,5 +116,20 @@ namespace PackageManagement.Tests Assert.AreEqual(expectedInstallPath, installPath); } + + [Test] + public void PackageRepositoryPath_SolutionHasNuGetFileThatOverridesDefaultPackagesRepositoryPath_OverriddenPathReturned() + { + CreateOptions(); + CreateSolution(@"d:\projects\MySolution\MySolution.sln"); + options.PackagesDirectory = "Packages"; + SolutionNuGetConfigFileHasCustomPackagesPath(@"d:\Team\MyPackages"); + CreateSolutionPackageRepositoryPath(solution); + string expectedPath = @"d:\Team\MyPackages"; + + string path = repositoryPath.PackageRepositoryPath; + + Assert.AreEqual(expectedPath, path); + } } } From 577eb9c329ccc5bdb6793192f43a434afc8268dc Mon Sep 17 00:00:00 2001 From: gumme Date: Tue, 24 Jun 2014 12:05:08 +0200 Subject: [PATCH 024/575] A StaticResource that references a resource on the same element is now printed in element style. --- .../Tests/Designer/ModelTests.cs | 28 ++++++++ .../Project/MarkupExtensionPrinter.cs | 69 +++++++++++-------- 2 files changed, 67 insertions(+), 30 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs index 84bcd70377..1419521e82 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs @@ -639,6 +639,34 @@ namespace ICSharpCode.WpfDesign.Tests.Designer AddBindingWithStaticResourceWhereResourceOnSameElement(true); } + [Test] + public void AddStaticResourceWhereResourceOnSameElement() + { + DesignItem button = CreateCanvasContext(""; + + AssertCanvasDesignerOutput(expectedXaml, button.Context); + AssertLog(""); + } + [Test] public void AddBrushAsResource() { diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs index d7b1b1949e..dd23b6eef2 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs @@ -38,36 +38,7 @@ namespace ICSharpCode.WpfDesign.XamlDom return false; } - foreach (var property in obj.Properties.Where((prop) => prop.IsSet)) - { - var value = property.PropertyValue; - if (value is XamlTextValue) - continue; - else - { - XamlObject xamlObject = value as XamlObject; - if (xamlObject == null || !xamlObject.IsMarkupExtension) - return false; - else { - var staticResource = xamlObject.Instance as System.Windows.StaticResourceExtension; - if (staticResource != null && - staticResource.ResourceKey != null) { - XamlObject parent = GetNonMarkupExtensionParent(xamlObject); - - if (parent != null) { - var parentLocalResource = parent.ServiceProvider.Resolver.FindLocalResource(staticResource.ResourceKey); - - // If resource with the specified key is declared locally on the same object as the StaticResource is being used the markup extension - // must be printed as element to find the resource, otherwise it will search from parent-parent and find none or another resource. - if (parentLocalResource != null) - return false; - } - } - } - } - } - - return true; + return CanPrint(obj, false, GetNonMarkupExtensionParent(obj)); } /// @@ -115,6 +86,28 @@ namespace ICSharpCode.WpfDesign.XamlDom return sb.ToString(); } + private static bool CanPrint(XamlObject obj, bool isNested, XamlObject nonMarkupExtensionParent) + { + if ((isNested || obj.ParentObject == nonMarkupExtensionParent) && IsStaticResourceThatReferencesLocalResource(obj, nonMarkupExtensionParent)) { + return false; + } + + foreach (var property in obj.Properties.Where((prop) => prop.IsSet)) { + var value = property.PropertyValue; + if (value is XamlTextValue) + continue; + else { + var xamlObject = value as XamlObject; + if (xamlObject == null || !xamlObject.IsMarkupExtension) + return false; + else + return CanPrint(xamlObject, true, nonMarkupExtensionParent); + } + } + + return true; + } + private static XamlObject GetNonMarkupExtensionParent(XamlObject markupExtensionObject) { System.Diagnostics.Debug.Assert(markupExtensionObject.IsMarkupExtension); @@ -125,5 +118,21 @@ namespace ICSharpCode.WpfDesign.XamlDom } return obj; } + + private static bool IsStaticResourceThatReferencesLocalResource(XamlObject obj, XamlObject nonMarkupExtensionParent) + { + var staticResource = obj.Instance as System.Windows.StaticResourceExtension; + if (staticResource != null && staticResource.ResourceKey != null && nonMarkupExtensionParent != null) { + + var parentLocalResource = nonMarkupExtensionParent.ServiceProvider.Resolver.FindLocalResource(staticResource.ResourceKey); + + // If resource with the specified key is declared locally on the same object as the StaticResource is being used the markup extension + // must be printed as element to find the resource, otherwise it will search from parent-parent and find none or another resource. + if (parentLocalResource != null) + return true; + } + + return false; + } } } From 10177584452aa4fe0c69cb8275f6c6d70d8181ea Mon Sep 17 00:00:00 2001 From: Ciprian Khlud Date: Tue, 24 Jun 2014 14:35:07 +0300 Subject: [PATCH 025/575] Make case search insensitive. --- .../Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs index 7cd6010d48..1e7ac464a9 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs @@ -92,10 +92,10 @@ namespace ICSharpCode.SharpDevelop.Gui return true; foreach(var token in tokens) { - if(bigText.Contains(token)) - return true; + if(bigText.IndexOf(token, StringComparison.OrdinalIgnoreCase)<0) + return false; } - return false; + return true; } void Search() From 5ede713dd0a4ae2c33b3a96aaa336a964839d2a6 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Tue, 24 Jun 2014 19:50:24 +0200 Subject: [PATCH 026/575] Textalignment Justify in Pdf --- .../Src/Exporter/Visitors/DebugVisitor.cs | 2 -- .../Src/Globals/MeasurementService.cs | 1 - .../ICSharpCode.Reporting/Src/Pdf/PdfHelper.cs | 17 ++++++++++++++++- .../Src/Wpf/Visitor/WpfVisitor.cs | 11 ----------- .../Src/Xml/ModelLoader.cs | 2 -- .../Src/Xml/MycroParser.cs | 4 ++-- 6 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/DebugVisitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/DebugVisitor.cs index 6c6bc2620e..6ecd359096 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/DebugVisitor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/DebugVisitor.cs @@ -48,8 +48,6 @@ namespace ICSharpCode.Reporting.Exporter.Visitors public override void Visit(ExportLine exportGraphics) { -// base.Visit(exportGraphics); - Console.WriteLine("Line from {0} size {1}",exportGraphics.Location,exportGraphics.Size.Width); } } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/MeasurementService.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/MeasurementService.cs index 133dfeeadd..6b5f61572a 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/MeasurementService.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/MeasurementService.cs @@ -45,7 +45,6 @@ namespace ICSharpCode.Reporting.Globals } return new Size(item.Size.Width,(int)Math.Ceiling(sizeF.Height)); } - Console.WriteLine ("measure {0}",item.Size); return item.Size; } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfHelper.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfHelper.cs index 9bf54f516b..16671cdc1a 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfHelper.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfHelper.cs @@ -35,6 +35,7 @@ namespace ICSharpCode.Reporting.Pdf { var font = PdfHelper.CreatePdfFont(exportColumn); var rect = new Rectangle(columnLocation,exportColumn.DesiredSize).ToXRect(); + textFormatter.Alignment = XParagraphAlignment(exportColumn); textFormatter.DrawString(exportColumn.Text, font, CreateBrush(exportColumn.ForeColor), @@ -90,7 +91,21 @@ namespace ICSharpCode.Reporting.Pdf public static XLineCap LineCap (IExportGraphics column) { return XLineCap.Round; - + } + + + public static XParagraphAlignment XParagraphAlignment (ExportText exportColumn) { + switch (exportColumn.TextAlignment) { + case System.Windows.TextAlignment.Left: + return PdfSharp.Drawing.Layout.XParagraphAlignment.Left; + case System.Windows.TextAlignment.Center: + return PdfSharp.Drawing.Layout.XParagraphAlignment.Center; + case System.Windows.TextAlignment.Right: + return PdfSharp.Drawing.Layout.XParagraphAlignment.Center; + case System.Windows.TextAlignment.Justify: + return PdfSharp.Drawing.Layout.XParagraphAlignment.Justify; + } + return PdfSharp.Drawing.Layout.XParagraphAlignment.Left; } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs index d1c3365b10..fda2a0ee08 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs @@ -60,8 +60,6 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor Canvas RenderSectionContainer (ExportContainer container) { - Console.WriteLine("--------------"); - Console.WriteLine("Container {0}",container.Name); var canvas = FixedDocumentCreator.CreateContainer(container); foreach (var element in container.ExportedItems) { if (IsContainer(element)) { @@ -132,18 +130,9 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor null, new Rect(location,new Size(exportColumn.Size.Width,exportColumn.Size.Height))); } -//http://stackoverflow.com/questions/4542717/length-of-string-that-will-fit-in-a-specific-width -// http://stackoverflow.com/questions/9264398/how-to-calculate-wpf-textblock-width-for-its-known-font-size-and-characters - -// var offset = FixedDocumentCreator.CalculateAlignmentOffset(formattedText,exportColumn); -// var newLoc = new Point(location.X + offset.X,location.Y + offset.Y); - -// Console.WriteLine(" FT for {0} at {1}",formattedText.Text.Substring(0,5),newLoc); -// drawingContext.DrawText(formattedText,newLoc); drawingContext.DrawText(formattedText,location); } var dragingElement = new DrawingElement(visual); - UIElement = dragingElement; } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/ModelLoader.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/ModelLoader.cs index 43dbac7575..7eab27cca7 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/ModelLoader.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/ModelLoader.cs @@ -27,8 +27,6 @@ namespace ICSharpCode.Reporting.Xml public class ModelLoader: MycroParser { public ModelLoader() { - Console.WriteLine("ICSharpCode.Reporting.Xml.ModelLoader"); - Console.WriteLine(); } protected override Type GetTypeByName(string ns, string name) { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs index 521f46f15a..b19606a5a8 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs @@ -44,9 +44,9 @@ namespace ICSharpCode.Reporting.Xml public abstract class MycroParser { public MycroParser() { - Console.WriteLine("Mycroparser"); - Console.WriteLine(); } + + public object Load(XmlElement element) { return ProcessNode(element, null); From b2bdd81f35a30f3edc745fa0fbd771429ecccd06 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Tue, 24 Jun 2014 20:25:08 +0200 Subject: [PATCH 027/575] FxCop Cleanup --- .../src/DesignerBinding/InternalReportLoader.cs | 5 +++-- .../src/Factory/CreateFormSheetFromModel.cs | 3 +-- .../src/Services/HelpService.cs | 2 +- .../src/Services/ToolboxService.cs | 2 +- .../Src/Exporter/Visitors/AbstractVisitor.cs | 4 ++-- .../Src/Expressions/ExpressionRunner.cs | 9 ++------- .../ICSharpCode.Reporting/Src/Globals/TypeHelper.cs | 4 ++-- .../ICSharpCode.Reporting/Src/Pdf/PdfExporter.cs | 3 +-- .../ICSharpCode.Reporting/Src/ReportingFactory.cs | 2 +- .../ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs | 6 +++--- .../ICSharpCode.Reporting/Src/Xml/MycroParser.cs | 2 +- 11 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/InternalReportLoader.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/InternalReportLoader.cs index ec947b3737..88471d1ca0 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/InternalReportLoader.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/InternalReportLoader.cs @@ -19,6 +19,7 @@ using System; using System.ComponentModel; using System.ComponentModel.Design.Serialization; +using System.Globalization; using System.IO; using System.Windows.Forms; @@ -72,9 +73,9 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding { string message; if (generator.ViewContent.PrimaryFile.IsDirty) { - message = String.Format("Create Report <{0}> ...",Path.GetFileName(this.generator.ViewContent.PrimaryFile.FileName)); + message = String.Format(CultureInfo.CurrentCulture,"Create Report <{0}> ...",Path.GetFileName(generator.ViewContent.PrimaryFile.FileName)); } else { - message = String.Format("Load Report <{0}> ...",Path.GetFileName(this.generator.ViewContent.PrimaryFile.FileName)); + message = String.Format(CultureInfo.CurrentCulture,"Load Report <{0}> ...",Path.GetFileName(generator.ViewContent.PrimaryFile.FileName)); } SD.StatusBar.SetMessage(message); } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Factory/CreateFormSheetFromModel.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Factory/CreateFormSheetFromModel.cs index 7756fe69e4..7243c96c6a 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Factory/CreateFormSheetFromModel.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Factory/CreateFormSheetFromModel.cs @@ -22,7 +22,6 @@ namespace ICSharpCode.Reporting.Addin.Factory class CreateFormSheetFromModel { - public StringWriter ToXml(IReportModel reportModel) { int locY = reportModel.ReportSettings.TopMargin; @@ -39,7 +38,7 @@ namespace ICSharpCode.Reporting.Addin.Factory return xml; } - StringWriter ToXmlInternal(IReportModel model) + static StringWriter ToXmlInternal(IReportModel model) { var writer = new StringWriterWithEncoding(System.Text.Encoding.UTF8); var xml = XmlHelper.CreatePropperWriter(writer); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Services/HelpService.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Services/HelpService.cs index 35347f533b..d83aa841ef 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Services/HelpService.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Services/HelpService.cs @@ -64,7 +64,7 @@ namespace ICSharpCode.Reporting.Addin.Services { ShowHelpFromKeyword(generalKeyword); } - public void ShowHelp() + static public void ShowHelp() { // HelpProvider.ShowHelp(f1Keyword); } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Services/ToolboxService.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Services/ToolboxService.cs index ed2cf5dc54..f8313da331 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Services/ToolboxService.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Services/ToolboxService.cs @@ -188,7 +188,7 @@ namespace ICSharpCode.Reporting.Addin.Services // needed for Toolbox drag & drop if (serializedObject is System.Windows.Forms.IDataObject) { if (((System.Windows.Forms.IDataObject)serializedObject).GetDataPresent(typeof(ToolboxItem))) { - ToolboxItem item = (ToolboxItem) ((System.Windows.Forms.IDataObject)serializedObject).GetData(typeof(ToolboxItem)); + var item = (ToolboxItem) ((System.Windows.Forms.IDataObject)serializedObject).GetData(typeof(ToolboxItem)); // if (host != null) { // ArrayList list = (ArrayList)toolboxByHost[host]; // if (list != null && list.Contains(item)) { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/AbstractVisitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/AbstractVisitor.cs index c9f0e1c603..ef250c1da7 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/AbstractVisitor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/AbstractVisitor.cs @@ -85,12 +85,12 @@ namespace ICSharpCode.Reporting.Exporter.Visitors protected Collection Pages {get; private set;} - protected bool IsContainer (IExportColumn column) { + static protected bool IsContainer (IExportColumn column) { return (column is ExportContainer)|| (column is GraphicsContainer); } - protected bool IsGraphicsContainer (IExportColumn column) { + static protected bool IsGraphicsContainer (IExportColumn column) { return column is GraphicsContainer; } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionRunner.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionRunner.cs index 3f41d86d62..6d1c637aed 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionRunner.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionRunner.cs @@ -34,21 +34,16 @@ namespace ICSharpCode.Reporting.Expressions // http://blog.miraclespain.com/archive/2009/Oct-07.html // readonly Collection pages; - readonly ReportSettings reportSettings; readonly CollectionDataSource dataSource; - public ExpressionRunner(Collection pages,ReportSettings reportSettings,CollectionDataSource dataSource) - { + public ExpressionRunner(Collection pages,ReportSettings reportSettings,CollectionDataSource dataSource){ this.pages = pages; this.dataSource = dataSource; - this.reportSettings = reportSettings; Visitor = new ExpressionVisitor(reportSettings); } - public void Run() - { -// Visitor = new ExpressionVisitor (reportSettings); + public void Run(){ if (dataSource != null) { if (dataSource.SortedList != null) { Visitor.SetCurrentDataSource(dataSource.SortedList); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs index 644ffab2aa..5e0431f766 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs @@ -18,6 +18,7 @@ using System; using System.Data; +using System.Globalization; namespace ICSharpCode.Reporting.Globals { @@ -28,8 +29,7 @@ namespace ICSharpCode.Reporting.Globals { public static DbType DbTypeFromStringRepresenation(string type) { - switch (type.ToLower()) - { + switch (type.ToLower(CultureInfo.CurrentCulture)){ case "int": return DbType.Int16; case "int16": diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfExporter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfExporter.cs index 73ae9df3d6..1ee1b452f5 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfExporter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfExporter.cs @@ -40,9 +40,8 @@ namespace ICSharpCode.Reporting.Pdf public void Run (string fileName,bool show) { - string file; if (String.IsNullOrEmpty(fileName)) { - file = Pages[0].PageInfo.ReportName + ".pdf"; + fileName = Pages[0].PageInfo.ReportName + ".pdf"; } pdfDocument = new PdfDocument(); ConvertPagesToPdf(); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs index 9d72438667..24f591ceb0 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs @@ -53,7 +53,7 @@ namespace ICSharpCode.Reporting } - public IReportCreator ReportCreator (ReportModel reportModel) { + public IReportCreator ReportCreator (IReportModel reportModel) { ReportModel = reportModel; var builder = new FormPageBuilder(ReportModel); return builder; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs index fda2a0ee08..5d5c2935ff 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs @@ -183,7 +183,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor } - DrawingElement CircleVisual(GraphicsContainer circle){ + static DrawingElement CircleVisual(GraphicsContainer circle){ var pen = FixedDocumentCreator.CreateWpfPen(circle); var rad = CalcRadius(circle.Size); @@ -199,7 +199,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor } - Border CreateBorder(IExportColumn exportColumn) + static Border CreateBorder(IExportColumn exportColumn) { var border = new Border(); border.BorderThickness = Thickness(exportColumn); @@ -211,7 +211,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor } - Thickness Thickness(IExportColumn exportColumn) + static Thickness Thickness(IExportColumn exportColumn) { double bT; bT = !IsGraphicsContainer(exportColumn) ? 1 : Convert.ToDouble(((GraphicsContainer)exportColumn).Thickness); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs index b19606a5a8..5a3e5946ee 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs @@ -196,7 +196,7 @@ namespace ICSharpCode.Reporting.Xml } } - void ProcessAttributes(XmlNode node, object ret, Type type) + static void ProcessAttributes(XmlNode node, object ret, Type type) { // process attributes foreach(XmlAttribute attr in node.Attributes) From f06d1aa36e8217a15460f8576d858bdd4f0aa534 Mon Sep 17 00:00:00 2001 From: Christoph Wille Date: Tue, 24 Jun 2014 20:49:08 +0200 Subject: [PATCH 028/575] B5 designation --- src/Main/GlobalAssemblyInfo.cs.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Main/GlobalAssemblyInfo.cs.template b/src/Main/GlobalAssemblyInfo.cs.template index 24cb65ee69..abf126b695 100644 --- a/src/Main/GlobalAssemblyInfo.cs.template +++ b/src/Main/GlobalAssemblyInfo.cs.template @@ -46,7 +46,7 @@ internal static class RevisionClass public const string Minor = "0"; public const string Build = "0"; public const string Revision = "$INSERTREVISION$"; - public const string VersionName = "Beta 4"; // "" is not valid for no version name, you have to use null if you don't want a version name (eg "Beta 1") + public const string VersionName = "Beta 5"; // "" is not valid for no version name, you have to use null if you don't want a version name (eg "Beta 1") public const string FullVersion = Major + "." + Minor + "." + Build + ".$INSERTREVISION$$INSERTBRANCHPOSTFIX$$INSERTVERSIONNAMEPOSTFIX$"; } From 06662458287326e10be89ca2bc93ddcfa4e50329 Mon Sep 17 00:00:00 2001 From: dr-BEat Date: Tue, 24 Jun 2014 23:15:42 +0200 Subject: [PATCH 029/575] Correctly handle ServiceCreatorCallback in GetFutureService --- src/Main/Base/Project/Util/SharpDevelopServiceContainer.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Main/Base/Project/Util/SharpDevelopServiceContainer.cs b/src/Main/Base/Project/Util/SharpDevelopServiceContainer.cs index cb85ac4348..af97190bf2 100644 --- a/src/Main/Base/Project/Util/SharpDevelopServiceContainer.cs +++ b/src/Main/Base/Project/Util/SharpDevelopServiceContainer.cs @@ -161,9 +161,8 @@ namespace ICSharpCode.SharpDevelop { Type serviceType = typeof(T); lock (services) { - object instance; - if (services.TryGetValue(serviceType, out instance)) { - return Task.FromResult((T)instance); + if (services.ContainsKey(serviceType)) { + return Task.FromResult((T)GetService(serviceType)); } else { object taskCompletionSource; if (taskCompletionSources.TryGetValue(serviceType, out taskCompletionSource)) { From d0188867814f05163365774263ab12f034b20877 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Tue, 24 Jun 2014 01:48:47 +0200 Subject: [PATCH 030/575] Fixed #357: Ctrl+R: Does not rename ctors of types --- .../Project/Src/Parser/CSharpSymbolSearch.cs | 145 +++++++++++------- .../Editor/Commands/FindReferencesCommand.cs | 4 + 2 files changed, 94 insertions(+), 55 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs index afcd34aff9..435d0a8747 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs @@ -24,6 +24,7 @@ using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; +using ICSharpCode.NRefactory.Analysis; using CSharpBinding.Parser; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Highlighting; @@ -56,22 +57,44 @@ namespace CSharpBinding FindReferences fr = new FindReferences(); IList searchScopes; IList[] interestingFileNames; + Dictionary> searchScopesPerFile; int workAmount; double workAmountInverse; public CSharpSymbolSearch(IProject project, ISymbol entity) { this.project = project; - searchScopes = fr.GetSearchScopes(entity); compilation = SD.ParserService.GetCompilation(project); + var relatedSymbols = GetRelatedSymbols(entity); + if ((relatedSymbols != null) && relatedSymbols.Any()) { + searchScopes = relatedSymbols.SelectMany(e => fr.GetSearchScopes(e)).ToList(); + } else { + searchScopes = fr.GetSearchScopes(entity); + } + + searchScopesPerFile = new Dictionary>(); interestingFileNames = new IList[searchScopes.Count]; for (int i = 0; i < searchScopes.Count; i++) { - interestingFileNames[i] = fr.GetInterestingFiles(searchScopes[i], compilation).Select(f => f.FileName).ToList(); - workAmount += interestingFileNames[i].Count; + var thisSearchScope = searchScopes[i]; + var interestingFiles = fr.GetInterestingFiles(thisSearchScope, compilation).Select(f => f.FileName).ToList(); + foreach (var file in interestingFiles) { + if (!searchScopesPerFile.ContainsKey(file)) + searchScopesPerFile[file] = new List(); + searchScopesPerFile[file].Add(thisSearchScope); + } + interestingFileNames[i] = interestingFiles.ToList(); + workAmount += interestingFiles.Count; } workAmountInverse = 1.0 / workAmount; } + IEnumerable GetRelatedSymbols(ISymbol entity) + { + TypeGraph typeGraph = new TypeGraph(new [] { compilation.MainAssembly }); + var symbolCollector = new SymbolCollector(); + return symbolCollector.GetRelatedSymbols(typeGraph, entity); + } + public double WorkAmount { get { return workAmount; } } @@ -83,40 +106,38 @@ namespace CSharpBinding var cancellationToken = args.ProgressMonitor.CancellationToken; return Task.Run( () => { - for (int i = 0; i < searchScopes.Count; i++) { - IFindReferenceSearchScope searchScope = searchScopes[i]; - object progressLock = new object(); - Parallel.ForEach( - interestingFileNames[i], - new ParallelOptions { - MaxDegreeOfParallelism = Environment.ProcessorCount, - CancellationToken = cancellationToken - }, - delegate (string fileName) { - try { - FindReferencesInFile(args, searchScope, FileName.Create(fileName), callback, cancellationToken); - } catch (OperationCanceledException) { - throw; - } catch (Exception ex) { - throw new ApplicationException("Error searching in file '" + fileName + "'", ex); - } - lock (progressLock) - args.ProgressMonitor.Progress += workAmountInverse; - }); - } + object progressLock = new object(); + Parallel.ForEach( + searchScopesPerFile.Keys, + new ParallelOptions { + MaxDegreeOfParallelism = Environment.ProcessorCount, + CancellationToken = cancellationToken + }, + delegate (string fileName) { + try { + FindReferencesInFile(args, searchScopesPerFile[fileName], FileName.Create(fileName), callback, cancellationToken); + } catch (OperationCanceledException) { + throw; + } catch (Exception ex) { + throw new ApplicationException("Error searching in file '" + fileName + "'", ex); + } + lock (progressLock) + args.ProgressMonitor.Progress += workAmountInverse; + }); }, cancellationToken ); } - void FindReferencesInFile(SymbolSearchArgs args, IFindReferenceSearchScope searchScope, FileName fileName, Action callback, CancellationToken cancellationToken) + void FindReferencesInFile(SymbolSearchArgs args, IList searchScopeList, FileName fileName, Action callback, CancellationToken cancellationToken) { ITextSource textSource = args.ParseableFileContentFinder.Create(fileName); if (textSource == null) return; - if (searchScope.SearchTerm != null) { - if (textSource.IndexOf(searchScope.SearchTerm, 0, textSource.TextLength, StringComparison.Ordinal) < 0) - return; - } + // TODO Reactivate somehow! +// if (searchScope.SearchTerm != null) { +// if (textSource.IndexOf(searchScope.SearchTerm, 0, textSource.TextLength, StringComparison.Ordinal) < 0) +// return; +// } var parseInfo = SD.ParserService.Parse(fileName, textSource) as CSharpFullParseInformation; if (parseInfo == null) @@ -134,7 +155,7 @@ namespace CSharpBinding } fr.FindReferencesInFile( - searchScope, unresolvedFile, parseInfo.SyntaxTree, compilation, + searchScopeList, unresolvedFile, parseInfo.SyntaxTree, compilation, delegate (AstNode node, ResolveResult result) { if (document == null) { document = new ReadOnlyDocument(textSource, fileName); @@ -154,8 +175,18 @@ namespace CSharpBinding if (highlighter != null) { highlighter.Dispose(); } - if (results.Count > 0) - callback(new SearchedFile(fileName, results)); + if (results.Count > 0) { + // Remove overlapping results + List fixedResults = new List(); + int lastEndOffset = 0; + foreach (var result in results.OrderBy(m => m.StartOffset)) { + if (result.StartOffset >= lastEndOffset) { + fixedResults.Add(result); + lastEndOffset = result.EndOffset; + } + } + callback(new SearchedFile(fileName, fixedResults)); + } } public Task RenameAsync(SymbolRenameArgs args, Action callback, Action errorCallback) @@ -166,34 +197,32 @@ namespace CSharpBinding return Task.Run( () => { bool isNameValid = Mono.CSharp.Tokenizer.IsValidIdentifier(args.NewName); - for (int i = 0; i < searchScopes.Count; i++) { - IFindReferenceSearchScope searchScope = searchScopes[i]; - object progressLock = new object(); - Parallel.ForEach( - interestingFileNames[i], - new ParallelOptions { - MaxDegreeOfParallelism = Environment.ProcessorCount, - CancellationToken = cancellationToken - }, - delegate (string fileName) { - RenameReferencesInFile(args, searchScope, FileName.Create(fileName), callback, errorCallback, isNameValid, cancellationToken); - lock (progressLock) - args.ProgressMonitor.Progress += workAmountInverse; - }); - } + object progressLock = new object(); + Parallel.ForEach( + searchScopesPerFile.Keys, + new ParallelOptions { + MaxDegreeOfParallelism = Environment.ProcessorCount, + CancellationToken = cancellationToken + }, + delegate (string fileName) { + RenameReferencesInFile(args, searchScopesPerFile[fileName], FileName.Create(fileName), callback, errorCallback, isNameValid, cancellationToken); + lock (progressLock) + args.ProgressMonitor.Progress += workAmountInverse; + }); }, cancellationToken ); } - void RenameReferencesInFile(SymbolRenameArgs args, IFindReferenceSearchScope searchScope, FileName fileName, Action callback, Action errorCallback, bool isNameValid, CancellationToken cancellationToken) + void RenameReferencesInFile(SymbolRenameArgs args, IList searchScopeList, FileName fileName, Action callback, Action errorCallback, bool isNameValid, CancellationToken cancellationToken) { ITextSource textSource = args.ParseableFileContentFinder.Create(fileName); if (textSource == null) return; - if (searchScope.SearchTerm != null) { - if (textSource.IndexOf(searchScope.SearchTerm, 0, textSource.TextLength, StringComparison.Ordinal) < 0) - return; - } + // TODO Reactivate somehow! +// if (searchScope.SearchTerm != null) { +// if (textSource.IndexOf(searchScope.SearchTerm, 0, textSource.TextLength, StringComparison.Ordinal) < 0) +// return; +// } var parseInfo = SD.ParserService.Parse(fileName, textSource) as CSharpFullParseInformation; if (parseInfo == null) @@ -213,7 +242,7 @@ namespace CSharpBinding CSharpAstResolver resolver = new CSharpAstResolver(compilation, parseInfo.SyntaxTree, unresolvedFile); fr.RenameReferencesInFile( - new[] { searchScope }, args.NewName, resolver, + searchScopeList, args.NewName, resolver, delegate (RenameCallbackArguments callbackArgs) { var node = callbackArgs.NodeToReplace; string newCode = callbackArgs.NewNode.ToString(); @@ -249,10 +278,16 @@ namespace CSharpBinding } IDocument changedDocument = new TextDocument(document); var oldVersion = changedDocument.Version; + List fixedResults = new List(); + int lastStartOffset = changedDocument.TextLength + 1; foreach (var result in results.OrderByDescending(m => m.StartOffset)) { - changedDocument.Replace(result.StartOffset, result.Length, result.NewCode); + if (result.EndOffset <= lastStartOffset) { + changedDocument.Replace(result.StartOffset, result.Length, result.NewCode); + fixedResults.Add(result); + lastStartOffset = result.StartOffset; + } } - callback(new PatchedFile(fileName, results, oldVersion, changedDocument.Version)); + callback(new PatchedFile(fileName, fixedResults, oldVersion, changedDocument.Version)); } } } diff --git a/src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs b/src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs index 16c0a301ce..f69b37c176 100644 --- a/src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs +++ b/src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs @@ -53,6 +53,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands public override void Run(ResolveResult symbol) { var entity = GetSymbol(symbol); + if ((entity is IMember) && ((entity.SymbolKind == SymbolKind.Constructor) || (entity.SymbolKind == SymbolKind.Destructor))) { + // Don't rename constructors/destructors, rename their declaring type instead + entity = ((IMember) entity).DeclaringType.GetDefinition(); + } if (entity != null) { var project = GetProjectFromSymbol(entity); if (project != null) { From f10a4616834d20166457507b527eab29fe689a68 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Wed, 25 Jun 2014 20:12:59 +0200 Subject: [PATCH 031/575] Cleanup - FxCop --- .../src/DesignableItems/BaseLineItem.cs | 16 +-------------- .../src/DesignableItems/BaseRectangleItem.cs | 20 +++++++++---------- .../src/Services/HelpService.cs | 16 +++++++-------- .../TypeProvider/AbstractItemTypeProvider.cs | 6 +++--- .../Src/Globals/GlobalEnums.cs | 2 +- 5 files changed, 23 insertions(+), 37 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseLineItem.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseLineItem.cs index db2dd66f2d..4203d0e578 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseLineItem.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseLineItem.cs @@ -22,9 +22,8 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems Point toPoint; LineCap startLineCap; LineCap endLineCap; - DashCap dashLineCap; + - public BaseLineItem() { this.Size = new Size(50,10); @@ -42,8 +41,6 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems } - -// [System.ComponentModel.EditorBrowsableAttribute()] protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.HighQuality; @@ -113,16 +110,5 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems Invalidate(); } } - - -// [Category("Appearance")] -// public DashCap DashLineCap { -// get { return dashLineCap; } -// set { -// dashLineCap = value; -// Invalidate(); -// } -// } - } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseRectangleItem.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseRectangleItem.cs index b7be7d2627..c7581fa93b 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseRectangleItem.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/BaseRectangleItem.cs @@ -146,17 +146,17 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems public static GraphicsPath Create(Rectangle rect, int radius, RectangleCorners c) { return Create(rect.X, rect.Y, rect.Width, rect.Height, radius, c); } +// +// public static GraphicsPath Create(int x, int y, int width, int height, int radius) +// { return Create(x, y, width, height, radius, RectangleCorners.All); } - public static GraphicsPath Create(int x, int y, int width, int height, int radius) - { return Create(x, y, width, height, radius, RectangleCorners.All); } +// public static GraphicsPath Create(Rectangle rect, int radius) +// { return Create(rect.X, rect.Y, rect.Width, rect.Height, radius); } +// +// public static GraphicsPath Create(int x, int y, int width, int height) +// { return Create(x, y, width, height, 5); } - public static GraphicsPath Create(Rectangle rect, int radius) - { return Create(rect.X, rect.Y, rect.Width, rect.Height, radius); } - - public static GraphicsPath Create(int x, int y, int width, int height) - { return Create(x, y, width, height, 5); } - - public static GraphicsPath Create(Rectangle rect) - { return Create(rect.X, rect.Y, rect.Width, rect.Height); } +// public static GraphicsPath Create(Rectangle rect) +// { return Create(rect.X, rect.Y, rect.Width, rect.Height); } } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Services/HelpService.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Services/HelpService.cs index d83aa841ef..089ca9c53d 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Services/HelpService.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Services/HelpService.cs @@ -60,14 +60,14 @@ namespace ICSharpCode.Reporting.Addin.Services { HelpProvider.ShowHelpByKeyword(helpKeyword); } - public void ShowGeneralHelp() - { - ShowHelpFromKeyword(generalKeyword); - } - static public void ShowHelp() - { -// HelpProvider.ShowHelp(f1Keyword); - } +// public void ShowGeneralHelp() +// { +// ShowHelpFromKeyword(generalKeyword); +// } +// static public void ShowHelp() +// { +//// HelpProvider.ShowHelp(f1Keyword); +// } public void ShowHelpFromUrl(string helpUrl) { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/AbstractItemTypeProvider.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/AbstractItemTypeProvider.cs index 28665d5d2c..1a3175bfd2 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/AbstractItemTypeProvider.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/AbstractItemTypeProvider.cs @@ -22,9 +22,9 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider { } - public AbstractItemTypeProvider(TypeDescriptionProvider parent): base(parent) - { - } +// public AbstractItemTypeProvider(TypeDescriptionProvider parent): base(parent) +// { +// } public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/GlobalEnums.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/GlobalEnums.cs index cecd76a3ec..accba07f91 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/GlobalEnums.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/GlobalEnums.cs @@ -25,7 +25,7 @@ namespace ICSharpCode.Reporting.Globals /// public sealed class GlobalEnums { - GlobalEnums() { + private GlobalEnums() { } public enum ReportSection { From ca0e99d4177f3d4a404e3fcc3c4b87c56c28b65d Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Wed, 25 Jun 2014 21:06:21 +0200 Subject: [PATCH 032/575] Cleanup - FxCop --- .../src/DesignerBinding/DesignerBinding.cs | 4 +- .../src/Factory/CreateFormSheetFromModel.cs | 4 +- .../src/XML/ReportDefinitionParser.cs | 6 +- .../ICSharpCode.Reporting.csproj | 8 +- .../ICSharpCode.Reporting/Src/Collections.cs | 12 +- .../DataCollection.cs | 3 +- .../Listhandling/CollectionDataSource.cs | 22 +--- .../Src/DataManager/Listhandling/IndexList.cs | 33 ----- .../Src/DataSource/Comparer/BaseComparer.cs | 102 ---------------- .../Src/DataSource/Comparer/GroupComparer.cs | 39 ------ .../Src/DataSource/Comparer/SortComparer.cs | 115 ------------------ .../Src/DataSource/Comparer/SortExtension.cs | 42 ------- .../DataSource/ExtendedPropertyDescriptor.cs | 3 +- .../Src/DataSource/ExtendedTypeDescriptor.cs | 8 +- .../Src/DataSource/PropertyMemberAccessore.cs | 2 +- .../Src/Factories/ExportColumnFactory.cs | 8 +- .../Src/Factories/ReportCreatorFactory.cs | 1 - .../Src/Factories/ReportModelFactory.cs | 5 +- .../Src/Globals/CreateGraphics.cs | 6 +- .../Src/Globals/MeasurementService.cs | 1 - .../Src/Globals/StandardFormatter.cs | 13 +- .../Src/Globals/TypeHelper.cs | 2 +- .../Src/Interfaces/Data/IDataSource.cs | 1 - .../Src/Items/BaseRowItem.cs | 2 - .../Src/Items/GroupColumn.cs | 2 +- .../Src/ReportingFactory.cs | 2 - 26 files changed, 36 insertions(+), 410 deletions(-) rename src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/{DataSource => DataManager}/DataCollection.cs (98%) delete mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/IndexList.cs delete mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/BaseComparer.cs delete mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/GroupComparer.cs delete mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/SortComparer.cs delete mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/SortExtension.cs diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/DesignerBinding.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/DesignerBinding.cs index ceaf1ce82e..caa01485ba 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/DesignerBinding.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/DesignerBinding.cs @@ -47,9 +47,7 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding { if (file.IsDirty) { var reportModel = ReportModelFactory.Create(); - - var reportFactory = new CreateFormSheetFromModel(); - var xml = reportFactory.ToXml(reportModel); + var xml = CreateFormSheetFromModel.ToXml(reportModel); var doc = new XmlDocument(); doc.LoadXml(xml.ToString()); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Factory/CreateFormSheetFromModel.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Factory/CreateFormSheetFromModel.cs index 7243c96c6a..9c666f09b4 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Factory/CreateFormSheetFromModel.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Factory/CreateFormSheetFromModel.cs @@ -19,10 +19,10 @@ namespace ICSharpCode.Reporting.Addin.Factory /// /// Description of CreateFormSheetReport. /// - class CreateFormSheetFromModel + static class CreateFormSheetFromModel { - public StringWriter ToXml(IReportModel reportModel) { + public static StringWriter ToXml(IReportModel reportModel) { int locY = reportModel.ReportSettings.TopMargin; foreach (var section in reportModel.SectionCollection) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDefinitionParser.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDefinitionParser.cs index 1a4fdb4787..209e6f5951 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDefinitionParser.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDefinitionParser.cs @@ -22,6 +22,7 @@ using System.ComponentModel; using System.Diagnostics; using System.Reflection; using System.Xml; +using System.Xml.XPath; using ICSharpCode.Reporting.Xml; @@ -102,8 +103,7 @@ namespace ICSharpCode.Reporting.Addin.XML Type t=parent.GetType(); // children of a class must always be properties - foreach(XmlNode child in node.ChildNodes) - { + foreach(XmlNode child in node.ChildNodes){ if (child is XmlElement) { string pname=child.LocalName; @@ -220,7 +220,7 @@ namespace ICSharpCode.Reporting.Addin.XML } } - void SetPropertyToString(object obj, PropertyInfo pi, string value) + static void SetPropertyToString(object obj, PropertyInfo pi, string value) { // it's string, so use a type converter. TypeConverter tc=TypeDescriptor.GetConverter(pi.PropertyType); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj index 1c743c111d..707962a862 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj @@ -91,13 +91,8 @@ + - - - - - - @@ -196,7 +191,6 @@ - diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Collections.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Collections.cs index 5bc4688209..366f85a6fc 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Collections.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Collections.cs @@ -52,9 +52,6 @@ namespace ICSharpCode.Reporting public class GroupColumnCollection: SortColumnCollection { - public GroupColumnCollection() - { - } public new AbstractColumn Find (string columnName) { @@ -67,12 +64,7 @@ namespace ICSharpCode.Reporting } - public class ParameterCollection: Collection{ - - public ParameterCollection() - { - } - + public class ParameterCollection: Collection{ public BasicParameter Find (string parameterName) { @@ -85,7 +77,7 @@ namespace ICSharpCode.Reporting public static CultureInfo Culture { - get { return System.Globalization.CultureInfo.CurrentCulture; } + get { return CultureInfo.CurrentCulture; } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/DataCollection.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/DataCollection.cs similarity index 98% rename from src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/DataCollection.cs rename to src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/DataCollection.cs index 2e1338acc7..b069aeb09d 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/DataCollection.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/DataCollection.cs @@ -24,8 +24,9 @@ using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Reflection; +using ICSharpCode.Reporting.DataSource; -namespace ICSharpCode.Reporting.DataSource +namespace ICSharpCode.Reporting.DataManager { /// /// Description of DataCollection. diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs index eed7ca2ad0..f5008d188d 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs @@ -44,7 +44,6 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling { readonly DataCollection baseList; readonly ReportSettings reportSettings; -// readonly Type elementType; readonly PropertyDescriptorCollection listProperties; @@ -61,24 +60,7 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling this.listProperties = this.baseList.GetItemProperties(null); OrderGroup = OrderGroup.AsIs; } - - - [Obsolete("use public CollectionDataSource(IEnumerable list, ReportSettings reportSettings")] - public CollectionDataSource(IEnumerable list, Type elementType, ReportSettings reportSettings) - { - if (list == null) - throw new ArgumentNullException("list"); - if (reportSettings == null) - throw new ArgumentNullException("reportSettings"); - - baseList = CreateBaseList(list); - CurrentList = baseList; - this.reportSettings = reportSettings; - this.listProperties = this.baseList.GetItemProperties(null); - OrderGroup = OrderGroup.AsIs; - } - - + public Collection AvailableFields { get { @@ -176,7 +158,7 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling public void Fill (List collection, object current) { Current = current; - foreach (var element in collection) { + foreach (var element in collection) { var container = element as ReportContainer; if (container != null) { FillFromList(container.Items); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/IndexList.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/IndexList.cs deleted file mode 100644 index 6903e29e97..0000000000 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/IndexList.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using ICSharpCode.Reporting.DataSource.Comparer; - -namespace ICSharpCode.Reporting.DataManager.Listhandling -{ - /// - /// Description of IndexList. - /// - public class IndexList :List - { - - public int CurrentPosition {get;set;} - } -} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/BaseComparer.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/BaseComparer.cs deleted file mode 100644 index 4547ac2c7b..0000000000 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/BaseComparer.cs +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.ObjectModel; -using ICSharpCode.Reporting.BaseClasses; - -namespace ICSharpCode.Reporting.DataSource.Comparer -{ - /// - /// Description of BaseComparer. - /// - public class BaseComparer : IComparable { - - private int listIndex; - private object[] objectArray; - - /// - /// Default constructor - initializes all fields to default values - /// - - public BaseComparer(Collection columnCollection , int listIndex, object[] values) { - this.ColumnCollection = columnCollection; - this.listIndex = listIndex; - this.objectArray = values; - } - - /// - /// Interface method from IComparable - /// - /// - /// Interface method from IComparable - /// - /// - /// a - public virtual int CompareTo(object obj) { - return 0; - } - - /// - /// Ausgeben der Werte als Pseudo-CSV - /// - public override string ToString() - { - System.Text.StringBuilder builder = new System.Text.StringBuilder(); - builder.AppendFormat("{0};", this.listIndex); - foreach (object value in objectArray) - { - if (value == null || value == DBNull.Value) - { - builder.AppendFormat(""); - } - else if (value.GetType() == typeof(string)) - { - builder.AppendFormat("\"{0}\"", (string)value); - } - else if (value is IFormattable) - { - builder.AppendFormat("{0}", ((IFormattable)value).ToString("g", System.Globalization.CultureInfo.InvariantCulture)); - } - else - { - builder.AppendFormat("[{0}]", value.ToString()); - } - builder.Append(';'); - } - return builder.ToString(); - } - - - public int ListIndex { - get { - return listIndex; - } - } - - public object[] ObjectArray { - get { - return objectArray; - } - } - - - public Collection ColumnCollection {get;private set;} - - } -} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/GroupComparer.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/GroupComparer.cs deleted file mode 100644 index fa54526ae8..0000000000 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/GroupComparer.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.ObjectModel; -using ICSharpCode.Reporting.BaseClasses; -using ICSharpCode.Reporting.DataManager.Listhandling; - -namespace ICSharpCode.Reporting.DataSource.Comparer -{ - /// - /// Description of GroupComparer. - /// - public class GroupComparer :SortComparer - { - - public GroupComparer (Collection owner, int listIndex, object[] values):base(owner,listIndex,values) - { - IndexList = new IndexList(); - } - - public IndexList IndexList {get;private set;} - } -} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/SortComparer.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/SortComparer.cs deleted file mode 100644 index 1e17a96e0e..0000000000 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/SortComparer.cs +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.ObjectModel; -using System.ComponentModel; -using System.Globalization; - -using ICSharpCode.Reporting.BaseClasses; -using ICSharpCode.Reporting.Items; - -namespace ICSharpCode.Reporting.DataSource.Comparer -{ - /// - /// Description of SortComparer. - /// - public class SortComparer : BaseComparer { - - public SortComparer(Collection owner, int listIndex, object[] values):base(owner,listIndex,values) - { - } - - - internal int CompareTo(SortComparer value) - { - // we shouldn't get to this point - if (value == null) - throw new ArgumentNullException("value"); - - if (value.ObjectArray.Length != base.ObjectArray.Length) - throw new InvalidOperationException(); - - int compare = 0; - - for (int index = 0; index < base.ObjectArray.Length; index++) - { - object leftValue = base.ObjectArray[index]; - - object rightValue = value.ObjectArray[index]; - - // Indizes sind hier deckungsgleich - - SortColumn sortColumn = (SortColumn)base.ColumnCollection[index]; - - bool descending = (sortColumn.SortDirection == ListSortDirection.Descending); - - // null means equl - if (leftValue == null || leftValue == System.DBNull.Value) - { - if (rightValue != null && rightValue != System.DBNull.Value) - { - return (descending) ? 1 : -1; - } - - // Beide Null - continue; - } - - if (rightValue == null || rightValue == System.DBNull.Value) - { - return (descending) ? -1 : 1; - } - - - if (leftValue.GetType() != rightValue.GetType()){ - string s = String.Format(CultureInfo.CurrentCulture, - "{0} {1} {2}",this.GetType().ToString(), - leftValue.GetType().ToString(), - rightValue.GetType().ToString()); - - throw new ArgumentException(s); - } - if (leftValue.GetType() == typeof(string)) - { - compare = String.Compare((string)leftValue, (string)rightValue, - !sortColumn.CaseSensitive, CultureInfo.CurrentCulture); - } - else - { - compare = ((IComparable)leftValue).CompareTo(rightValue); - } - - // Sind ungleich, tauschen je nach Richtung - if (compare != 0) - { - return (descending) ? -compare : compare; - } - } - - // Gleich Werte, dann Index bercksichtigen - return this.ListIndex.CompareTo(value.ListIndex); - } - public override int CompareTo(object obj) { - base.CompareTo(obj); - return this.CompareTo((SortComparer)obj); - } - - - } -} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/SortExtension.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/SortExtension.cs deleted file mode 100644 index 3d115c09af..0000000000 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/SortExtension.cs +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Linq; -namespace ICSharpCode.Reporting.DataSource.Comparer -{ - /// - /// Description of SortExtension. - /// - internal static class SortExtension - { - - public static IOrderedQueryable AscendingOrder(this IQueryable source ) - { - - return source.OrderBy(x => x.ObjectArray[0]); - } - - public static IOrderedQueryable DescendingOrder(this IQueryable source ) - { - - return source.OrderByDescending(x => x.ObjectArray[0]); - } - } - -} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedPropertyDescriptor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedPropertyDescriptor.cs index 3a97b541df..2a5c4cd6ae 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedPropertyDescriptor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedPropertyDescriptor.cs @@ -20,6 +20,7 @@ using System; using System.Collections; using System.ComponentModel; using System.Reflection; +using ICSharpCode.Reporting.DataManager; namespace ICSharpCode.Reporting.DataSource { @@ -30,7 +31,7 @@ namespace ICSharpCode.Reporting.DataSource { Type componentType; - Type propertyType; + readonly Type propertyType; PropertyInfo prop; public ExtendedPropertyDescriptor (string name, Type componentType, Type propertyType) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedTypeDescriptor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedTypeDescriptor.cs index 0b41f0c2da..0611f8ac7a 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedTypeDescriptor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedTypeDescriptor.cs @@ -28,9 +28,9 @@ namespace ICSharpCode.Reporting.DataSource /// class ExtendedTypeDescriptor { - private static Hashtable collections = new Hashtable(); + static Hashtable collections = new Hashtable(); - private static bool IsAllowedProperty(string name) + static bool IsAllowedProperty(string name) { return true; // alle erlaubt } @@ -57,7 +57,7 @@ namespace ICSharpCode.Reporting.DataSource } } - PropertyDescriptor[] descriptors = new PropertyDescriptor[l]; + var descriptors = new PropertyDescriptor[l]; int j = 0; foreach(PropertyInfo pinfo in allProps) @@ -67,7 +67,7 @@ namespace ICSharpCode.Reporting.DataSource descriptors[j++] = new ExtendedPropertyDescriptor(pinfo.Name, memberType, pinfo.PropertyType); } } - PropertyDescriptorCollection result = new PropertyDescriptorCollection(descriptors); + var result = new PropertyDescriptorCollection(descriptors); collections.Add(memberType, result); return result; } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/PropertyMemberAccessore.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/PropertyMemberAccessore.cs index 2a96339eaa..d7536ec5c7 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/PropertyMemberAccessore.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/PropertyMemberAccessore.cs @@ -33,7 +33,7 @@ namespace ICSharpCode.Reporting.DataSource public class PropertyMemberAccessor : IMemberAccessor { - private readonly PropertyInfo _prop; + readonly PropertyInfo _prop; public PropertyMemberAccessor(PropertyInfo prop) { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ExportColumnFactory.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ExportColumnFactory.cs index c22696ac0a..30b4f34422 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ExportColumnFactory.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ExportColumnFactory.cs @@ -17,22 +17,16 @@ // DEALINGS IN THE SOFTWARE. using System; -using ICSharpCode.Reporting.BaseClasses; using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Interfaces.Export; -using ICSharpCode.Reporting.Items; -using ICSharpCode.Reporting.PageBuilder.ExportColumns; namespace ICSharpCode.Reporting.Factories { /// /// Description of ExportColumnFactory. /// - internal class ExportColumnFactory + class ExportColumnFactory { - public ExportColumnFactory() - { - } public static IExportColumn CreateItem (IPrintableObject item) { var export = item.CreateExportColumn(); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ReportCreatorFactory.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ReportCreatorFactory.cs index e1fed55013..6ce850bbb8 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ReportCreatorFactory.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ReportCreatorFactory.cs @@ -19,7 +19,6 @@ using System; using ICSharpCode.Reporting.Globals; using ICSharpCode.Reporting.Interfaces; -using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.PageBuilder; namespace ICSharpCode.Reporting.Factories diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ReportModelFactory.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ReportModelFactory.cs index d958e5948a..b6fa62ec5e 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ReportModelFactory.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Factories/ReportModelFactory.cs @@ -21,8 +21,9 @@ namespace ICSharpCode.Reporting.Factories public static ReportModel Create() { var reportModel = new ReportModel(); - foreach (var sec in Enum.GetValues(typeof(GlobalEnums.ReportSection))) { - reportModel.SectionCollection.Add (SectionFactory.Create(sec.ToString())); + + foreach (var section in Enum.GetValues(typeof(GlobalEnums.ReportSection))) { + reportModel.SectionCollection.Add (SectionFactory.Create(section.ToString())); } foreach (var section in reportModel.SectionCollection) { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/CreateGraphics.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/CreateGraphics.cs index 78005c76f5..27e0b902c9 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/CreateGraphics.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/CreateGraphics.cs @@ -24,13 +24,13 @@ namespace ICSharpCode.Reporting.Globals /// /// Description of CreateGraphics. /// - internal class CreateGraphics + static class CreateGraphics { public static Graphics FromSize (Size size){ - if (size == null) { + if (size == Size.Empty) { throw new ArgumentNullException("size"); } - Bitmap bitmap = new Bitmap(size.Width,size.Height); + var bitmap = new Bitmap(size.Width,size.Height); var graphics = Graphics.FromImage(bitmap); return graphics; } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/MeasurementService.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/MeasurementService.cs index 6b5f61572a..0d96f7c133 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/MeasurementService.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/MeasurementService.cs @@ -28,7 +28,6 @@ namespace ICSharpCode.Reporting.Globals static class MeasurementService { - public static Size Measure (IExportText item,Graphics graphics) { if (!item.CanGrow) { return item.Size; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/StandardFormatter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/StandardFormatter.cs index 9e684ac60a..a55304f600 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/StandardFormatter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/StandardFormatter.cs @@ -53,7 +53,7 @@ namespace ICSharpCode.Reporting.Globals // private static string FormatItem (string valueToFormat,string format, // TypeCode typeCode,string nullValue) - private static string FormatItem (string valueToFormat,string format, + static string FormatItem (string valueToFormat,string format, TypeCode typeCode) { string retValue = String.Empty; @@ -90,7 +90,7 @@ namespace ICSharpCode.Reporting.Globals } - private static string FormatBool (string toFormat) + static string FormatBool (string toFormat) { if (CheckValue(toFormat)) { bool b = bool.Parse (toFormat); @@ -99,7 +99,8 @@ namespace ICSharpCode.Reporting.Globals return toFormat; } - private static string FormatIntegers(string toFormat, string format) + + static string FormatIntegers(string toFormat, string format) { string str = String.Empty; if (CheckValue (toFormat)) { @@ -113,7 +114,7 @@ namespace ICSharpCode.Reporting.Globals } - private static string FormatDecimal(string toFormat, string format) + static string FormatDecimal(string toFormat, string format) { string str = String.Empty; if (CheckValue (toFormat)) { @@ -135,7 +136,7 @@ namespace ICSharpCode.Reporting.Globals // http://stackoverflow.com/questions/4710455/i-need-code-to-validate-any-time-in-c-sharp-in-hhmmss-format - private static string FormatDate(string toFormat, string format) + static string FormatDate(string toFormat, string format) { DateTime date; if (DateTime.TryParse(toFormat, out date)) @@ -157,7 +158,7 @@ namespace ICSharpCode.Reporting.Globals } - private static bool CheckValue (string toFormat) + static bool CheckValue (string toFormat) { if (String.IsNullOrEmpty(toFormat)) { return false; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs index 5e0431f766..7931164b3e 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs @@ -25,7 +25,7 @@ namespace ICSharpCode.Reporting.Globals /// /// Description of TypeHelper. /// - class TypeHelper + static class TypeHelper { public static DbType DbTypeFromStringRepresenation(string type) { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Data/IDataSource.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Data/IDataSource.cs index 66f6486356..a932305662 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Data/IDataSource.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Data/IDataSource.cs @@ -17,7 +17,6 @@ // DEALINGS IN THE SOFTWARE. using System; -using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseRowItem.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseRowItem.cs index 2bce8e3201..d589485bed 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseRowItem.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseRowItem.cs @@ -41,7 +41,5 @@ namespace ICSharpCode.Reporting.Items }; return er; } - - } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/GroupColumn.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/GroupColumn.cs index 3c913fadf7..1519f0f673 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/GroupColumn.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/GroupColumn.cs @@ -33,7 +33,7 @@ namespace ICSharpCode.Reporting.Items public GroupColumn(string columnName,int groupLevel, ListSortDirection sortDirection):base(columnName,sortDirection) { - if (GroupLevel < 0) { + if (groupLevel < 0) { throw new ArgumentException("groupLevel"); } this.GroupLevel = groupLevel; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs index 24f591ceb0..cb2861e0fe 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs @@ -35,8 +35,6 @@ namespace ICSharpCode.Reporting public class ReportingFactory { - - public IReportCreator ReportCreator (Stream stream,IEnumerable list) { ReportModel = LoadReportModel (stream); From 11dcc20cc4951457cae14f032f634d9c9e5199af Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Thu, 26 Jun 2014 01:41:22 +0200 Subject: [PATCH 033/575] Readded additional lookups for search term before searching for references in CSharpSymbolSearch. --- .../Project/Src/Parser/CSharpSymbolSearch.cs | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs index 435d0a8747..2e38fa7dc6 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs @@ -133,11 +133,11 @@ namespace CSharpBinding ITextSource textSource = args.ParseableFileContentFinder.Create(fileName); if (textSource == null) return; - // TODO Reactivate somehow! -// if (searchScope.SearchTerm != null) { -// if (textSource.IndexOf(searchScope.SearchTerm, 0, textSource.TextLength, StringComparison.Ordinal) < 0) -// return; -// } + if (searchScopeList != null) { + if (!searchScopeList.Any( + scope => (scope.SearchTerm == null) || (textSource.IndexOf(scope.SearchTerm, 0, textSource.TextLength, StringComparison.Ordinal) >= 0))) + return; + } var parseInfo = SD.ParserService.Parse(fileName, textSource) as CSharpFullParseInformation; if (parseInfo == null) @@ -218,11 +218,11 @@ namespace CSharpBinding ITextSource textSource = args.ParseableFileContentFinder.Create(fileName); if (textSource == null) return; - // TODO Reactivate somehow! -// if (searchScope.SearchTerm != null) { -// if (textSource.IndexOf(searchScope.SearchTerm, 0, textSource.TextLength, StringComparison.Ordinal) < 0) -// return; -// } + if (searchScopeList != null) { + if (!searchScopeList.Any( + scope => (scope.SearchTerm == null) || (textSource.IndexOf(scope.SearchTerm, 0, textSource.TextLength, StringComparison.Ordinal) >= 0))) + return; + } var parseInfo = SD.ParserService.Parse(fileName, textSource) as CSharpFullParseInformation; if (parseInfo == null) From e2aacef60cd1dde7141401febdf7464c4cd87ad8 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Thu, 26 Jun 2014 02:05:02 +0200 Subject: [PATCH 034/575] Fix #328: Settings > File Format Associations Dialog Issue --- .../Project/Src/RegisterFiletypesPanel.Designer.cs | 12 +++++++----- .../Project/Src/RegisterFiletypesPanel.cs | 7 +++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesPanel.Designer.cs b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesPanel.Designer.cs index 1970bae87d..fc94603d6f 100644 --- a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesPanel.Designer.cs +++ b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesPanel.Designer.cs @@ -38,7 +38,7 @@ namespace ICSharpCode.FiletypeRegisterer } base.Dispose(disposing); } - + /// /// This method is required for Windows Forms designer support. /// Do not change the method contents inside the source code editor. The Forms designer might @@ -53,24 +53,25 @@ namespace ICSharpCode.FiletypeRegisterer // captionLabel // this.captionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); + | System.Windows.Forms.AnchorStyles.Right))); this.captionLabel.Location = new System.Drawing.Point(3, 0); this.captionLabel.Name = "captionLabel"; this.captionLabel.Size = new System.Drawing.Size(328, 23); this.captionLabel.TabIndex = 0; this.captionLabel.Text = "${res:ICSharpCode.SharpDevelop.Gui.Dialogs.OptionPanels.RegisterFiletypesPanel.Ca" + - "ptionLabel}"; + "ptionLabel}"; // // fileTypesListBox // this.fileTypesListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.fileTypesListBox.IntegralHeight = false; this.fileTypesListBox.Location = new System.Drawing.Point(3, 26); this.fileTypesListBox.Name = "fileTypesListBox"; this.fileTypesListBox.Size = new System.Drawing.Size(328, 299); this.fileTypesListBox.TabIndex = 1; + this.fileTypesListBox.MouseClick += new System.Windows.Forms.MouseEventHandler(this.fileTypesListBox_MouseClick); // // RegisterFiletypesPanel // @@ -79,6 +80,7 @@ namespace ICSharpCode.FiletypeRegisterer this.Name = "RegisterFiletypesPanel"; this.Size = new System.Drawing.Size(334, 328); this.ResumeLayout(false); + } private System.Windows.Forms.CheckedListBox fileTypesListBox; private System.Windows.Forms.Label captionLabel; diff --git a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesPanel.cs b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesPanel.cs index 2af5952278..0a40e941a1 100644 --- a/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesPanel.cs +++ b/src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesPanel.cs @@ -80,5 +80,12 @@ namespace ICSharpCode.FiletypeRegisterer } return true; } + + void fileTypesListBox_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e) + { + if (fileTypesListBox.IndexFromPoint(e.X, e.Y) == ListBox.NoMatches) { + fileTypesListBox.SelectedIndex = -1; + } + } } } From 1c1e65518b148a4c81cd962a71a500b63ca6e452 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 22 Jun 2014 15:30:19 +0200 Subject: [PATCH 035/575] Fix adding 32-bit image format to .ico --- .../DisplayBindings/IconEditor/PickFormatDialog.Designer.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.Designer.cs b/src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.Designer.cs index c0b83322fb..4815c9c6c2 100644 --- a/src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.Designer.cs +++ b/src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.Designer.cs @@ -133,7 +133,6 @@ namespace ICSharpCode.IconEditor "Monochrome", "4 bit", "8 bit", - "16 bit", "24 bit", "32 bit"}); this.colorDepthComboBox.Location = new System.Drawing.Point(93, 73); From d8fd301d251c738540d67588467bb9143b09d4cb Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 22 Jun 2014 15:33:25 +0200 Subject: [PATCH 036/575] Debugger: ignore "Process was terminated" error when trying to terminate the process. --- src/AddIns/Debugger/Debugger.Core/Process.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/AddIns/Debugger/Debugger.Core/Process.cs b/src/AddIns/Debugger/Debugger.Core/Process.cs index 6ebdeee737..da2cc09f06 100644 --- a/src/AddIns/Debugger/Debugger.Core/Process.cs +++ b/src/AddIns/Debugger/Debugger.Core/Process.cs @@ -527,8 +527,16 @@ namespace Debugger System.Threading.Thread.Sleep(0); // Stop&terminate - both must be called - corProcess.Stop(uint.MaxValue); - corProcess.Terminate(0); + try { + corProcess.Stop(uint.MaxValue); + corProcess.Terminate(0); + } catch (COMException ex) { + if (ex.ErrorCode == unchecked((int)0x80131301)) { + // COMException (0x80131301): Process was terminated. + } else { + throw; + } + } this.TerminateCommandIssued = true; // Do not mark the process as exited From 6fc6bab462916653529064f8832e0a1f94906b11 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Thu, 26 Jun 2014 19:25:11 +0200 Subject: [PATCH 037/575] Remove unused 'IList[] interestingFileNames' from CSharpSymbolSearch --- .../Project/Src/Parser/CSharpSymbolSearch.cs | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs index 2e38fa7dc6..df942efb17 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs @@ -52,14 +52,13 @@ namespace CSharpBinding /// public class CSharpSymbolSearch : ISymbolSearch { - IProject project; - ICompilation compilation; - FindReferences fr = new FindReferences(); - IList searchScopes; - IList[] interestingFileNames; - Dictionary> searchScopesPerFile; - int workAmount; - double workAmountInverse; + readonly IProject project; + readonly ICompilation compilation; + readonly FindReferences fr = new FindReferences(); + readonly IList searchScopes; + readonly Dictionary> searchScopesPerFile; + readonly int workAmount; + readonly double workAmountInverse; public CSharpSymbolSearch(IProject project, ISymbol entity) { @@ -73,17 +72,15 @@ namespace CSharpBinding } searchScopesPerFile = new Dictionary>(); - interestingFileNames = new IList[searchScopes.Count]; for (int i = 0; i < searchScopes.Count; i++) { var thisSearchScope = searchScopes[i]; - var interestingFiles = fr.GetInterestingFiles(thisSearchScope, compilation).Select(f => f.FileName).ToList(); + var interestingFiles = fr.GetInterestingFiles(thisSearchScope, compilation).Select(f => f.FileName); foreach (var file in interestingFiles) { if (!searchScopesPerFile.ContainsKey(file)) searchScopesPerFile[file] = new List(); searchScopesPerFile[file].Add(thisSearchScope); + workAmount++; } - interestingFileNames[i] = interestingFiles.ToList(); - workAmount += interestingFiles.Count; } workAmountInverse = 1.0 / workAmount; } From 8247fde3313f8aa7edd18021e074e2f5dc4e2f23 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Thu, 26 Jun 2014 20:09:32 +0200 Subject: [PATCH 038/575] Cleanup - FxCop --- .../src/Designer/ReportRootDesigner.cs | 4 ++-- .../src/Globals/StringWriterWithEncoding.cs | 2 +- .../src/TypeProvider/AbstractItemTypeProvider.cs | 16 +++++----------- .../src/TypeProvider/CircleItemTypeProvider.cs | 6 +++--- .../src/TypeProvider/DataItemTypeProvider.cs | 8 ++++---- .../src/TypeProvider/GroupedRowTypeProvider.cs | 15 ++++----------- .../src/TypeProvider/LineItemTypeProvider.cs | 11 ++++------- .../TypeProvider/RectangleItemTypeProvider.cs | 8 ++++---- .../src/TypeProvider/RowItemTypeProvider.cs | 14 ++++---------- .../src/TypeProvider/SectionItemTypeProvider.cs | 4 ++-- .../src/TypeProvider/TextItemTypeProvider.cs | 6 ++---- .../src/Views/DesignerView.cs | 2 +- .../src/XML/MycroWriter.cs | 3 ++- .../src/XML/ReportDefinitionParser.cs | 14 +++++++------- .../src/XML/ReportDesignerWriter.cs | 9 ++++----- .../Src/DataSource/ExtendedTypeDescriptor.cs | 2 +- .../ICSharpCode.Reporting/Src/Xml/MycroParser.cs | 7 ++++--- 17 files changed, 54 insertions(+), 77 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/ReportRootDesigner.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/ReportRootDesigner.cs index 21f779209a..d7da7e7886 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/ReportRootDesigner.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/ReportRootDesigner.cs @@ -24,6 +24,7 @@ using System.ComponentModel.Design; using System.Drawing; using System.Drawing.Design; using System.Drawing.Printing; +using System.Globalization; using System.Windows.Forms; using System.Windows.Forms.Design; using ICSharpCode.Core; @@ -217,7 +218,6 @@ namespace ICSharpCode.Reporting.Addin.Designer if (section != null) { sections.Add(section); section.SizeChanged += new EventHandler( OnSectionSizeChanged); - Console.Write("reportRootDesigner:OnComponentAdded"); foreach (Control ctrl in section.Controls) { AddToHost(ctrl); host.Container.Add(ctrl); @@ -240,7 +240,7 @@ namespace ICSharpCode.Reporting.Addin.Designer private void OnComponentChanged(object sender, ComponentChangedEventArgs ce) { LoggingService.InfoFormatted("RootDesigner:OnComponentChanged"); - String str = String.Format("RootDesigner:OnComponentChanged <{0}> from <{1}> to <{2}>",ce.Component.ToString(),ce.OldValue,ce.NewValue); + var str = String.Format(CultureInfo.CurrentCulture,"RootDesigner:OnComponentChanged <{0}> from <{1}> to <{2}>",ce.Component.ToString(),ce.OldValue,ce.NewValue); LoggingService.InfoFormatted(str); var section = ce.Component as BaseSection; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Globals/StringWriterWithEncoding.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Globals/StringWriterWithEncoding.cs index ece8f2e807..7cbb7e2694 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Globals/StringWriterWithEncoding.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Globals/StringWriterWithEncoding.cs @@ -16,7 +16,7 @@ namespace ICSharpCode.Reporting.Addin.Globals /// class StringWriterWithEncoding:System.IO.StringWriter { - private readonly Encoding encoding; + readonly Encoding encoding; public StringWriterWithEncoding(Encoding encoding) { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/AbstractItemTypeProvider.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/AbstractItemTypeProvider.cs index 1a3175bfd2..fae180edad 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/AbstractItemTypeProvider.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/AbstractItemTypeProvider.cs @@ -22,26 +22,20 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider { } -// public AbstractItemTypeProvider(TypeDescriptionProvider parent): base(parent) -// { -// } - public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { ICustomTypeDescriptor td = base.GetTypeDescriptor(objectType, instance); - return new AbstractItemTypeDescriptor(td, instance); + return new AbstractItemTypeDescriptor(td); } } - internal class AbstractItemTypeDescriptor : CustomTypeDescriptor + class AbstractItemTypeDescriptor : CustomTypeDescriptor { -// private AbstractItem _instance; - public AbstractItemTypeDescriptor(ICustomTypeDescriptor parent, object instance) + public AbstractItemTypeDescriptor(ICustomTypeDescriptor parent) : base(parent) { -// _instance = instance as AbstractItem; } @@ -54,8 +48,8 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override PropertyDescriptorCollection GetProperties(Attribute[] attributes) { - PropertyDescriptorCollection props = base.GetProperties(attributes); - List allProperties = new List(); + var props = base.GetProperties(attributes); + var allProperties = new List(); foreach (PropertyDescriptor p in props) { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/CircleItemTypeProvider.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/CircleItemTypeProvider.cs index bb84b9472c..9f86469b8d 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/CircleItemTypeProvider.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/CircleItemTypeProvider.cs @@ -26,7 +26,7 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { ICustomTypeDescriptor td = base.GetTypeDescriptor(objectType,instance); - return new CircleItemTypeDescriptor(td, instance); + return new CircleItemTypeDescriptor(td); } } @@ -34,7 +34,7 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider class CircleItemTypeDescriptor : CustomTypeDescriptor { - public CircleItemTypeDescriptor(ICustomTypeDescriptor parent, object instance): base(parent) + public CircleItemTypeDescriptor(ICustomTypeDescriptor parent): base(parent) { } @@ -48,7 +48,7 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override PropertyDescriptorCollection GetProperties(Attribute[] attributes) { PropertyDescriptorCollection props = base.GetProperties(attributes); - List allProperties = new List(); + var allProperties = new List(); TypeProviderHelper.AddDefaultProperties(allProperties,props); TypeProviderHelper.AddGraphicProperties(allProperties,props); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/DataItemTypeProvider.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/DataItemTypeProvider.cs index dbaabc703d..d92f052fd6 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/DataItemTypeProvider.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/DataItemTypeProvider.cs @@ -27,7 +27,7 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { ICustomTypeDescriptor td = base.GetTypeDescriptor(objectType,instance); - return new DataItemTypeDescriptor(td, instance); + return new DataItemTypeDescriptor(td); } } @@ -36,7 +36,7 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider class DataItemTypeDescriptor : CustomTypeDescriptor { - public DataItemTypeDescriptor(ICustomTypeDescriptor parent, object instance) + public DataItemTypeDescriptor(ICustomTypeDescriptor parent) : base(parent) { } @@ -50,8 +50,8 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override PropertyDescriptorCollection GetProperties(Attribute[] attributes) { - PropertyDescriptorCollection props = base.GetProperties(attributes); - List allProperties = new List(); + var props = base.GetProperties(attributes); + var allProperties = new List(); TypeProviderHelper.AddDefaultProperties(allProperties,props); TypeProviderHelper.AddTextBasedProperties(allProperties,props); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/GroupedRowTypeProvider.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/GroupedRowTypeProvider.cs index d1e32d1ee2..b900e3e324 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/GroupedRowTypeProvider.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/GroupedRowTypeProvider.cs @@ -26,14 +26,14 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { ICustomTypeDescriptor td = base.GetTypeDescriptor(objectType,instance); - return new GroupedRowItemTypeDescriptor(td, instance); + return new GroupedRowItemTypeDescriptor(td); } } class GroupedRowItemTypeDescriptor : CustomTypeDescriptor { - public GroupedRowItemTypeDescriptor(ICustomTypeDescriptor parent, object instance) + public GroupedRowItemTypeDescriptor(ICustomTypeDescriptor parent) : base(parent) { } @@ -47,8 +47,8 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override PropertyDescriptorCollection GetProperties(Attribute[] attributes) { - PropertyDescriptorCollection props = base.GetProperties(attributes); - List allProperties = new List(); + var props = base.GetProperties(attributes); + var allProperties = new List(); TypeProviderHelper.AddDefaultProperties(allProperties,props); @@ -69,16 +69,9 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider prop = props.Find("Controls",true); allProperties.Add(prop); -// prop = props.Find("AlternateBackColor",true); -// allProperties.Add(prop); -// -// prop = props.Find("ChangeBackColorEveryNRow",true); -// allProperties.Add(prop); - prop = props.Find("PageBreakOnGroupChange",true); allProperties.Add(prop); - return new PropertyDescriptorCollection(allProperties.ToArray()); } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/LineItemTypeProvider.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/LineItemTypeProvider.cs index 00929e7a2a..359e11def0 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/LineItemTypeProvider.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/LineItemTypeProvider.cs @@ -25,7 +25,7 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { ICustomTypeDescriptor td = base.GetTypeDescriptor(objectType,instance); - return new LineItemTypeDescriptor(td, instance); + return new LineItemTypeDescriptor(td); } } @@ -35,7 +35,7 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider { - public LineItemTypeDescriptor(ICustomTypeDescriptor parent, object instance) + public LineItemTypeDescriptor(ICustomTypeDescriptor parent) : base(parent) { @@ -50,8 +50,8 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override PropertyDescriptorCollection GetProperties(Attribute[] attributes) { - PropertyDescriptorCollection props = base.GetProperties(attributes); - List allProperties = new List(); + var props = base.GetProperties(attributes); + var allProperties = new List(); TypeProviderHelper.AddDefaultProperties(allProperties,props); @@ -71,9 +71,6 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider prop = props.Find("EndLineCap",true); allProperties.Add(prop); -// prop = props.Find("DashLineCap",true); -// allProperties.Add(prop); - prop = props.Find("DashStyle",true); allProperties.Add(prop); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/RectangleItemTypeProvider.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/RectangleItemTypeProvider.cs index 34371541f2..45229f76c4 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/RectangleItemTypeProvider.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/RectangleItemTypeProvider.cs @@ -25,7 +25,7 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { ICustomTypeDescriptor td = base.GetTypeDescriptor(objectType,instance); - return new RectangleItemTypeDescriptor(td, instance); + return new RectangleItemTypeDescriptor(td); } } @@ -33,7 +33,7 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider class RectangleItemTypeDescriptor : CustomTypeDescriptor { - public RectangleItemTypeDescriptor(ICustomTypeDescriptor parent, object instance) + public RectangleItemTypeDescriptor(ICustomTypeDescriptor parent) : base(parent) { } @@ -47,8 +47,8 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override PropertyDescriptorCollection GetProperties(Attribute[] attributes) { - PropertyDescriptorCollection props = base.GetProperties(attributes); - List allProperties = new List(); + var props = base.GetProperties(attributes); + var allProperties = new List(); TypeProviderHelper.AddDefaultProperties(allProperties,props); TypeProviderHelper.AddGraphicProperties(allProperties,props); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/RowItemTypeProvider.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/RowItemTypeProvider.cs index 1eeec71092..89245e2e48 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/RowItemTypeProvider.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/RowItemTypeProvider.cs @@ -26,14 +26,14 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { ICustomTypeDescriptor td = base.GetTypeDescriptor(objectType,instance); - return new RowItemTypeDescriptor(td, instance); + return new RowItemTypeDescriptor(td); } } internal class RowItemTypeDescriptor : CustomTypeDescriptor { - public RowItemTypeDescriptor(ICustomTypeDescriptor parent, object instance) + public RowItemTypeDescriptor(ICustomTypeDescriptor parent) : base(parent) { } @@ -47,8 +47,8 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override PropertyDescriptorCollection GetProperties(Attribute[] attributes) { - PropertyDescriptorCollection props = base.GetProperties(attributes); - List allProperties = new List(); + var props = base.GetProperties(attributes); + var allProperties = new List(); TypeProviderHelper.AddDefaultProperties(allProperties,props); @@ -69,12 +69,6 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider prop = props.Find("Controls",true); allProperties.Add(prop); -// prop = props.Find("AlternateBackColor",true); -// allProperties.Add(prop); -// -// prop = props.Find("ChangeBackColorEveryNRow",true); -// allProperties.Add(prop); - return new PropertyDescriptorCollection(allProperties.ToArray()); } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/SectionItemTypeProvider.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/SectionItemTypeProvider.cs index a3521a9622..6e96413e35 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/SectionItemTypeProvider.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/SectionItemTypeProvider.cs @@ -26,7 +26,7 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { ICustomTypeDescriptor td = base.GetTypeDescriptor(objectType,instance); - return new SectionItemDescriptor(td, instance); + return new SectionItemDescriptor(td); } } @@ -35,7 +35,7 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider { - public SectionItemDescriptor(ICustomTypeDescriptor parent, object instance) + public SectionItemDescriptor(ICustomTypeDescriptor parent) : base(parent) { } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/TextItemTypeProvider.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/TextItemTypeProvider.cs index f00be1b76c..6bbab5ee08 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/TextItemTypeProvider.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/TypeProvider/TextItemTypeProvider.cs @@ -26,19 +26,17 @@ namespace ICSharpCode.Reporting.Addin.TypeProvider public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { ICustomTypeDescriptor td = base.GetTypeDescriptor(objectType,instance); - return new TextItemTypeDescriptor(td, instance); + return new TextItemTypeDescriptor(td); } } class TextItemTypeDescriptor : CustomTypeDescriptor { -// BaseTextItem instance; - public TextItemTypeDescriptor(ICustomTypeDescriptor parent, object instance) + public TextItemTypeDescriptor(ICustomTypeDescriptor parent) : base(parent) { -// instance = instance as BaseTextItem; } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/DesignerView.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/DesignerView.cs index 14704122d8..bfa4dad25d 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/DesignerView.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Views/DesignerView.cs @@ -212,7 +212,7 @@ namespace ICSharpCode.Reporting.Addin.Views abstractItem.Site.Name = abstractItem.Name; } } - UpdatePropertyPadSelection((ISelectionService)sender); + UpdatePropertyPadSelection(selectionService); } #endregion diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/MycroWriter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/MycroWriter.cs index 5db3ffea39..e6935aa763 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/MycroWriter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/MycroWriter.cs @@ -9,6 +9,7 @@ using System; using System.Collections; using System.ComponentModel; +using System.Globalization; using System.Reflection; using System.Xml; using System.Xml.Serialization; @@ -53,7 +54,7 @@ namespace ICSharpCode.Reporting.Addin.XML if (val is ICollection) { // PropertyInfo pinfo = t.GetProperty(info.Name); // Console.WriteLine("pinfo {0}",pinfo.Name); - if (info.Name.StartsWith("Contr")) { + if (info.Name.StartsWith("Contr",true,CultureInfo.CurrentCulture)) { writer.WriteStartElement("Items"); } else { writer.WriteStartElement(info.Name); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDefinitionParser.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDefinitionParser.cs index 209e6f5951..8042fc0041 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDefinitionParser.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDefinitionParser.cs @@ -20,6 +20,7 @@ using System; using System.Collections; using System.ComponentModel; using System.Diagnostics; +using System.Globalization; using System.Reflection; using System.Xml; using System.Xml.XPath; @@ -118,7 +119,7 @@ namespace ICSharpCode.Reporting.Addin.XML // Special case--we're going to assume that the child is a class instance // not associated with the parent object // Trace.Fail("Unsupported property: "+pname); - System.Console.WriteLine("Unsupported property: "+pname); + Console.WriteLine("Unsupported property: "+pname); continue; } @@ -134,8 +135,8 @@ namespace ICSharpCode.Reporting.Addin.XML { object propObject=pi.GetValue(parent, null); object obj=ProcessNode(grandChild, propObject); - System.Windows.Forms.Control parentControl = parent as System.Windows.Forms.Control; - System.Windows.Forms.Control childControl = obj as System.Windows.Forms.Control; + var parentControl = parent as System.Windows.Forms.Control; + var childControl = obj as System.Windows.Forms.Control; // we have the Items Section if ((parentControl != null) && (childControl != null)){ parentControl.Controls.Add(childControl); @@ -228,8 +229,7 @@ namespace ICSharpCode.Reporting.Addin.XML { if (tc.CanConvertFrom(typeof(string))) { - object val=tc.ConvertFromInvariantString(value); -// Console.WriteLine("\tRDP -> SetPropertyToString {0} - {1}",pi.Name,value.ToString()); + object val=tc.ConvertFromInvariantString(value); pi.SetValue(obj, val, null); } else if (pi.PropertyType == typeof(Type)) { pi.SetValue(obj, Type.GetType(value), null); @@ -237,9 +237,9 @@ namespace ICSharpCode.Reporting.Addin.XML } catch(Exception e) { - String s = String.Format("Property setter for {0} failed {1}\r\n",pi.Name, + var s = String.Format(CultureInfo.CurrentCulture,"Property setter for {0} failed {1}\r\n",pi.Name, e.Message); - System.Console.WriteLine("MycroParser : {0}",s); + Console.WriteLine("MycroParser : {0}",s); } } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDesignerWriter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDesignerWriter.cs index ff91334c1e..6b592f9717 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDesignerWriter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/XML/ReportDesignerWriter.cs @@ -7,6 +7,7 @@ * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; +using System.Globalization; namespace ICSharpCode.Reporting.Addin.XML { @@ -15,13 +16,11 @@ namespace ICSharpCode.Reporting.Addin.XML /// class ReportDesignerWriter:MycroWriter { - public ReportDesignerWriter() { - Console.WriteLine("ReportDesignerWriter"); - Console.WriteLine(); - } protected override string GetTypeName(Type t) { - if (t.BaseType != null && t.BaseType.Name.StartsWith("Base",StringComparison.InvariantCultureIgnoreCase)) { + if (t.BaseType != null && t.BaseType.Name.StartsWith("Base", StringComparison.OrdinalIgnoreCase)) { + + // return t.BaseType.Name; } return t.Name; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedTypeDescriptor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedTypeDescriptor.cs index 0611f8ac7a..64fd1dc6d4 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedTypeDescriptor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedTypeDescriptor.cs @@ -28,7 +28,7 @@ namespace ICSharpCode.Reporting.DataSource /// class ExtendedTypeDescriptor { - static Hashtable collections = new Hashtable(); + static readonly Hashtable collections = new Hashtable(); static bool IsAllowedProperty(string name) { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs index 5a3e5946ee..6095b99535 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Xml/MycroParser.cs @@ -21,6 +21,7 @@ using System.ComponentModel; using System.Diagnostics; using System.Collections; using System.Collections.Generic; +using System.Globalization; using System.Xml; using System.Reflection; @@ -223,7 +224,7 @@ namespace ICSharpCode.Reporting.Xml static void SetPropertyToString(object obj, PropertyInfo pi, string value) { // it's string, so use a type converter. - TypeConverter tc=TypeDescriptor.GetConverter(pi.PropertyType); + var tc=TypeDescriptor.GetConverter(pi.PropertyType); try { if (tc.CanConvertFrom(typeof(string))) @@ -236,9 +237,9 @@ namespace ICSharpCode.Reporting.Xml } catch(Exception e) { - String s = String.Format("Property setter for {0} failed {1}\r\n",pi.Name, + var s = String.Format(CultureInfo.CurrentCulture,"Property setter for {0} failed {1}\r\n",pi.Name, e.Message); - System.Console.WriteLine("MycroParser : {0}",s); + Console.WriteLine("MycroParser : {0}",s); } } From e5dfdae116345f9b6ef74db6f56f2a330d238ed1 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 27 Jun 2014 21:40:32 +0200 Subject: [PATCH 039/575] Fix ArgumentOutOfRangeException when double-clicking at text offset 0 in the DebuggeeExceptionForm. --- .../Debugger.AddIn/Service/DebuggeeExceptionForm.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/AddIns/Debugger/Debugger.AddIn/Service/DebuggeeExceptionForm.cs b/src/AddIns/Debugger/Debugger.AddIn/Service/DebuggeeExceptionForm.cs index 87aad31e06..719292fc05 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Service/DebuggeeExceptionForm.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Service/DebuggeeExceptionForm.cs @@ -104,9 +104,11 @@ namespace ICSharpCode.SharpDevelop.Services return; int start = index; // find start of current line - while (--start > 0 && fullText[start - 1] != '\n'); + while (start > 0 && fullText[start - 1] != '\n') + start--; // find end of current line - while (++index < fullText.Length && fullText[index] != '\n'); + while (index < fullText.Length && fullText[index] != '\n') + index++; string textLine = fullText.Substring(start, index - start); From 6b01d6f551981c54ac27be225f195669bd821078 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Fri, 27 Jun 2014 22:14:17 +0200 Subject: [PATCH 040/575] Fix #354: "+" icon in SharpTreeView is missing right border in 120DPI mode --- .../SharpTreeView/ICSharpCode.TreeView/Themes/Generic.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/Themes/Generic.xaml b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/Themes/Generic.xaml index 00b807af01..5bc9529235 100644 --- a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/Themes/Generic.xaml +++ b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/Themes/Generic.xaml @@ -237,7 +237,7 @@ Style="{StaticResource ExpandCollapseToggleStyle}" IsChecked="{Binding IsExpanded}" Visibility="Hidden" - Margin="0 0 6 0" + Margin="0 0 7 0" VerticalAlignment="Center" /> Date: Fri, 27 Jun 2014 22:03:17 +0200 Subject: [PATCH 041/575] Update to NRefactory commit 9d875d3 9d875d3 Bump NRefactory version number to 5.4. ebe00cc ConsistencyCheck: Ensure mscorlib is added to the compilation (MSBuild doesn't return it for .NET 2.0 projects like IKVM) d68853d Fix missing FreezeList() call to DefaultUnresolvedTypeParameter.Freeze(). a71bf19 Merge several bugfixes from SharpDevelop repository to NRefactory. 6856bd1 Remove System.Runtime hack -- type forwarding should handle this case. 17aefe2 Handle blob decoding errors in the type system instead of placing catch-all handlers in random spots. 877394a Mark DefaultAssemblyReference.Corlib as obsolete f70e546 Updated mcs. 7a2614d Fixed null check 48bdfd7 Merge pull request #405 from DavidKarlas/paramBug e6ce1e6 Fixing parameter code completion after using '>' e.g. if(a>b)Method( 6da0a7b Ignored failing unit test. 4d0b4a4 Fixed 'Bug 20110 - [Forms] Autocomplete doesn't work for the Placeholder property'. e5958a8 Fixed another completion bug case. 37368af Fixed completion bug. 67a1d11 Disabled uncategorized/notworking code issues. cf4fc70 Disabled notworking code issue. That's fixed in .NET 4.5 anyways and this code issue was very, very slow. 39bb34a Remap failing system.runtime references to mscorlib. Use case: Reference portable.NET assemblies from non portable .NET code. 44e1ff1 Fixed Bug 20125 - Fails to show abstract method when writing "override" c47e3d1 Fixed little bug in resolver. It incorrectly resolved internal types sometimes. 6c4c6d3 Fixed wrong end location of RedundantAttributeParenthesesIssue. Due to a drawing error in monodevelop that wasn't visible before. 2b69be0 Fixed bug in inconsistent naming tests. 3c9256f Merge pull request #404 from mono-soc-2013/MateY-IndentEngine 4733874 Fixed issue 389. c0aebb7 Fixed issue in ResolveAtLocation. On indexer 'this' the indexer should be resolved. 1c48cd2 Merge pull request #400 from DavidKarlas/parseExpression 242c141 Fixed parser bug when using ParseExpression 9d1cc09 Fixed parser bug. 13b0928 Catches exception for the IsBrowsable extension method. Fixed monodevelop bug https://bugzilla.xamarin.com/show_bug.cgi?id=18706. 3f78bdb Merge pull request #397 from khellang/patch-1 f6e7c08 Update README 0b743ac Merge pull request #396 from Therzok/master 36d6246 Optimize some Linq. 75640bf Merge pull request #395 from Therzok/master 5789870 [CodeIssues] Add simplified versions Math functions. 28d04ae Fixed potential blob reader exception. 22d8bc2 Fixed failing unit tests. e2dced7 Merge branch 'master' of github.com:icsharpcode/NRefactory 705590d Merge pull request #392 from DavidKarlas/paramInfoAnywhere 800296d Merge pull request #393 from DavidKarlas/failRevert 63a63f2 Correcting bad revert. Sometimes it was returing 0 instead of -1. 27590b5 Improved resolving of target method for ParameterInfo so it can be triggered in middle of parameter and not only after '(',',','[' or '<'. 7aef513 Merge pull request #391 from DavidKarlas/revertPull390 a8141ef Reverting Pull #390 2132edc Merge pull request #390 from DavidKarlas/firstParameter b6ccdb9 Always displaying first parameter discription in ParameterInfo tooltip --- .../AccessToDisposedClosureIssue.cs | 12 +- .../AccessToModifiedClosureIssue.cs | 12 +- .../VariableDeclaredInWideScopeIssue.cs | 2 +- .../InconsistentNamingIssue/NamingRule.cs | 16 +- .../ReplaceWithSingleCallToAverageIssue.cs | 123 + .../ReplaceWithSingleCallToMaxIssue.cs | 43 + .../ReplaceWithSingleCallToMinIssue.cs | 43 + .../ReplaceWithSingleCallToSumIssue.cs | 43 + .../RedundantAttributeParenthesesIssue.cs | 2 +- .../Uncategorized/AutoAsyncIssue.cs | 8 +- .../DisposeMethodInNonIDisposableTypeIssue.cs | 8 +- ...seLinqWhenItsVerboseAndInefficientIssue.cs | 8 +- .../DuplicatedLinqToListOrArrayIssue.cs | 8 +- .../Uncategorized/ExceptionRethrowIssue.cs | 10 +- .../ExplicitConversionInForEachIssue.cs | 8 +- .../IncorrectCallToObjectGetHashCodeIssue.cs | 10 +- .../RedundantBlockInDifferentBranchesIssue.cs | 10 +- ...tNotNullAttributeInNonNullableTypeIssue.cs | 8 +- ...esultOfAsyncCallShouldNotBeIgnoredIssue.cs | 10 +- ...onditionExpressionInIfelseBranchesIssue.cs | 8 +- ...edSizeSpecificationInArrayCreationIssue.cs | 10 +- .../UseOfMemberOfNullReference.cs | 8 +- ...pCode.NRefactory.CSharp.Refactoring.csproj | 4 + .../Completion/CSharpCompletionEngine.cs | 11 +- .../Completion/CSharpCompletionEngineBase.cs | 27 +- .../CSharpParameterCompletionEngine.cs | 147 +- .../IndentEngine/IndentState.cs | 23 +- .../TextWriterOutputFormatter.cs | 6 +- .../Parser/CSharpParser.cs | 2 + .../Parser/mcs/MonoSymbolTable.cs | 66 +- .../Parser/mcs/SourceMethodBuilder.cs | 7 +- .../Parser/mcs/anonymous.cs | 35 +- .../Parser/mcs/assembly.cs | 23 +- .../Parser/mcs/assign.cs | 40 +- .../Parser/mcs/async.cs | 37 +- .../Parser/mcs/attribute.cs | 61 +- .../Parser/mcs/cfold.cs | 4 +- .../Parser/mcs/class.cs | 130 +- .../Parser/mcs/codegen.cs | 44 +- .../Parser/mcs/complete.cs | 12 + .../Parser/mcs/constant.cs | 40 +- .../Parser/mcs/context.cs | 2 +- .../Parser/mcs/convert.cs | 89 +- .../Parser/mcs/cs-parser.cs | 10006 ++++++++-------- .../Parser/mcs/cs-parser.jay | 139 +- .../Parser/mcs/cs-tokenizer.cs | 46 +- .../Parser/mcs/delegate.cs | 8 +- .../Parser/mcs/doc.cs | 2 +- .../Parser/mcs/ecore.cs | 148 +- .../Parser/mcs/eval.cs | 81 +- .../Parser/mcs/expression.cs | 139 +- .../Parser/mcs/field.cs | 39 +- .../Parser/mcs/generic.cs | 84 +- .../Parser/mcs/iterators.cs | 18 +- .../Parser/mcs/membercache.cs | 14 +- .../Parser/mcs/method.cs | 130 +- .../Parser/mcs/nullable.cs | 38 +- .../Parser/mcs/parameter.cs | 73 +- .../Parser/mcs/property.cs | 128 +- .../Parser/mcs/report.cs | 4 +- .../Parser/mcs/settings.cs | 10 +- .../Parser/mcs/statement.cs | 651 +- .../Parser/mcs/typespec.cs | 11 + .../Refactoring/Script.cs | 2 +- .../Resolver/CSharpResolver.cs | 3 +- .../Resolver/ResolveAtLocation.cs | 4 +- .../CSharpProject.cs | 5 +- .../Xml/XmlReaderTest.cs | 9 +- .../CodeCompletion/ObjectInitializerTests.cs | 83 +- .../ParameterCompletionTests.cs | 54 +- .../CodeIssues/InconsistentNamingTests.cs | 14 +- ...eplaceWithSingleCallToAverageIssueTests.cs | 77 + .../ReplaceWithSingleCallToMaxIssueTests.cs | 77 + .../ReplaceWithSingleCallToMinIssueTests.cs | 77 + .../ReplaceWithSingleCallToSumIssueTests.cs | 77 + ...dSizeSpeicificationInArrayCreationTests.cs | 1 + .../CSharp/Parser/Bugs/ParserBugTests.cs | 19 + .../TypeMembers/PropertyDeclarationTests.cs | 2 +- .../ICSharpCode.NRefactory.Tests.csproj | 4 + .../IndentationTests/BlockTest.cs | 181 +- .../Completion/CompletionExtensionMethods.cs | 5 +- .../Properties/GlobalAssemblyInfo.cs | 4 +- .../DefaultAssemblyReference.cs | 2 + .../DefaultUnresolvedTypeParameter.cs | 1 + .../Implementation/ResolvedAttributeBlob.cs | 28 +- .../Packages/ICSharpCode.NRefactory.nuspec | 6 +- src/Libraries/NRefactory/README | 1 - 87 files changed, 8124 insertions(+), 5601 deletions(-) create mode 100644 src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAverageIssue.cs create mode 100644 src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMaxIssue.cs create mode 100644 src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMinIssue.cs create mode 100644 src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSumIssue.cs create mode 100644 src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ReplaceWithSingleCallToAverageIssueTests.cs create mode 100644 src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ReplaceWithSingleCallToMaxIssueTests.cs create mode 100644 src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ReplaceWithSingleCallToMinIssueTests.cs create mode 100644 src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ReplaceWithSingleCallToSumIssueTests.cs diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToDisposedClosureIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToDisposedClosureIssue.cs index bc48a268ad..6af6c855fb 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToDisposedClosureIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToDisposedClosureIssue.cs @@ -32,12 +32,12 @@ using ICSharpCode.NRefactory.Refactoring; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription ("Access to disposed closure variable", - Description = "Access to closure variable from anonymous method when the variable is" + - " disposed externally", - Category = IssueCategories.CodeQualityIssues, - Severity = Severity.Warning, - AnalysisDisableKeyword = "AccessToDisposedClosure")] +// [IssueDescription ("Access to disposed closure variable", +// Description = "Access to closure variable from anonymous method when the variable is" + +// " disposed externally", +// Category = IssueCategories.CodeQualityIssues, +// Severity = Severity.Warning, +// AnalysisDisableKeyword = "AccessToDisposedClosure")] public class AccessToDisposedClosureIssue : AccessToClosureIssue { public AccessToDisposedClosureIssue () diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToModifiedClosureIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToModifiedClosureIssue.cs index 1f6b0df694..94f6f3ad87 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToModifiedClosureIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToModifiedClosureIssue.cs @@ -31,12 +31,12 @@ using ICSharpCode.NRefactory.Refactoring; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription("Access to modified closure variable", - Description = "Access to closure variable from anonymous method when the variable is modified " + - "externally", - Category = IssueCategories.CodeQualityIssues, - Severity = Severity.Warning, - AnalysisDisableKeyword = "AccessToModifiedClosure")] +// [IssueDescription("Access to modified closure variable", +// Description = "Access to closure variable from anonymous method when the variable is modified " + +// "externally", +// Category = IssueCategories.CodeQualityIssues, +// Severity = Severity.Warning, +// AnalysisDisableKeyword = "AccessToModifiedClosure")] public class AccessToModifiedClosureIssue : AccessToClosureIssue { public AccessToModifiedClosureIssue () diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/VariableDeclaredInWideScopeIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/VariableDeclaredInWideScopeIssue.cs index 563a0d49bd..ea8c0c2e61 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/VariableDeclaredInWideScopeIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/VariableDeclaredInWideScopeIssue.cs @@ -134,7 +134,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring } // Restrict to locations outside of blacklisted node types - var firstBlackListedNode = path.Where(node => moveTargetBlacklist.Contains(node.GetType())).FirstOrDefault(); + var firstBlackListedNode = path.FirstOrDefault(node => moveTargetBlacklist.Contains(node.GetType())); if (firstBlackListedNode != null) { path = GetPath(rootNode, firstBlackListedNode.Parent); anchorNode = firstBlackListedNode; diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingRule.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingRule.cs index 5b087bf7b6..6deb6422ee 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingRule.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingRule.cs @@ -376,7 +376,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring break; case NamingStyle.CamelCase: - if (id.Length > 0 && char.IsUpper(id [0])) { + if (id.Length > 0 && !char.IsLower(id [0])) { errorMessage = string.Format(ctx.TranslateString("'{0}' should start with a lower case letter. (Rule '{1}')"), name, Name); } else if (!CheckUnderscore(id, UnderscoreHandling.Forbid)) { errorMessage = string.Format(ctx.TranslateString("'{0}' should not separate words with an underscore. (Rule '{1}')"), name, Name); @@ -387,7 +387,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring suggestedNames.Add(CamelCaseIdentifier(id)); break; case NamingStyle.CamelCaseWithLowerLetterUnderscore: - if (id.Length > 0 && char.IsUpper(id [0])) { + if (id.Length > 0 && !char.IsLower(id [0])) { errorMessage = string.Format(ctx.TranslateString("'{0}' should start with a lower case letter. (Rule '{1}')"), name, Name); } else if (!CheckUnderscore(id, UnderscoreHandling.AllowWithLowerStartingLetter)) { errorMessage = string.Format(ctx.TranslateString("after '_' a lower letter should follow. (Rule '{0}')"), Name); @@ -398,7 +398,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring suggestedNames.Add(CamelCaseWithLowerLetterUnderscore(id)); break; case NamingStyle.CamelCaseWithUpperLetterUnderscore: - if (id.Length > 0 && char.IsUpper(id [0])) { + if (id.Length > 0 && !char.IsLower(id [0])) { errorMessage = string.Format(ctx.TranslateString("'{0}' should start with a lower case letter. (Rule '{1}')"), name, Name); } else if (!CheckUnderscore(id, UnderscoreHandling.AllowWithUpperStartingLetter)) { errorMessage = string.Format(ctx.TranslateString("after '_' an upper letter should follow. (Rule '{0}')"), Name); @@ -410,7 +410,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring break; case NamingStyle.PascalCase: - if (id.Length > 0 && char.IsLower(id [0])) { + if (id.Length > 0 && !char.IsUpper(id [0])) { errorMessage = string.Format(ctx.TranslateString("'{0}' should start with an upper case letter. (Rule '{1}')"), name, Name); } else if (!CheckUnderscore(id, UnderscoreHandling.Forbid)) { errorMessage = string.Format(ctx.TranslateString("'{0}' should not separate words with an underscore. (Rule '{1}')"), name, Name); @@ -421,7 +421,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring suggestedNames.Add(PascalCaseIdentifier(id)); break; case NamingStyle.PascalCaseWithLowerLetterUnderscore: - if (id.Length > 0 && char.IsLower(id [0])) { + if (id.Length > 0 && !char.IsUpper(id [0])) { errorMessage = string.Format(ctx.TranslateString("'{0}' should start with an upper case letter. (Rule '{1}')"), name, Name); } else if (!CheckUnderscore(id, UnderscoreHandling.AllowWithLowerStartingLetter)) { errorMessage = string.Format(ctx.TranslateString("after '_' a lower letter should follow. (Rule '{0}')"), Name); @@ -432,7 +432,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring suggestedNames.Add(PascalCaseWithLowerLetterUnderscore(id)); break; case NamingStyle.PascalCaseWithUpperLetterUnderscore: - if (id.Length > 0 && char.IsLower(id [0])) { + if (id.Length > 0 && !char.IsUpper(id [0])) { errorMessage = string.Format(ctx.TranslateString("'{0}' should start with an upper case letter. (Rule '{1}')"), name, Name); } else if (!CheckUnderscore(id, UnderscoreHandling.AllowWithUpperStartingLetter)) { errorMessage = string.Format(ctx.TranslateString("after '_' an upper letter should follow. (Rule '{0}')"), Name); @@ -443,7 +443,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring suggestedNames.Add(PascalCaseWithUpperLetterUnderscore(id)); break; case NamingStyle.FirstUpper: - if (id.Length > 0 && char.IsLower(id [0])) { + if (id.Length > 0 && !char.IsUpper(id [0])) { errorMessage = string.Format(ctx.TranslateString("'{0}' should start with an upper case letter. (Rule '{1}')"), name, Name); } else if (id.Take(1).Any(ch => char.IsLetter(ch) && char.IsUpper(ch))) { errorMessage = string.Format(ctx.TranslateString("'{0}' contains an upper case letter after the first. (Rule '{1}')"), name, Name); @@ -525,6 +525,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring bool first = true; for (int i = 0; i < id.Length; i++) { char ch = id[i]; + if (i == 0 && ch == '_') + continue; if (first && char.IsLetter(ch)) { sb.Append(firstCharFunc(ch)); firstCharFunc = followingCharFunc; diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAverageIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAverageIssue.cs new file mode 100644 index 0000000000..20eae5fa0e --- /dev/null +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAverageIssue.cs @@ -0,0 +1,123 @@ +// +// ReplaceWithSingleCallToAverageIssue.cs +// +// Author: +// Marius Ungureanu +// +// Copyright (c) 2014 Xamarin +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +using System.Linq; +using ICSharpCode.NRefactory.Semantics; +using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PatternMatching; +using ICSharpCode.NRefactory.Refactoring; + +namespace ICSharpCode.NRefactory.CSharp.Refactoring +{ + [IssueDescription("Replace with single call to Average(...)", + Description = "Replace with single call to Average(...)", + Category = IssueCategories.PracticesAndImprovements, + Severity = Severity.Suggestion, + AnalysisDisableKeyword = "ReplaceWithSingleCallToAverage")] + public class ReplaceWithSingleCallToAverageIssue : GatherVisitorCodeIssueProvider + { + static readonly AstNode pattern = + new InvocationExpression ( + new MemberReferenceExpression ( + new NamedNode ("selectInvoke", + new InvocationExpression ( + new MemberReferenceExpression (new AnyNode ("target"), "Select"), + new AnyNode ())), + Pattern.AnyString)); + + protected override IGatherVisitor CreateVisitor(BaseRefactoringContext context) + { + return new GatherVisitor(context, "Average"); + } + + internal class GatherVisitor : GatherVisitorBase where T : GatherVisitorCodeIssueProvider + { + readonly string member; + + public GatherVisitor (BaseRefactoringContext ctx, string member) : base (ctx) + { + this.member = member; + } + + public override void VisitInvocationExpression (InvocationExpression invocationExpression) + { + base.VisitInvocationExpression (invocationExpression); + + var match = pattern.Match (invocationExpression); + if (!match.Success) + return; + + var averageResolve = ctx.Resolve (invocationExpression) as InvocationResolveResult; + if (averageResolve == null || !HasPredicateVersion(averageResolve.Member)) + return; + var selectInvoke = match.Get ("selectInvoke").Single (); + var selectResolve = ctx.Resolve (selectInvoke) as InvocationResolveResult; + if (selectResolve == null || selectResolve.Member.Name != "Select" || !IsQueryExtensionClass(selectResolve.Member.DeclaringTypeDefinition)) + return; + if (selectResolve.Member.Parameters.Count != 2) + return; + var predResolve = selectResolve.Member.Parameters [1]; + if (predResolve.Type.TypeParameterCount != 2) + return; + + AddIssue(new CodeIssue( + invocationExpression, string.Format(ctx.TranslateString("Redundant Select() call with predicate followed by {0}()"), averageResolve.Member.Name), + new CodeAction ( + string.Format(ctx.TranslateString("Replace with single call to '{0}'"), averageResolve.Member.Name), + script => { + var arg = selectInvoke.Arguments.Single ().Clone (); + var target = match.Get ("target").Single ().Clone (); + script.Replace (invocationExpression, new InvocationExpression (new MemberReferenceExpression (target, averageResolve.Member.Name), arg)); + }, + invocationExpression + ) + )); + } + + static bool IsQueryExtensionClass(ITypeDefinition typeDef) + { + if (typeDef == null || typeDef.Namespace != "System.Linq") + return false; + switch (typeDef.Name) { + case "Enumerable": + case "ParallelEnumerable": + case "Queryable": + return true; + default: + return false; + } + } + + bool HasPredicateVersion(IParameterizedMember member) + { + if (!IsQueryExtensionClass(member.DeclaringTypeDefinition)) + return false; + return member.Name == this.member; + } + } + } +} + + diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMaxIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMaxIssue.cs new file mode 100644 index 0000000000..d8597f0bf6 --- /dev/null +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMaxIssue.cs @@ -0,0 +1,43 @@ +// +// ReplaceWithSingleCallToMaxIssue.cs +// +// Author: +// Marius Ungureanu +// +// Copyright (c) 2014 Xamarin +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +using ICSharpCode.NRefactory.Refactoring; + +namespace ICSharpCode.NRefactory.CSharp.Refactoring +{ + [IssueDescription("Replace with single call to Max(...)", + Description = "Replace with single call to Max(...)", + Category = IssueCategories.PracticesAndImprovements, + Severity = Severity.Suggestion, + AnalysisDisableKeyword = "ReplaceWithSingleCallToMax")] + public class ReplaceWithSingleCallToMaxIssue : GatherVisitorCodeIssueProvider + { + protected override IGatherVisitor CreateVisitor(BaseRefactoringContext context) + { + return new ReplaceWithSingleCallToAverageIssue.GatherVisitor(context, "Max"); + } + } +} + diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMinIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMinIssue.cs new file mode 100644 index 0000000000..2b63149e84 --- /dev/null +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMinIssue.cs @@ -0,0 +1,43 @@ +// +// ReplaceWithSingleCallToMinIssue.cs +// +// Author: +// Marius Ungureanu +// +// Copyright (c) 2014 Xamarin +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +using ICSharpCode.NRefactory.Refactoring; + +namespace ICSharpCode.NRefactory.CSharp.Refactoring +{ + [IssueDescription("Replace with single call to Min(...)", + Description = "Replace with single call to Min(...)", + Category = IssueCategories.PracticesAndImprovements, + Severity = Severity.Suggestion, + AnalysisDisableKeyword = "ReplaceWithSingleCallToMin")] + public class ReplaceWithSingleCallToMinIssue : GatherVisitorCodeIssueProvider + { + protected override IGatherVisitor CreateVisitor(BaseRefactoringContext context) + { + return new ReplaceWithSingleCallToAverageIssue.GatherVisitor(context, "Min"); + } + } +} + diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSumIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSumIssue.cs new file mode 100644 index 0000000000..45f1131371 --- /dev/null +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSumIssue.cs @@ -0,0 +1,43 @@ +// +// ReplaceWithSingleCallToSumIssue.cs +// +// Author: +// Marius Ungureanu +// +// Copyright (c) 2014 Xamarin +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +using ICSharpCode.NRefactory.Refactoring; + +namespace ICSharpCode.NRefactory.CSharp.Refactoring +{ + [IssueDescription("Replace with single call to Sum(...)", + Description = "Replace with single call to Sum(...)", + Category = IssueCategories.PracticesAndImprovements, + Severity = Severity.Suggestion, + AnalysisDisableKeyword = "ReplaceWithSingleCallToSum")] + public class ReplaceWithSingleCallToSumIssue : GatherVisitorCodeIssueProvider + { + protected override IGatherVisitor CreateVisitor(BaseRefactoringContext context) + { + return new ReplaceWithSingleCallToAverageIssue.GatherVisitor(context, "Sum"); + } + } +} + diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAttributeParenthesesIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAttributeParenthesesIssue.cs index 74884bf0a6..deb6e68944 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAttributeParenthesesIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAttributeParenthesesIssue.cs @@ -55,7 +55,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring if (attribute.Arguments.Count > 0 || !attribute.HasArgumentList) return; - AddIssue(new CodeIssue(attribute.LParToken.StartLocation, attribute.RParToken.StartLocation, ctx.TranslateString("Parentheses are redundant if attribute has no arguments"), ctx.TranslateString("Remove '()'"), script => + AddIssue(new CodeIssue(attribute.LParToken.StartLocation, attribute.RParToken.EndLocation, ctx.TranslateString("Parentheses are redundant if attribute has no arguments"), ctx.TranslateString("Remove '()'"), script => script.Replace(attribute, new Attribute { Type = attribute.Type.Clone() })) { IssueMarker = IssueMarker.GrayOut }); } } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/AutoAsyncIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/AutoAsyncIssue.cs index 426537fc50..c7b91edf2a 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/AutoAsyncIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/AutoAsyncIssue.cs @@ -39,10 +39,10 @@ using ICSharpCode.NRefactory.Refactoring; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription("Old-style asynchronous function can be converted to C# 5 async", - Description = "Detects usage of old-style TaskCompletionSource/ContinueWith and suggests using async/await instead", - Category = IssueCategories.Opportunities, - Severity = Severity.Hint)] +// [IssueDescription("Old-style asynchronous function can be converted to C# 5 async", +// Description = "Detects usage of old-style TaskCompletionSource/ContinueWith and suggests using async/await instead", +// Category = IssueCategories.Opportunities, +// Severity = Severity.Hint)] public class AutoAsyncIssue : GatherVisitorCodeIssueProvider { static readonly ReturnStatement ReturnTaskCompletionSourcePattern = new ReturnStatement { diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DisposeMethodInNonIDisposableTypeIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DisposeMethodInNonIDisposableTypeIssue.cs index ca9690be50..69dd076408 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DisposeMethodInNonIDisposableTypeIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DisposeMethodInNonIDisposableTypeIssue.cs @@ -32,10 +32,10 @@ using ICSharpCode.NRefactory.CSharp.Resolver; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription("Type does not implement IDisposable despite having a Dispose method", - Description="This type declares a method named Dispose, but it does not implement the System.IDisposable interface", - Category=IssueCategories.CodeQualityIssues, - Severity=Severity.Warning)] +// [IssueDescription("Type does not implement IDisposable despite having a Dispose method", +// Description="This type declares a method named Dispose, but it does not implement the System.IDisposable interface", +// Category=IssueCategories.CodeQualityIssues, +// Severity=Severity.Warning)] public class DisposeMethodInNonIDisposableTypeIssue : GatherVisitorCodeIssueProvider { protected override IGatherVisitor CreateVisitor(BaseRefactoringContext context) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DontUseLinqWhenItsVerboseAndInefficientIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DontUseLinqWhenItsVerboseAndInefficientIssue.cs index 42e15acee9..5c53543771 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DontUseLinqWhenItsVerboseAndInefficientIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DontUseLinqWhenItsVerboseAndInefficientIssue.cs @@ -32,10 +32,10 @@ using ICSharpCode.NRefactory.CSharp.Resolver; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription("Use of Linq methods when there's a better alternative", - Description="Detects usage of Linq when there's a simpler and faster alternative", - Category=IssueCategories.CodeQualityIssues, - Severity=Severity.Warning)] +// [IssueDescription("Use of Linq methods when there's a better alternative", +// Description="Detects usage of Linq when there's a simpler and faster alternative", +// Category=IssueCategories.CodeQualityIssues, +// Severity=Severity.Warning)] public class DontUseLinqWhenItsVerboseAndInefficientIssue : GatherVisitorCodeIssueProvider { class LinqMethod { diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DuplicatedLinqToListOrArrayIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DuplicatedLinqToListOrArrayIssue.cs index 172f8dfa0c..5077004309 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DuplicatedLinqToListOrArrayIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DuplicatedLinqToListOrArrayIssue.cs @@ -36,10 +36,10 @@ using System.Linq; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription ("Duplicated ToList() or ToArray() call", - Description = "Duplicated call to ToList() or ToArray()", - Category = IssueCategories.RedundanciesInCode, - Severity = Severity.Warning)] +// [IssueDescription ("Duplicated ToList() or ToArray() call", +// Description = "Duplicated call to ToList() or ToArray()", +// Category = IssueCategories.RedundanciesInCode, +// Severity = Severity.Warning)] public class DuplicatedLinqToListOrArrayIssue : GatherVisitorCodeIssueProvider { const string MemberTarget = "target"; diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ExceptionRethrowIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ExceptionRethrowIssue.cs index bc366080c6..7f0e69be9c 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ExceptionRethrowIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ExceptionRethrowIssue.cs @@ -31,11 +31,11 @@ using ICSharpCode.NRefactory.Refactoring; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription("A throw statement throws the caught exception by passing it explicitly", - Description = "Finds throws that throws the caught exception and therefore should be empty.", - Category = IssueCategories.CodeQualityIssues, - Severity = Severity.Warning, - AnalysisDisableKeyword = "PossibleIntendedRethrow")] +// [IssueDescription("A throw statement throws the caught exception by passing it explicitly", +// Description = "Finds throws that throws the caught exception and therefore should be empty.", +// Category = IssueCategories.CodeQualityIssues, +// Severity = Severity.Warning, +// AnalysisDisableKeyword = "PossibleIntendedRethrow")] public class ExceptionRethrowIssue : GatherVisitorCodeIssueProvider { protected override IGatherVisitor CreateVisitor(BaseRefactoringContext context) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ExplicitConversionInForEachIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ExplicitConversionInForEachIssue.cs index 50aff65402..9e8f449082 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ExplicitConversionInForEachIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ExplicitConversionInForEachIssue.cs @@ -25,10 +25,10 @@ using ICSharpCode.NRefactory.Refactoring; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription("Incorrect element type in foreach over generic collection", - Description= "Detects hidden explicit conversions in foreach loops.", - Category = IssueCategories.CodeQualityIssues, - Severity = Severity.Warning)] +// [IssueDescription("Incorrect element type in foreach over generic collection", +// Description= "Detects hidden explicit conversions in foreach loops.", +// Category = IssueCategories.CodeQualityIssues, +// Severity = Severity.Warning)] public class ExplicitConversionInForEachIssue : GatherVisitorCodeIssueProvider { protected override IGatherVisitor CreateVisitor(BaseRefactoringContext context) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/IncorrectCallToObjectGetHashCodeIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/IncorrectCallToObjectGetHashCodeIssue.cs index f56a3b935a..e298987985 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/IncorrectCallToObjectGetHashCodeIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/IncorrectCallToObjectGetHashCodeIssue.cs @@ -30,11 +30,11 @@ using ICSharpCode.NRefactory.Refactoring; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription("Call resolves to Object.GetHashCode, which is reference based", - Description = "Finds calls to Object.GetHashCode inside overridden GetHashCode.", - Category = IssueCategories.CodeQualityIssues, - Severity = Severity.Warning, - AnalysisDisableKeyword = "BaseObjectGetHashCodeCallInGetHashCode")] +// [IssueDescription("Call resolves to Object.GetHashCode, which is reference based", +// Description = "Finds calls to Object.GetHashCode inside overridden GetHashCode.", +// Category = IssueCategories.CodeQualityIssues, +// Severity = Severity.Warning, +// AnalysisDisableKeyword = "BaseObjectGetHashCodeCallInGetHashCode")] public class IncorrectCallToObjectGetHashCodeIssue : GatherVisitorCodeIssueProvider { protected override IGatherVisitor CreateVisitor(BaseRefactoringContext context) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/RedundantBlockInDifferentBranchesIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/RedundantBlockInDifferentBranchesIssue.cs index e1e3f0fb06..caa9992d11 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/RedundantBlockInDifferentBranchesIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/RedundantBlockInDifferentBranchesIssue.cs @@ -29,11 +29,11 @@ using ICSharpCode.NRefactory.Refactoring; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription("RedundantBlockInDifferentBranches", - Description = "Blocks in if/else can be simplified to any of the branches if they have the same block.", - Category = IssueCategories.RedundanciesInCode, - Severity = Severity.Hint, - AnalysisDisableKeyword = "RedundantBlockInDifferentBranches")] +// [IssueDescription("RedundantBlockInDifferentBranches", +// Description = "Blocks in if/else can be simplified to any of the branches if they have the same block.", +// Category = IssueCategories.RedundanciesInCode, +// Severity = Severity.Hint, +// AnalysisDisableKeyword = "RedundantBlockInDifferentBranches")] public class RedundantBlockInDifferentBranchesIssue : GatherVisitorCodeIssueProvider { diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/RedundantNotNullAttributeInNonNullableTypeIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/RedundantNotNullAttributeInNonNullableTypeIssue.cs index 33d0a9b63f..56653b847e 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/RedundantNotNullAttributeInNonNullableTypeIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/RedundantNotNullAttributeInNonNullableTypeIssue.cs @@ -33,10 +33,10 @@ using ICSharpCode.NRefactory.TypeSystem; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription("Use of NotNullAttribute in non-nullable type is redundant.", - Description = "Detects unnecessary usages of the NotNullAttribute.", - Category = IssueCategories.RedundanciesInDeclarations, - Severity = Severity.Warning)] +// [IssueDescription("Use of NotNullAttribute in non-nullable type is redundant.", +// Description = "Detects unnecessary usages of the NotNullAttribute.", +// Category = IssueCategories.RedundanciesInDeclarations, +// Severity = Severity.Warning)] public class RedundantNotNullAttributeInNonNullableTypeIssue : GatherVisitorCodeIssueProvider { protected override IGatherVisitor CreateVisitor(BaseRefactoringContext context) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ResultOfAsyncCallShouldNotBeIgnoredIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ResultOfAsyncCallShouldNotBeIgnoredIssue.cs index 957178e806..97b678e326 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ResultOfAsyncCallShouldNotBeIgnoredIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ResultOfAsyncCallShouldNotBeIgnoredIssue.cs @@ -24,11 +24,11 @@ using ICSharpCode.NRefactory.Refactoring; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription("Result of async call is ignored", - Description = "Warns when the task returned by an async call is ignored, which causes exceptions" + - " thrown by the call to be silently ignored.", - Category = IssueCategories.CodeQualityIssues, - Severity = Severity.Warning)] +// [IssueDescription("Result of async call is ignored", +// Description = "Warns when the task returned by an async call is ignored, which causes exceptions" + +// " thrown by the call to be silently ignored.", +// Category = IssueCategories.CodeQualityIssues, +// Severity = Severity.Warning)] public class ResultOfAsyncCallShouldNotBeIgnoredIssue : GatherVisitorCodeIssueProvider { protected override IGatherVisitor CreateVisitor(BaseRefactoringContext context) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/SameGuardConditionExpressionInIfelseBranchesIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/SameGuardConditionExpressionInIfelseBranchesIssue.cs index 85192da445..5b8f77193d 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/SameGuardConditionExpressionInIfelseBranchesIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/SameGuardConditionExpressionInIfelseBranchesIssue.cs @@ -30,10 +30,10 @@ using ICSharpCode.NRefactory.Refactoring; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription("Same guard condition expression in different if else branch", - Description = "A warning should be given for the case: if (condition) {…} else if (condition) {…}.", - Category = IssueCategories.Notifications, - Severity = Severity.Warning)] +// [IssueDescription("Same guard condition expression in different if else branch", +// Description = "A warning should be given for the case: if (condition) {…} else if (condition) {…}.", +// Category = IssueCategories.Notifications, +// Severity = Severity.Warning)] public class SameGuardConditionExpressionInIfelseBranchesIssue : GatherVisitorCodeIssueProvider { protected override IGatherVisitor CreateVisitor(BaseRefactoringContext context) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UnmatchedSizeSpecificationInArrayCreationIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UnmatchedSizeSpecificationInArrayCreationIssue.cs index c041cede50..3a42ea4e75 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UnmatchedSizeSpecificationInArrayCreationIssue.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UnmatchedSizeSpecificationInArrayCreationIssue.cs @@ -33,11 +33,11 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring /// /// When array initializer has the different number of elements as specified in size creation, it is an error. /// - [IssueDescription("Correct size specification in array creation", - Description= "When array initializer has the different number of elements as specified in size creation, it is an error.", - Category = IssueCategories.CompilerErrors, - Severity = Severity.Error, - AnalysisDisableKeyword = "UnmatchedSizeSpecificationInArrayCreation")] +// [IssueDescription("Correct size specification in array creation", +// Description= "When array initializer has the different number of elements as specified in size creation, it is an error.", +// Category = IssueCategories.CompilerErrors, +// Severity = Severity.Error, +// AnalysisDisableKeyword = "UnmatchedSizeSpecificationInArrayCreation")] public class UnmatchedSizeSpecificationInArrayCreationIssue : GatherVisitorCodeIssueProvider { protected override IGatherVisitor CreateVisitor(BaseRefactoringContext context) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UseOfMemberOfNullReference.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UseOfMemberOfNullReference.cs index ab941fa33a..905f761268 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UseOfMemberOfNullReference.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UseOfMemberOfNullReference.cs @@ -34,10 +34,10 @@ using ICSharpCode.NRefactory.CSharp.Analysis; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription("Use of (non-extension method) member of null value will cause a NullReferenceException", - Description = "Detects when a member of a null value is used", - Category = IssueCategories.CodeQualityIssues, - Severity = Severity.Warning)] +// [IssueDescription("Use of (non-extension method) member of null value will cause a NullReferenceException", +// Description = "Detects when a member of a null value is used", +// Category = IssueCategories.CodeQualityIssues, +// Severity = Severity.Warning)] public class UseOfMemberOfNullReference : GatherVisitorCodeIssueProvider { static readonly ISet ProblematicNullStates = new HashSet { diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/ICSharpCode.NRefactory.CSharp.Refactoring.csproj b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/ICSharpCode.NRefactory.CSharp.Refactoring.csproj index 71d8f5599a..02e165f0c0 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/ICSharpCode.NRefactory.CSharp.Refactoring.csproj +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/ICSharpCode.NRefactory.CSharp.Refactoring.csproj @@ -427,6 +427,10 @@ + + + + diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index 235ee5501b..613d13262c 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -349,6 +349,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return contextList.Result; } var lookup = new MemberLookup(ctx.CurrentTypeDefinition, Compilation.MainAssembly); + var list = typeof(System.Collections.IList).ToTypeReference().Resolve(Compilation); + var list1 = typeof(System.Collections.Generic.IList<>).ToTypeReference().Resolve(Compilation); bool isProtectedAllowed = ctx.CurrentTypeDefinition != null && initializerType.GetDefinition() != null ? ctx.CurrentTypeDefinition.IsDerivedFrom(initializerType.GetDefinition()) : false; @@ -364,7 +366,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } foreach (IProperty m in initializerType.GetMembers (m => m.SymbolKind == SymbolKind.Property)) { - if (m.CanSet && lookup.IsAccessible(m.Setter, isProtectedAllowed)) { + if (m.CanSet && lookup.IsAccessible(m.Setter, isProtectedAllowed) || + m.CanGet && lookup.IsAccessible(m.Getter, isProtectedAllowed) && m.ReturnType.GetDefinition() != null && + (m.ReturnType.GetDefinition().IsDerivedFrom(list.GetDefinition()) || m.ReturnType.GetDefinition().IsDerivedFrom(list1.GetDefinition()))) { var data = contextList.AddMember(m); if (data != null) data.DisplayFlags |= DisplayFlags.NamedArgument; @@ -379,10 +383,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // case 1) // check if the object is a list, if not only provide object initalizers - var list = typeof(System.Collections.IList).ToTypeReference().Resolve(Compilation); if (initializerType.Kind != TypeKind.Array && list != null) { var def = initializerType.GetDefinition(); - if (def != null && !def.IsDerivedFrom(list.GetDefinition())) + if (def != null && !def.IsDerivedFrom(list.GetDefinition()) && !def.IsDerivedFrom(list1.GetDefinition())) return contextList.Result; } @@ -2354,7 +2357,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return null; } // check for valid constructors - if (t.GetConstructors().Count() > 0) { + if (t.GetConstructors().Any()) { bool isProtectedAllowed = currentType != null ? currentType.Resolve(ctx).GetDefinition().IsDerivedFrom(t.GetDefinition()) : false; if (!t.GetConstructors().Any(m => lookup.IsAccessible(m, isProtectedAllowed))) { diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs index 14a8dfdb42..c61f77bc5a 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs @@ -340,12 +340,27 @@ namespace ICSharpCode.NRefactory.CSharp.Completion this.text = text; } - public void Parse(Action act = null) + /// + /// Parsing all text and calling act delegate on almost every character. + /// Skipping begining of comments, begining of verbatim strings and escaped characters. + /// + /// Return true to abort parsing. Integer argument represent offset in text. + /// True if aborted. + public bool Parse(Func act = null) { - Parse(0, text.Length, act); + return Parse(0, text.Length, act); } - public void Parse(int start, int length, Action act = null) + + /// + /// Parsing text from start to start+length and calling act delegate on almost every character. + /// Skipping begining of comments, begining of verbatim strings and escaped characters. + /// + /// Start offset. + /// Lenght to parse. + /// Return true to abort parsing. Integer argument represent offset in text. + /// True if aborted. + public bool Parse(int start, int length, Func act = null) { for (int i = start; i < length; i++) { char ch = text [i]; @@ -416,9 +431,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion break; } if (act != null) - act(ch); + if (act (ch, i)) + return true; IsFistNonWs &= ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r'; } + return false; } } @@ -677,7 +694,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion while (o >= "try".Length) { char ch = memberText [o]; if (!char.IsWhiteSpace (ch)) { - if (ch == 'y' && memberText [o - 1] == 'r' && memberText [o - 2] == 't') { + if (ch == 'y' && memberText [o - 1] == 'r' && memberText [o - 2] == 't' && (o - 3 < 0 || !char.IsLetterOrDigit(memberText [o - 3]))) { wrapper.Append ("} catch {}"); didAppendCatch = true; } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs index b86c9bb489..e5919834e1 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs @@ -57,7 +57,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion if (currentMember == null && currentType == null) { return null; } - baseUnit = ParseStub("x] = a[1"); + baseUnit = ParseStub("x]"); //var memberLocation = currentMember != null ? currentMember.Region.Begin : currentType.Region.Begin; var mref = baseUnit.GetNodeAt(location, n => n is IndexerExpression); @@ -183,20 +183,93 @@ namespace ICSharpCode.NRefactory.CSharp.Completion public IParameterDataProvider GetParameterDataProvider(int offset, char completionChar) { - if (offset <= 0) { + //Ignoring completionChar == '\0' because it usually means moving with arrow keys, tab or enter + //we don't want to trigger on those events but it probably should be handled somewhere else + //since our job is to resolve method and not to decide when to display tooltip or not + if (offset <= 0 || completionChar == '\0') { return null; } - if (completionChar != '(' && completionChar != '<' && completionChar != '[' && completionChar != ',') { - return null; + SetOffset (offset); + int startOffset; + string text; + if (currentMember == null && currentType == null) { + //In case of attributes parse all file + startOffset = 0; + text = document.Text; + } else { + var memberText = GetMemberTextToCaret (); + text = memberText.Item1; + startOffset = document.GetOffset (memberText.Item2); } - - SetOffset(offset); - if (IsInsideCommentStringOrDirective()) { + + var parenStack = new Stack (); + var chevronStack = new Stack (); + var squareStack = new Stack (); + var bracketStack = new Stack (); + + var lex = new MiniLexer (text); + bool failed = lex.Parse ((ch, off) => { + if (lex.IsInString || lex.IsInChar || lex.IsInVerbatimString || lex.IsInSingleComment || lex.IsInMultiLineComment || lex.IsInPreprocessorDirective) + return false; + switch (ch) { + case '(': + parenStack.Push (startOffset + off); + break; + case ')': + if (parenStack.Count == 0) { + return true; + } + parenStack.Pop (); + break; + case '<': + chevronStack.Push (startOffset + off); + break; + case '>': + //Don't abort if we don't have macthing '<' for '>' it could be if (i > 0) Foo($ + if (chevronStack.Count == 0) { + return false; + } + chevronStack.Pop (); + break; + case '[': + squareStack.Push (startOffset + off); + break; + case ']': + if (squareStack.Count == 0) { + return true; + } + squareStack.Pop (); + break; + case '{': + bracketStack.Push (startOffset + off); + break; + case '}': + if (bracketStack.Count == 0) { + return true; + } + bracketStack.Pop (); + break; + } + return false; + }); + if (failed) return null; - } + int result = -1; + if (parenStack.Count > 0) + result = parenStack.Pop (); + if (squareStack.Count > 0) + result = Math.Max (result, squareStack.Pop ()); + if (chevronStack.Count > 0) + result = Math.Max (result, chevronStack.Pop ()); + //If we are inside { bracket we don't want to display anything + if (bracketStack.Count > 0 && bracketStack.Pop () > result) + return null; + if (result == -1) + return null; + SetOffset (result + 1); ResolveResult resolveResult; - switch (completionChar) { + switch (document.GetCharAt (result)) { case '(': var invoke = GetInvocationBeforeCursor(true) ?? GetConstructorInitializerBeforeCursor(); if (invoke == null) { @@ -259,62 +332,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // return new NRefactoryParameterDataProvider (textEditorData, result.Expression, resolvedType); // } break; - case ',': - invoke = GetInvocationBeforeCursor(true) ?? GetIndexerBeforeCursor(); - if (invoke == null) { - invoke = GetTypeBeforeCursor(); - if (invoke != null) { - if (GetCurrentParameterIndex(document.GetOffset(invoke.Node.StartLocation), offset) < 0) - return null; - var typeExpression = ResolveExpression(invoke); - if (typeExpression == null || typeExpression.Result == null || typeExpression.Result.IsError) { - return null; - } - - return factory.CreateTypeParameterDataProvider(document.GetOffset(invoke.Node.StartLocation), CollectAllTypes(typeExpression.Result.Type)); - } - return null; - } - if (GetCurrentParameterIndex(document.GetOffset(invoke.Node.StartLocation), offset) < 0) - return null; - if (invoke.Node is ArrayCreateExpression) - return null; - if (invoke.Node is ObjectCreateExpression) { - var createType = ResolveExpression(((ObjectCreateExpression)invoke.Node).Type); - return factory.CreateConstructorProvider(document.GetOffset(invoke.Node.StartLocation), createType.Result.Type); - } - - if (invoke.Node is ICSharpCode.NRefactory.CSharp.Attribute) { - var attribute = ResolveExpression(invoke); - if (attribute == null || attribute.Result == null) { - return null; - } - return factory.CreateConstructorProvider(document.GetOffset(invoke.Node.StartLocation), attribute.Result.Type); - } - - invocationExpression = ResolveExpression(invoke); - - if (invocationExpression == null || invocationExpression.Result == null || invocationExpression.Result.IsError) { - return null; - } - - resolveResult = invocationExpression.Result; - if (resolveResult is MethodGroupResolveResult) { - return factory.CreateMethodDataProvider(document.GetOffset(invoke.Node.StartLocation), CollectMethods(invoke.Node, resolveResult as MethodGroupResolveResult)); - } - if (resolveResult is MemberResolveResult) { - if (resolveResult.Type.Kind == TypeKind.Delegate) { - return factory.CreateDelegateDataProvider(document.GetOffset(invoke.Node.StartLocation), resolveResult.Type); - } - var mr = resolveResult as MemberResolveResult; - if (mr.Member is IMethod) { - return factory.CreateMethodDataProvider(document.GetOffset(invoke.Node.StartLocation), new [] { (IMethod)mr.Member }); - } - } - if (resolveResult != null) { - return factory.CreateIndexerParameterDataProvider(document.GetOffset(invoke.Node.StartLocation), resolveResult.Type, GetAccessibleIndexers (resolveResult.Type), invoke.Node); - } - break; case '<': invoke = GetMethodTypeArgumentInvocationBeforeCursor(); if (invoke != null) { diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/IndentEngine/IndentState.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/IndentEngine/IndentState.cs index 1e230e0918..6b05ce36cf 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/IndentEngine/IndentState.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/IndentEngine/IndentState.cs @@ -516,10 +516,8 @@ namespace ICSharpCode.NRefactory.CSharp var parent = Parent as BracesBodyState; if (parent == null || parent.LastBlockIndent == null || !Engine.EnableCustomIndentLevels) { - if (!Engine.formattingOptions.IndentBlocksInsideExpressions) { - NextLineIndent.RemoveAlignment(); - NextLineIndent.PopIf(IndentType.Continuation); - } + NextLineIndent.RemoveAlignment(); + NextLineIndent.PopIf(IndentType.Continuation); } else { @@ -545,7 +543,7 @@ namespace ICSharpCode.NRefactory.CSharp public override void OnExit() { - if (Parent is BracesBodyState) + if (Parent is BracesBodyState && !((BracesBodyState)Parent).IsRightHandExpression) { ((BracesBodyState)Parent).OnStatementExit(); } @@ -878,8 +876,16 @@ namespace ICSharpCode.NRefactory.CSharp /// void AddIndentation(Body body) { + var isExpression = Parent is ParenthesesBodyState || Parent is SquareBracketsBodyState || + (Parent is BracesBodyState && ((BracesBodyState)Parent).IsRightHandExpression); + if (isExpression && Engine.formattingOptions.IndentBlocksInsideExpressions && Engine.isLineStart) + { + AddIndentation(BraceStyle.NextLineShifted); + } + BraceStyle style; - if (TryGetBraceStyle (body, out style)) { + if (TryGetBraceStyle(body, out style)) + { AddIndentation(style); } else { NextLineIndent.Push(IndentType.Empty); @@ -973,6 +979,8 @@ namespace ICSharpCode.NRefactory.CSharp if (ch == ClosedBracket) { ExitState(); + if (Parent is BracesBodyState) + Parent.OnExit(); } base.Push(ch); @@ -1031,9 +1039,10 @@ namespace ICSharpCode.NRefactory.CSharp base.CheckKeyword(keyword); } + public override void OnExit() { - Parent.OnExit(); + //Parent.OnExit(); } public override IndentState Clone(CSharpIndentEngine engine) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/TextWriterOutputFormatter.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/TextWriterOutputFormatter.cs index bb9db71277..7e14ea190c 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/TextWriterOutputFormatter.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/TextWriterOutputFormatter.cs @@ -321,7 +321,11 @@ namespace ICSharpCode.NRefactory.CSharp } } - static string ConvertCharLiteral(char ch) + /// + /// Gets the escape sequence for the specified character within a char literal. + /// Does not include the single quotes surrounding the char literal. + /// + public static string ConvertCharLiteral(char ch) { if (ch == '\'') { return "\\'"; diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs index 7b20fcf590..0eb2ff70c4 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs @@ -207,6 +207,7 @@ namespace ICSharpCode.NRefactory.CSharp memberType.AddChild(new CSharpTokenNode(Convert(loc [0]), Roles.DoubleColon), Roles.DoubleColon); memberType.MemberNameToken = Identifier.Create(qam.Name, loc != null ? Convert(loc [1]) : TextLocation.Empty); + AddTypeArguments(qam, memberType); return memberType; } @@ -2167,6 +2168,7 @@ namespace ICSharpCode.NRefactory.CSharp if (location != null && location.Count > 0) result.AddChild(new CSharpTokenNode(Convert(location [0]), Roles.DoubleColon), Roles.DoubleColon); + AddTypeArguments(result, qualifiedAliasMember); result.AddChild(Identifier.Create(qualifiedAliasMember.Name, location != null && location.Count > 1 ? Convert(location [1]) : TextLocation.Empty), Roles.Identifier); return new TypeReferenceExpression { Type = result }; } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolTable.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolTable.cs index 2b43442680..277f25a7f6 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolTable.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolTable.cs @@ -184,6 +184,7 @@ namespace Mono.CompilerServices.SymbolWriter #region This is actually written to the symbol file public readonly int Row; public int Column; + public int EndRow, EndColumn; public readonly int File; public readonly int Offset; public readonly bool IsHidden; // Obsolete is never used @@ -214,17 +215,24 @@ namespace Mono.CompilerServices.SymbolWriter } public LineNumberEntry (int file, int row, int column, int offset, bool is_hidden) + : this (file, row, column, -1, -1, offset, is_hidden) + { + } + + public LineNumberEntry (int file, int row, int column, int end_row, int end_column, int offset, bool is_hidden) { this.File = file; this.Row = row; this.Column = column; + this.EndRow = end_row; + this.EndColumn = end_column; this.Offset = offset; this.IsHidden = is_hidden; } public override string ToString () { - return String.Format ("[Line {0}:{1,2}:{3}]", File, Row, Column, Offset); + return String.Format ("[Line {0}:{1,2}-{3,4}:{5}]", File, Row, Column, EndRow, EndColumn, Offset); } } @@ -836,7 +844,7 @@ namespace Mono.CompilerServices.SymbolWriter this._line_numbers = lines; } - internal void Write (MonoSymbolFile file, MyBinaryWriter bw, bool readColumnsInfo) + internal void Write (MonoSymbolFile file, MyBinaryWriter bw, bool hasColumnsInfo, bool hasEndInfo) { int start = (int) bw.BaseStream.Position; @@ -893,23 +901,37 @@ namespace Mono.CompilerServices.SymbolWriter bw.Write ((byte) 1); bw.Write (DW_LNE_end_sequence); - for (int i = 0; i < LineNumbers.Length; i++) { - var ln = LineNumbers [i]; - if (ln.Row >= 0) - bw.WriteLeb128 (ln.Column); + if (hasColumnsInfo) { + for (int i = 0; i < LineNumbers.Length; i++) { + var ln = LineNumbers [i]; + if (ln.Row >= 0) + bw.WriteLeb128 (ln.Column); + } + } + + if (hasEndInfo) { + for (int i = 0; i < LineNumbers.Length; i++) { + var ln = LineNumbers [i]; + if (ln.EndRow == -1 || ln.EndColumn == -1 || ln.Row > ln.EndRow) { + bw.WriteLeb128 (0xffffff); + } else { + bw.WriteLeb128 (ln.EndRow - ln.Row); + bw.WriteLeb128 (ln.EndColumn); + } + } } file.ExtendedLineNumberSize += (int) bw.BaseStream.Position - start; } - internal static LineNumberTable Read (MonoSymbolFile file, MyBinaryReader br, bool readColumnsInfo) + internal static LineNumberTable Read (MonoSymbolFile file, MyBinaryReader br, bool readColumnsInfo, bool readEndInfo) { LineNumberTable lnt = new LineNumberTable (file); - lnt.DoRead (file, br, readColumnsInfo); + lnt.DoRead (file, br, readColumnsInfo, readEndInfo); return lnt; } - void DoRead (MonoSymbolFile file, MyBinaryReader br, bool includesColumns) + void DoRead (MonoSymbolFile file, MyBinaryReader br, bool includesColumns, bool includesEnds) { var lines = new List (); @@ -988,6 +1010,20 @@ namespace Mono.CompilerServices.SymbolWriter ln.Column = br.ReadLeb128 (); } } + if (includesEnds) { + for (int i = 0; i < _line_numbers.Length; ++i) { + var ln = _line_numbers[i]; + + int row = br.ReadLeb128 (); + if (row == 0xffffff) { + ln.EndRow = -1; + ln.EndColumn = -1; + } else { + ln.EndRow = ln.Row + row; + ln.EndColumn = br.ReadLeb128 (); + } + } + } } public bool GetMethodBounds (out LineNumberEntry start, out LineNumberEntry end) @@ -1045,7 +1081,8 @@ namespace Mono.CompilerServices.SymbolWriter public enum Flags { LocalNamesAmbiguous = 1, - ColumnsInfoIncluded = 1 << 1 + ColumnsInfoIncluded = 1 << 1, + EndInfoIncluded = 1 << 2 } public const int Size = 12; @@ -1198,8 +1235,13 @@ namespace Mono.CompilerServices.SymbolWriter bw.Write (real_name); } + foreach (var lne in lnt.LineNumbers) { + if (lne.EndRow != -1 || lne.EndColumn != -1) + flags |= Flags.EndInfoIncluded; + } + LineNumberTableOffset = (int) bw.BaseStream.Position; - lnt.Write (file, bw, (flags & Flags.ColumnsInfoIncluded) != 0); + lnt.Write (file, bw, (flags & Flags.ColumnsInfoIncluded) != 0, (flags & Flags.EndInfoIncluded) != 0); DataOffset = (int) bw.BaseStream.Position; @@ -1236,7 +1278,7 @@ namespace Mono.CompilerServices.SymbolWriter long old_pos = reader.BaseStream.Position; reader.BaseStream.Position = LineNumberTableOffset; - lnt = LineNumberTable.Read (SymbolFile, reader, (flags & Flags.ColumnsInfoIncluded) != 0); + lnt = LineNumberTable.Read (SymbolFile, reader, (flags & Flags.ColumnsInfoIncluded) != 0, (flags & Flags.EndInfoIncluded) != 0); reader.BaseStream.Position = old_pos; return lnt; diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/SourceMethodBuilder.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/SourceMethodBuilder.cs index 75e6a6c608..bd801f657b 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/SourceMethodBuilder.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/SourceMethodBuilder.cs @@ -58,9 +58,14 @@ namespace Mono.CompilerServices.SymbolWriter } public void MarkSequencePoint (int offset, SourceFileEntry file, int line, int column, bool is_hidden) + { + MarkSequencePoint (offset, file, line, column, -1, -1, is_hidden); + } + + public void MarkSequencePoint (int offset, SourceFileEntry file, int line, int column, int end_line, int end_column, bool is_hidden) { int file_idx = file != null ? file.Index : 0; - var lne = new LineNumberEntry (file_idx, line, column, offset, is_hidden); + var lne = new LineNumberEntry (file_idx, line, column, end_line, end_column, offset, is_hidden); if (method_lines.Count > 0) { var prev = method_lines[method_lines.Count - 1]; diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs index 2f814773cf..64ea6fa4df 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs @@ -1273,7 +1273,7 @@ namespace Mono.CSharp { throw new InternalErrorException (e, loc); } - if (!ec.IsInProbingMode) { + if (!ec.IsInProbingMode && !etree_conversion) { compatibles.Add (type, am ?? EmptyExpression.Null); } @@ -1363,9 +1363,12 @@ namespace Mono.CSharp { // nothing, as we only exist to not do anything. } - public static void Error_AddressOfCapturedVar (ResolveContext ec, IVariableReference var, Location loc) + public static void Error_AddressOfCapturedVar (ResolveContext rc, IVariableReference var, Location loc) { - ec.Report.Error (1686, loc, + if (rc.CurrentAnonymousMethod is AsyncInitializer) + return; + + rc.Report.Error (1686, loc, "Local variable or parameter `{0}' cannot have their address taken and be used inside an anonymous method, lambda expression or query expression", var.Name); } @@ -1605,6 +1608,7 @@ namespace Mono.CSharp { var da_ontrue = fc.DefiniteAssignmentOnTrue; var da_onfalse = fc.DefiniteAssignmentOnFalse; + fc.DefiniteAssignmentOnTrue = fc.DefiniteAssignmentOnFalse = null; block.FlowAnalysis (fc); fc.ParametersBlock = prev_pb; @@ -1727,6 +1731,7 @@ namespace Mono.CSharp { Modifiers modifiers; TypeDefinition parent = null; + TypeParameters hoisted_tparams = null; var src_block = Block.Original.Explicit; if (src_block.HasCapturedVariable || src_block.HasCapturedThis) { @@ -1758,6 +1763,7 @@ namespace Mono.CSharp { // use ldftn on non-boxed instances either to share mutated state // parent = sm_parent.Parent.PartialContainer; + hoisted_tparams = sm_parent.OriginalTypeParameters; } else if (sm is IteratorStorey) { // // For iterators we can host everything in one class @@ -1775,6 +1781,9 @@ namespace Mono.CSharp { modifiers = Modifiers.STATIC | Modifiers.PRIVATE; } + if (storey == null && hoisted_tparams == null) + hoisted_tparams = ec.CurrentTypeParameters; + if (parent == null) parent = ec.CurrentTypeDefinition.Parent.PartialContainer; @@ -1782,9 +1791,7 @@ namespace Mono.CSharp { "m", null, parent.PartialContainer.CounterAnonymousMethods++); MemberName member_name; - if (storey == null && ec.CurrentTypeParameters != null) { - - var hoisted_tparams = ec.CurrentTypeParameters; + if (hoisted_tparams != null) { var type_params = new TypeParameters (hoisted_tparams.Count); for (int i = 0; i < hoisted_tparams.Count; ++i) { type_params.Add (hoisted_tparams[i].CreateHoistedCopy (null)); @@ -1905,8 +1912,17 @@ namespace Mono.CSharp { ec.Emit (OpCodes.Ldftn, TypeBuilder.GetMethod (t.GetMetaInfo (), (MethodInfo) delegate_method.GetMetaInfo ())); } else { - if (delegate_method.IsGeneric) - delegate_method = delegate_method.MakeGenericMethod (ec.MemberContext, method.TypeParameters); + if (delegate_method.IsGeneric) { + TypeParameterSpec[] tparams; + var sm = ec.CurrentAnonymousMethod == null ? null : ec.CurrentAnonymousMethod.Storey as StateMachine; + if (sm != null && sm.OriginalTypeParameters != null) { + tparams = sm.CurrentTypeParameters.Types; + } else { + tparams = method.TypeParameters; + } + + delegate_method = delegate_method.MakeGenericMethod (ec.MemberContext, tparams); + } ec.Emit (OpCodes.Ldftn, delegate_method); } @@ -2167,7 +2183,6 @@ namespace Mono.CSharp { equals.Block = equals_block; equals.Define (); - equals.PrepareEmit (); Members.Add (equals); // @@ -2222,7 +2237,6 @@ namespace Mono.CSharp { hashcode_block.AddStatement (new Return (hash_variable, loc)); hashcode.Block = hashcode_top; hashcode.Define (); - hashcode.PrepareEmit (); Members.Add (hashcode); // @@ -2233,7 +2247,6 @@ namespace Mono.CSharp { tostring_block.AddStatement (new Return (string_concat, loc)); tostring.Block = tostring_block; tostring.Define (); - tostring.PrepareEmit (); Members.Add (tostring); return true; diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs index 6c99245480..f93c038396 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs @@ -207,7 +207,7 @@ namespace Mono.CSharp return; if (Compiler.Settings.Target == Target.Exe) { - a.Error_AttributeEmitError ("The executables cannot be satelite assemblies, remove the attribute or keep it empty"); + Report.Error (7059, a.Location, "Executables cannot be satellite assemblies. Remove the attribute or keep it empty"); return; } @@ -231,7 +231,8 @@ namespace Mono.CSharp var vinfo = IsValidAssemblyVersion (value, true); if (vinfo == null) { - a.Error_AttributeEmitError (string.Format ("Specified version `{0}' is not valid", value)); + Report.Error (7034, a.Location, "The specified version string `{0}' does not conform to the required format - major[.minor[.build[.revision]]]", + value); return; } @@ -322,13 +323,18 @@ namespace Mono.CSharp if (a.Type == pa.InternalsVisibleTo) { string assembly_name = a.GetString (); + if (assembly_name == null) { + Report.Error (7030, a.Location, "Friend assembly reference cannot have `null' value"); + return; + } + if (assembly_name.Length == 0) return; #if STATIC ParsedAssemblyName aname; ParseAssemblyResult r = Fusion.ParseAssemblyName (assembly_name, out aname); if (r != ParseAssemblyResult.OK) { - Report.Warning (1700, 3, a.Location, "Assembly reference `{0}' is invalid and cannot be resolved", + Report.Warning (1700, 3, a.Location, "Friend assembly reference `{0}' is invalid and cannot be resolved", assembly_name); return; } @@ -353,10 +359,15 @@ namespace Mono.CSharp } else if (a.Type == pa.AssemblyFileVersion) { vi_product_version = a.GetString (); if (string.IsNullOrEmpty (vi_product_version) || IsValidAssemblyVersion (vi_product_version, false) == null) { - Report.Warning (1607, 1, a.Location, "The version number `{0}' specified for `{1}' is invalid", + Report.Warning (7035, 1, a.Location, "The specified version string `{0}' does not conform to the recommended format major.minor.build.revision", vi_product_version, a.Name); return; } + + // File version info decoding from blob is not supported + var cab = new CustomAttributeBuilder ((ConstructorInfo) ctor.GetMetaInfo (), new object[] { vi_product_version }); + Builder.SetCustomAttribute (cab); + return; } else if (a.Type == pa.AssemblyProduct) { vi_product = a.GetString (); } else if (a.Type == pa.AssemblyCompany) { @@ -394,8 +405,8 @@ namespace Mono.CSharp } var ci = a.Assembly.GetName ().CultureInfo; - if (!ci.Equals (System.Globalization.CultureInfo.InvariantCulture)) { - Report.Warning (1607, 1, "Referenced assembly `{0}' has different culture setting of `{1}'", + if (!ci.Equals (CultureInfo.InvariantCulture)) { + Report.Warning (8009, 1, "Referenced assembly `{0}' has different culture setting of `{1}'", a.Name, ci.Name); } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs index d938f4da59..18c2d8ca7e 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs @@ -334,7 +334,7 @@ namespace Mono.CSharp { if (source == null) { ok = false; - source = EmptyExpression.Null; + source = ErrorExpression.Instance; } target = target.ResolveLValue (ec, source); @@ -569,6 +569,9 @@ namespace Mono.CSharp { { flags |= Options.FieldInitializerScope | Options.ConstructorScope; this.ctor_block = constructorContext.CurrentBlock.Explicit; + + if (ctor_block.IsCompilerGenerated) + CurrentBlock = ctor_block; } public override ExplicitBlock ConstructorBlock { @@ -594,6 +597,12 @@ namespace Mono.CSharp { public int AssignmentOffset { get; private set; } + public FieldBase Field { + get { + return mc; + } + } + public override Location StartLocation { get { return loc; @@ -606,8 +615,8 @@ namespace Mono.CSharp { if (source == null) return null; - var bc = (BlockContext) rc; if (resolved == null) { + var bc = (BlockContext) rc; var ctx = new FieldInitializerContext (mc, bc); resolved = base.DoResolve (ctx) as ExpressionStatement; AssignmentOffset = ctx.AssignmentInfoOffset - bc.AssignmentInfoOffset; @@ -661,6 +670,33 @@ namespace Mono.CSharp { } } + class PrimaryConstructorAssign : SimpleAssign + { + readonly Field field; + readonly Parameter parameter; + + public PrimaryConstructorAssign (Field field, Parameter parameter) + : base (null, null, parameter.Location) + { + this.field = field; + this.parameter = parameter; + } + + protected override Expression DoResolve (ResolveContext rc) + { + target = new FieldExpr (field, loc); + source = rc.CurrentBlock.ParametersBlock.GetParameterInfo (parameter).CreateReferenceExpression (rc, loc); + return base.DoResolve (rc); + } + + public override void EmitStatement (EmitContext ec) + { + using (ec.With (BuilderContext.Options.OmitDebugInfo, true)) { + base.EmitStatement (ec); + } + } + } + // // This class is used for compound assignments. // diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs index fb627fc54f..671e53a550 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs @@ -80,10 +80,6 @@ namespace Mono.CSharp protected override Expression DoResolve (ResolveContext rc) { - if (rc.HasSet (ResolveContext.Options.FinallyScope)) { - rc.Report.Error (1984, loc, "The `await' operator cannot be used in the body of a finally clause"); - } - if (rc.HasSet (ResolveContext.Options.LockScope)) { rc.Report.Error (1996, loc, "The `await' operator cannot be used in the body of a lock statement"); @@ -250,7 +246,7 @@ namespace Mono.CSharp var fe_awaiter = new FieldExpr (awaiter, loc); fe_awaiter.InstanceExpression = new CompilerGeneratedThis (ec.CurrentType, loc); - Label skip_continuation = ec.DefineLabel (); + Label skip_continuation = ec.DefineLabel (); using (ec.With (BuilderContext.Options.OmitDebugInfo, true)) { // @@ -330,10 +326,6 @@ namespace Mono.CSharp return false; } - if (bc.HasSet (ResolveContext.Options.CatchScope)) { - bc.Report.Error (1985, loc, "The `await' operator cannot be used in the body of a catch clause"); - } - if (!base.Resolve (bc)) return false; @@ -453,6 +445,10 @@ namespace Mono.CSharp get; set; } + public StackFieldExpr HoistedReturnState { + get; set; + } + public override bool IsIterator { get { return false; @@ -470,9 +466,9 @@ namespace Mono.CSharp protected override BlockContext CreateBlockContext (BlockContext bc) { var ctx = base.CreateBlockContext (bc); - var lambda = bc.CurrentAnonymousMethod as LambdaMethod; - if (lambda != null) - return_inference = lambda.ReturnTypeInference; + var am = bc.CurrentAnonymousMethod as AnonymousMethodBody; + if (am != null) + return_inference = am.ReturnTypeInference; ctx.Set (ResolveContext.Options.TryScope); @@ -515,7 +511,6 @@ namespace Mono.CSharp MethodSpec builder_factory; MethodSpec builder_start; PropertySpec task; - LocalVariable hoisted_return; int locals_captured; Dictionary> stack_fields; Dictionary> awaiter_fields; @@ -529,11 +524,7 @@ namespace Mono.CSharp #region Properties - public LocalVariable HoistedReturn { - get { - return hoisted_return; - } - } + public Expression HoistedReturnValue { get; set; } public TypeSpec ReturnType { get { @@ -582,7 +573,7 @@ namespace Mono.CSharp return field; } - public Field AddCapturedLocalVariable (TypeSpec type) + public Field AddCapturedLocalVariable (TypeSpec type, bool requiresUninitialized = false) { if (mutator != null) type = mutator.Mutate (type); @@ -590,7 +581,7 @@ namespace Mono.CSharp List existing_fields = null; if (stack_fields == null) { stack_fields = new Dictionary> (); - } else if (stack_fields.TryGetValue (type, out existing_fields)) { + } else if (stack_fields.TryGetValue (type, out existing_fields) && !requiresUninitialized) { foreach (var f in existing_fields) { if (f.IsAvailableForReuse) { f.IsAvailableForReuse = false; @@ -723,7 +714,7 @@ namespace Mono.CSharp set_state_machine.Block.AddStatement (new StatementExpression (new Invocation (mg, args))); if (has_task_return_type) { - hoisted_return = LocalVariable.CreateCompilerGenerated (bt.TypeArguments[0], StateMachineMethod.Block, Location); + HoistedReturnValue = TemporaryVariableReference.Create (bt.TypeArguments [0], StateMachineMethod.Block, Location); } return true; @@ -910,11 +901,11 @@ namespace Mono.CSharp }; Arguments args; - if (hoisted_return == null) { + if (HoistedReturnValue == null) { args = new Arguments (0); } else { args = new Arguments (1); - args.Add (new Argument (new LocalVariableReference (hoisted_return, Location))); + args.Add (new Argument (HoistedReturnValue)); } using (ec.With (BuilderContext.Options.OmitDebugInfo, true)) { diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs index b7f36b0f2c..9e04374923 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs @@ -257,19 +257,22 @@ namespace Mono.CSharp { Report.Error (1970, loc, "Do not use `{0}' directly. Use `dynamic' keyword instead", GetSignatureForError ()); } - /// - /// This is rather hack. We report many emit attribute error with same error to be compatible with - /// csc. But because csc has to report them this way because error came from ilasm we needn't. - /// - public void Error_AttributeEmitError (string inner) + void Error_AttributeEmitError (string inner) { Report.Error (647, Location, "Error during emitting `{0}' attribute. The reason is `{1}'", Type.GetSignatureForError (), inner); } + public void Error_InvalidArgumentValue (TypeSpec attributeType) + { + Report.Error (591, Location, "Invalid value for argument to `{0}' attribute", attributeType.GetSignatureForError ()); + } + public void Error_InvalidSecurityParent () { - Error_AttributeEmitError ("it is attached to invalid parent"); + Report.Error (7070, Location, + "Security attribute `{0}' is not valid on this declaration type. Security attributes are only valid on assembly, type and method declarations", + Type.GetSignatureForError ()); } Attributable Owner { @@ -411,7 +414,7 @@ namespace Mono.CSharp { return ((MethodImplOptions) value | all) == all; } - static bool IsValidArgumentType (TypeSpec t) + public static bool IsValidArgumentType (TypeSpec t) { if (t.IsArray) { var ac = (ArrayContainer) t; @@ -836,6 +839,7 @@ namespace Mono.CSharp { { SecurityAction action = GetSecurityActionValue (); bool for_assembly = Target == AttributeTargets.Assembly || Target == AttributeTargets.Module; + var c = (Constant)pos_args [0].Expr; switch (action) { #pragma warning disable 618 @@ -858,11 +862,22 @@ namespace Mono.CSharp { #pragma warning restore 618 default: - Error_AttributeEmitError ("SecurityAction is out of range"); + Report.Error (7049, c.Location, "Security attribute `{0}' has an invalid SecurityAction value `{1}'", + Type.GetSignatureForError (), c.GetValueAsLiteral()); return false; } - Error_AttributeEmitError (String.Concat ("SecurityAction `", action, "' is not valid for this declaration")); + switch (Target) { + case AttributeTargets.Assembly: + Report.Error (7050, c.Location, "SecurityAction value `{0}' is invalid for security attributes applied to an assembly", + c.GetSignatureForError ()); + break; + default: + Report.Error (7051, c.Location, "SecurityAction value `{0}' is invalid for security attributes applied to a type or a method", + c.GetSignatureForError ()); + break; + } + return false; } @@ -1031,44 +1046,42 @@ namespace Mono.CSharp { return; } } else if (Type == predefined.Guid) { + string v = ((StringConstant) arg_expr).Value; try { - string v = ((StringConstant) arg_expr).Value; new Guid (v); - } catch (Exception e) { - Error_AttributeEmitError (e.Message); + } catch { + Error_InvalidArgumentValue (Type); return; } } else if (Type == predefined.AttributeUsage) { int v = ((IntConstant) ((EnumConstant) arg_expr).Child).Value; - if (v == 0) { - context.Module.Compiler.Report.Error (591, Location, "Invalid value for argument to `{0}' attribute", - "System.AttributeUsage"); - } + if (v == 0) + Error_InvalidArgumentValue (Type); } else if (Type == predefined.MarshalAs) { if (pos_args.Count == 1) { var u_type = (UnmanagedType) System.Enum.Parse (typeof (UnmanagedType), ((Constant) pos_args[0].Expr).GetValue ().ToString ()); if (u_type == UnmanagedType.ByValArray && !(Owner is FieldBase)) { - Error_AttributeEmitError ("Specified unmanaged type is only valid on fields"); + Report.Error (7055, pos_args [0].Expr.Location, "Unmanaged type `ByValArray' is only valid for fields"); } } } else if (Type == predefined.DllImport) { if (pos_args.Count == 1 && pos_args[0].Expr is Constant) { var value = ((Constant) pos_args[0].Expr).GetValue () as string; if (string.IsNullOrEmpty (value)) - Error_AttributeEmitError ("DllName cannot be empty or null"); + Error_InvalidArgumentValue (Type); } } else if (Type == predefined.MethodImpl) { if (pos_args.Count == 1) { var value = (int) ((Constant) arg_expr).GetValueAsLong (); if (!IsValidMethodImplOption (value)) { - Error_AttributeEmitError ("Incorrect argument value"); + Error_InvalidArgumentValue (Type); } } } } - arg_expr.EncodeAttributeValue (context, encoder, pt); + arg_expr.EncodeAttributeValue (context, encoder, pt, pt); } } @@ -1082,7 +1095,7 @@ namespace Mono.CSharp { encoder.Encode (na.Key.Type); encoder.Encode (na.Value.Name); - na.Value.Expr.EncodeAttributeValue (context, encoder, na.Key.Type); + na.Value.Expr.EncodeAttributeValue (context, encoder, na.Key.Type, na.Key.Type); } } else { encoder.EncodeEmptyNamedArguments (); @@ -1546,7 +1559,7 @@ namespace Mono.CSharp { Encode ((byte) 0x54); // property Encode (property.MemberType); Encode (property.Name); - value.EncodeAttributeValue (null, this, property.MemberType); + value.EncodeAttributeValue (null, this, property.MemberType, property.MemberType); } // @@ -1558,7 +1571,7 @@ namespace Mono.CSharp { Encode ((byte) 0x53); // field Encode (field.MemberType); Encode (field.Name); - value.EncodeAttributeValue (null, this, field.MemberType); + value.EncodeAttributeValue (null, this, field.MemberType, field.MemberType); } public void EncodeNamedArguments (T[] members, Constant[] values) where T : MemberSpec, IInterfaceMemberSpec @@ -1578,7 +1591,7 @@ namespace Mono.CSharp { Encode (member.MemberType); Encode (member.Name); - values [i].EncodeAttributeValue (null, this, member.MemberType); + values [i].EncodeAttributeValue (null, this, member.MemberType, member.MemberType); } } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cfold.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cfold.cs index bea0ee06df..72f3a9c362 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cfold.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cfold.cs @@ -367,8 +367,8 @@ namespace Mono.CSharp { return null; result = result.Reduce (ec, lt); - if (result == null) - return null; + if (result == null || lt.IsEnum) + return result; return new EnumConstant (result, lt); } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs index 2b8b8d0e14..02f1b654c9 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs @@ -424,7 +424,7 @@ namespace Mono.CSharp } public TypeSpec CurrentType { - get { return tc.Parent.CurrentType; } + get { return tc.PartialContainer.CurrentType; } } public TypeParameters CurrentTypeParameters { @@ -736,6 +736,8 @@ namespace Mono.CSharp } } + public ParametersCompiled PrimaryConstructorParameters { get; set; } + public TypeParameters TypeParametersAll { get { return all_type_parameters; @@ -833,6 +835,9 @@ namespace Mono.CSharp if (symbol is TypeParameter) { Report.Error (692, symbol.Location, "Duplicate type parameter `{0}'", symbol.GetSignatureForError ()); + } else if (symbol is PrimaryConstructorField && mc is TypeParameter) { + Report.Error (9003, symbol.Location, "Primary constructor of type `{0}' has parameter of same name as type parameter `{1}'", + symbol.Parent.GetSignatureForError (), symbol.GetSignatureForError ()); } else { Report.Error (102, symbol.Location, "The type `{0}' already contains a definition for `{1}'", @@ -1033,9 +1038,20 @@ namespace Mono.CSharp for (int i = 0; i < initialized_fields.Count; ++i) { FieldInitializer fi = initialized_fields [i]; + + // + // Clone before resolving otherwise when field initializer is needed + // in more than 1 constructor any resolve after the initial one would + // only took the resolved expression which is problem for expressions + // that generate extra expressions or code during Resolve phase + // + var cloned = fi.Clone (new CloneContext ()); + ExpressionStatement s = fi.ResolveStatement (ec); - if (s == null) + if (s == null) { + initialized_fields [i] = new FieldInitializer (fi.Field, ErrorExpression.Instance, Location.Null); continue; + } // // Field is re-initialized to its default value => removed @@ -1045,6 +1061,7 @@ namespace Mono.CSharp ec.AssignmentInfoOffset += fi.AssignmentOffset; ec.CurrentBlock.AddScopeStatement (new StatementExpression (s)); + initialized_fields [i] = (FieldInitializer) cloned; } } @@ -1530,6 +1547,14 @@ namespace Mono.CSharp PartialContainer.containers.AddRange (containers); } + if (PrimaryConstructorParameters != null) { + if (PartialContainer.PrimaryConstructorParameters != null) { + Report.Error (9001, Location, "Only one part of a partial type can declare primary constructor parameters"); + } else { + PartialContainer.PrimaryConstructorParameters = PrimaryConstructorParameters; + } + } + members_defined = members_defined_ok = true; caching_flags |= Flags.CloseTypeCreated; } else { @@ -1682,6 +1707,10 @@ namespace Mono.CSharp return; foreach (var member in members) { + var pbm = member as PropertyBasedMember; + if (pbm != null) + pbm.PrepareEmit (); + var pm = member as IParametersMember; if (pm != null) { var mc = member as MethodOrOperator; @@ -1694,6 +1723,7 @@ namespace Mono.CSharp continue; ((ParametersCompiled) p).ResolveDefaultValues (member); + continue; } var c = member as Const; @@ -2033,10 +2063,10 @@ namespace Mono.CSharp foreach (var member in members) { if (member is Event) { // - // An event can be assigned from same class only, so we can report + // An event can be assigned from same class only, report // this warning for all accessibility modes // - if (!member.IsUsed) + if (!member.IsUsed && !PartialContainer.HasStructLayout) Report.Warning (67, 3, member.Location, "The event `{0}' is never used", member.GetSignatureForError ()); continue; @@ -2054,12 +2084,15 @@ namespace Mono.CSharp continue; if (!member.IsUsed) { - if ((member.caching_flags & Flags.IsAssigned) == 0) { - Report.Warning (169, 3, member.Location, "The private field `{0}' is never used", member.GetSignatureForError ()); - } else { - Report.Warning (414, 3, member.Location, "The private field `{0}' is assigned but its value is never used", - member.GetSignatureForError ()); + if (!PartialContainer.HasStructLayout) { + if ((member.caching_flags & Flags.IsAssigned) == 0) { + Report.Warning (169, 3, member.Location, "The private field `{0}' is never used", member.GetSignatureForError ()); + } else { + Report.Warning (414, 3, member.Location, "The private field `{0}' is assigned but its value is never used", + member.GetSignatureForError ()); + } } + continue; } @@ -2522,12 +2555,15 @@ namespace Mono.CSharp public const TypeAttributes StaticClassAttribute = TypeAttributes.Abstract | TypeAttributes.Sealed; SecurityType declarative_security; + protected Constructor generated_primary_constructor; protected ClassOrStruct (TypeContainer parent, MemberName name, Attributes attrs, MemberKind kind) : base (parent, name, attrs, kind) { } + public Arguments PrimaryConstructorBaseArguments { get; set; } + protected override TypeAttributes TypeAttr { get { TypeAttributes ta = base.TypeAttr; @@ -2555,6 +2591,12 @@ namespace Mono.CSharp symbol.GetSignatureForError ()); return; } + + if (symbol is PrimaryConstructorField) { + Report.Error (9004, symbol.Location, "Primary constructor of type `{0}' has parameter of same name as containing type", + symbol.Parent.GetSignatureForError ()); + return; + } InterfaceMemberBase imb = symbol as InterfaceMemberBase; if (imb == null || !imb.IsExplicitImpl) { @@ -2605,11 +2647,15 @@ namespace Mono.CSharp mods = ((ModFlags & Modifiers.ABSTRACT) != 0) ? Modifiers.PROTECTED : Modifiers.PUBLIC; } - var c = new Constructor (this, MemberName.Name, mods, null, ParametersCompiled.EmptyReadOnlyParameters, Location); - c.Initializer = new GeneratedBaseInitializer (Location); + var c = new Constructor (this, MemberName.Name, mods, null, PrimaryConstructorParameters ?? ParametersCompiled.EmptyReadOnlyParameters, Location); + if (Kind == MemberKind.Class) + c.Initializer = new GeneratedBaseInitializer (Location, PrimaryConstructorBaseArguments); + + if (PrimaryConstructorParameters != null) + c.IsPrimaryConstructor = true; AddConstructor (c, true); - c.Block = new ToplevelBlock (Compiler, ParametersCompiled.EmptyReadOnlyParameters, Location) { + c.Block = new ToplevelBlock (Compiler, c.ParameterInfo, Location) { IsCompilerGenerated = true }; @@ -2620,6 +2666,19 @@ namespace Mono.CSharp { CheckProtectedModifier (); + if (PrimaryConstructorParameters != null) { + foreach (Parameter p in PrimaryConstructorParameters.FixedParameters) { + if ((p.ModFlags & Parameter.Modifier.RefOutMask) != 0) + continue; + + var f = new PrimaryConstructorField (this, p); + AddField (f); + + generated_primary_constructor.Block.AddStatement ( + new StatementExpression (new PrimaryConstructorAssign (f, p), p.Location)); + } + } + base.DoDefineMembers (); return true; @@ -2659,7 +2718,7 @@ namespace Mono.CSharp Modifiers.SEALED | Modifiers.STATIC | Modifiers.UNSAFE; - + public Class (TypeContainer parent, MemberName name, Modifiers mod, Attributes attrs) : base (parent, name, attrs, MemberKind.Class) { @@ -2729,6 +2788,11 @@ namespace Mono.CSharp } if (IsStatic) { + if (PrimaryConstructorParameters != null) { + Report.Error (-800, Location, "`{0}': Static classes cannot have primary constructor", GetSignatureForError ()); + PrimaryConstructorParameters = null; + } + foreach (var m in Members) { if (m is Operator) { Report.Error (715, m.Location, "`{0}': Static classes cannot contain user-defined operators", m.GetSignatureForError ()); @@ -2756,8 +2820,8 @@ namespace Mono.CSharp Report.Error (708, m.Location, "`{0}': cannot declare instance members in a static class", m.GetSignatureForError ()); } } else { - if (!PartialContainer.HasInstanceConstructor) - DefineDefaultConstructor (false); + if (!PartialContainer.HasInstanceConstructor || PrimaryConstructorParameters != null) + generated_primary_constructor = DefineDefaultConstructor (false); } return base.DoDefineMembers (); @@ -2979,6 +3043,14 @@ namespace Mono.CSharp return fts.CheckStructCycles (); } + protected override bool DoDefineMembers () + { + if (PrimaryConstructorParameters != null) + generated_primary_constructor = DefineDefaultConstructor (false); + + return base.DoDefineMembers (); + } + public override void Emit () { CheckStructCycles (); @@ -3687,25 +3759,29 @@ namespace Mono.CSharp Report.SymbolRelatedToPreviousError (MemberType); if (this is Property) Report.Error (53, Location, - "Inconsistent accessibility: property type `" + - MemberType.GetSignatureForError () + "' is less " + - "accessible than property `" + GetSignatureForError () + "'"); + "Inconsistent accessibility: property type `" + + MemberType.GetSignatureForError () + "' is less " + + "accessible than property `" + GetSignatureForError () + "'"); else if (this is Indexer) Report.Error (54, Location, - "Inconsistent accessibility: indexer return type `" + - MemberType.GetSignatureForError () + "' is less " + - "accessible than indexer `" + GetSignatureForError () + "'"); + "Inconsistent accessibility: indexer return type `" + + MemberType.GetSignatureForError () + "' is less " + + "accessible than indexer `" + GetSignatureForError () + "'"); else if (this is MethodCore) { if (this is Operator) Report.Error (56, Location, - "Inconsistent accessibility: return type `" + - MemberType.GetSignatureForError () + "' is less " + - "accessible than operator `" + GetSignatureForError () + "'"); + "Inconsistent accessibility: return type `" + + MemberType.GetSignatureForError () + "' is less " + + "accessible than operator `" + GetSignatureForError () + "'"); else Report.Error (50, Location, - "Inconsistent accessibility: return type `" + - MemberType.GetSignatureForError () + "' is less " + - "accessible than method `" + GetSignatureForError () + "'"); + "Inconsistent accessibility: return type `" + + MemberType.GetSignatureForError () + "' is less " + + "accessible than method `" + GetSignatureForError () + "'"); + } else if (this is Event) { + Report.Error (7025, Location, + "Inconsistent accessibility: event type `{0}' is less accessible than event `{1}'", + MemberType.GetSignatureForError (), GetSignatureForError ()); } else { Report.Error (52, Location, "Inconsistent accessibility: field type `" + diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs index bb65071203..7f7ccb3323 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs @@ -175,6 +175,12 @@ namespace Mono.CSharp } } + public bool NotifyEvaluatorOnStore { + get { + return Module.Evaluator != null && Module.Evaluator.ModificationListener != null; + } + } + // Has to be used for specific emitter errors only any // possible resolver errors have to be reported during Resolve public Report Report { @@ -204,6 +210,10 @@ namespace Mono.CSharp } } + public LocalVariable AsyncThrowVariable { get; set; } + + public List TryFinallyUnwind { get; set; } + #endregion public void AddStatementEpilog (IExpressionCleanup cleanupExpression) @@ -279,11 +289,21 @@ namespace Mono.CSharp ig.BeginCatchBlock (type.GetMetaInfo ()); } + public void BeginFilterHandler () + { + ig.BeginCatchBlock (null); + } + public void BeginExceptionBlock () { ig.BeginExceptionBlock (); } + public void BeginExceptionFilterBlock () + { + ig.BeginExceptFilterBlock (); + } + public void BeginFinallyBlock () { ig.BeginFinallyBlock (); @@ -370,9 +390,9 @@ namespace Mono.CSharp // // Creates temporary field in current async storey // - public StackFieldExpr GetTemporaryField (TypeSpec type) + public StackFieldExpr GetTemporaryField (TypeSpec type, bool initializedFieldRequired = false) { - var f = AsyncTaskStorey.AddCapturedLocalVariable (type); + var f = AsyncTaskStorey.AddCapturedLocalVariable (type, initializedFieldRequired); var fexpr = new StackFieldExpr (f); fexpr.InstanceExpression = new CompilerGeneratedThis (CurrentType, Location.Null); return fexpr; @@ -508,8 +528,16 @@ namespace Mono.CSharp type = EnumSpec.GetUnderlyingType (type); switch (type.BuiltinType) { - case BuiltinTypeSpec.Type.Byte: case BuiltinTypeSpec.Type.Bool: + // + // Workaround MSIL limitation. Load bool element as single bit, + // bool array can actually store any byte value + // + ig.Emit (OpCodes.Ldelem_U1); + ig.Emit (OpCodes.Ldc_I4_1); + ig.Emit (OpCodes.And); + break; + case BuiltinTypeSpec.Type.Byte: ig.Emit (OpCodes.Ldelem_U1); break; case BuiltinTypeSpec.Type.SByte: @@ -724,8 +752,12 @@ namespace Mono.CSharp ig.Emit (OpCodes.Ldind_U1); break; case BuiltinTypeSpec.Type.SByte: + ig.Emit (OpCodes.Ldind_I1); + break; case BuiltinTypeSpec.Type.Bool: ig.Emit (OpCodes.Ldind_I1); + ig.Emit (OpCodes.Ldc_I4_1); + ig.Emit (OpCodes.And); break; case BuiltinTypeSpec.Type.ULong: case BuiltinTypeSpec.Type.Long: @@ -1026,7 +1058,7 @@ namespace Mono.CSharp } } - if (call_op == OpCodes.Callvirt && (InstanceExpression.Type.IsGenericParameter || InstanceExpression.Type.IsStruct)) { + if (call_op == OpCodes.Callvirt && (InstanceExpression.Type.IsGenericParameter || InstanceExpression.Type.IsStructOrEnum)) { ec.Emit (OpCodes.Constrained, InstanceExpression.Type); } @@ -1066,7 +1098,7 @@ namespace Mono.CSharp // // Push the instance expression // - if ((instance_type.IsStruct && (callOpcode == OpCodes.Callvirt || (callOpcode == OpCodes.Call && declaringType.IsStruct))) || + if ((instance_type.IsStructOrEnum && (callOpcode == OpCodes.Callvirt || (callOpcode == OpCodes.Call && declaringType.IsStruct))) || instance_type.IsGenericParameter || declaringType.IsNullableType) { // // If the expression implements IMemoryLocation, then @@ -1088,7 +1120,7 @@ namespace Mono.CSharp return ReferenceContainer.MakeType (ec.Module, instance_type); } - if (instance_type.IsEnum || instance_type.IsStruct) { + if (instance_type.IsStructOrEnum) { instance.Emit (ec); ec.Emit (OpCodes.Box, instance_type); return ec.BuiltinTypes.Object; diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/complete.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/complete.cs index f66a7bd9fb..3504302d58 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/complete.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/complete.cs @@ -210,5 +210,17 @@ namespace Mono.CSharp { // Nothing } } + + public class EmptyCompletion : CompletingExpression + { + protected override void CloneTo (CloneContext clonectx, Expression target) + { + } + + protected override Expression DoResolve (ResolveContext rc) + { + throw new CompletionResult ("", new string [0]); + } + } } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/constant.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/constant.cs index ec2ee12f71..36f4a62a95 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/constant.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/constant.cs @@ -528,7 +528,7 @@ namespace Mono.CSharp { return Value ? 1 : 0; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { enc.Encode (Value); } @@ -579,7 +579,7 @@ namespace Mono.CSharp { Value = v; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { enc.Encode (Value); } @@ -679,7 +679,7 @@ namespace Mono.CSharp { Value = v; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { enc.Encode ((ushort) Value); } @@ -807,7 +807,7 @@ namespace Mono.CSharp { Value = v; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { enc.Encode (Value); } @@ -910,7 +910,7 @@ namespace Mono.CSharp { Value = v; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { enc.Encode (Value); } @@ -1023,7 +1023,7 @@ namespace Mono.CSharp { Value = v; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { enc.Encode (Value); } @@ -1132,7 +1132,7 @@ namespace Mono.CSharp { Value = v; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { enc.Encode (Value); } @@ -1308,7 +1308,7 @@ namespace Mono.CSharp { Value = v; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { enc.Encode (Value); } @@ -1425,7 +1425,7 @@ namespace Mono.CSharp { Value = v; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { enc.Encode (Value); } @@ -1556,7 +1556,7 @@ namespace Mono.CSharp { Value = v; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { enc.Encode (Value); } @@ -1680,7 +1680,7 @@ namespace Mono.CSharp { return base.ConvertImplicitly (type); } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { enc.Encode (Value); } @@ -1809,7 +1809,7 @@ namespace Mono.CSharp { Value = v; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { enc.Encode (Value); } @@ -2094,7 +2094,7 @@ namespace Mono.CSharp { ec.Emit (OpCodes.Ldstr, Value); } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { // cast to object if (type != targetType) @@ -2159,7 +2159,7 @@ namespace Mono.CSharp { return base.CreateExpressionTree (ec); } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { switch (targetType.BuiltinType) { case BuiltinTypeSpec.Type.Object: @@ -2180,7 +2180,7 @@ namespace Mono.CSharp { break; } - base.EncodeAttributeValue (rc, enc, targetType); + base.EncodeAttributeValue (rc, enc, targetType, parameterType); } public override void Emit (EmitContext ec) @@ -2320,6 +2320,11 @@ namespace Mono.CSharp { } } + public override bool ContainsEmitWithAwait () + { + return side_effect.ContainsEmitWithAwait (); + } + public override object GetValue () { return value.GetValue (); @@ -2347,6 +2352,11 @@ namespace Mono.CSharp { value.EmitSideEffect (ec); } + public override void FlowAnalysis (FlowAnalysisContext fc) + { + side_effect.FlowAnalysis (fc); + } + public override bool IsDefaultValue { get { return value.IsDefaultValue; } } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs index 8cbaeff0c5..873c92d24e 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs @@ -664,7 +664,7 @@ namespace Mono.CSharp ConstructorScope = 1 << 3, - AsyncBody = 1 << 4 + AsyncBody = 1 << 4, } // utility helper for CheckExpr, UnCheckExpr, Checked and Unchecked statements diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/convert.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/convert.cs index 6fc03b11d9..00be96b40a 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/convert.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/convert.cs @@ -71,19 +71,14 @@ namespace Mono.CSharp { // From T to a type parameter U, provided T depends on U // if (target_type.IsGenericParameter) { - if (expr_type.TypeArguments != null) { - foreach (var targ in expr_type.TypeArguments) { - if (!TypeSpecComparer.Override.IsEqual (target_type, targ)) - continue; - - if (expr == null) - return EmptyExpression.Null; + if (expr_type.TypeArguments != null && expr_type.HasDependencyOn (target_type)) { + if (expr == null) + return EmptyExpression.Null; - if (expr_type.IsReferenceType && !((TypeParameterSpec)target_type).IsReferenceType) - return new BoxedCast (expr, target_type); + if (expr_type.IsReferenceType && !((TypeParameterSpec) target_type).IsReferenceType) + return new BoxedCast (expr, target_type); - return new ClassCast (expr, target_type); - } + return new ClassCast (expr, target_type); } return null; @@ -131,38 +126,39 @@ namespace Mono.CSharp { return null; } - static Expression ExplicitTypeParameterConversion (Expression source, TypeSpec source_type, TypeSpec target_type) + static Expression ExplicitTypeParameterConversionFromT (Expression source, TypeSpec source_type, TypeSpec target_type) { var target_tp = target_type as TypeParameterSpec; if (target_tp != null) { - if (target_tp.TypeArguments != null) { - foreach (var targ in target_tp.TypeArguments) { - if (!TypeSpecComparer.Override.IsEqual (source_type, targ)) - continue; - - return source == null ? EmptyExpression.Null : new ClassCast (source, target_type); - } - } -/* - if (target_tp.Interfaces != null) { - foreach (TypeSpec iface in target_tp.Interfaces) { - if (!TypeManager.IsGenericParameter (iface)) - continue; - - if (TypeManager.IsSubclassOf (source_type, iface)) - return source == null ? EmptyExpression.Null : new ClassCast (source, target_type, true); - } + // + // From a type parameter U to T, provided T depends on U + // + if (target_tp.TypeArguments != null && target_tp.HasDependencyOn (source_type)) { + return source == null ? EmptyExpression.Null : new ClassCast (source, target_type); } -*/ - return null; } + // + // From T to any interface-type I provided there is not already an implicit conversion from T to I + // if (target_type.IsInterface) return source == null ? EmptyExpression.Null : new ClassCast (source, target_type, true); return null; } + static Expression ExplicitTypeParameterConversionToT (Expression source, TypeSpec source_type, TypeParameterSpec target_type) + { + // + // From the effective base class C of T to T and from any base class of C to T + // + var effective = target_type.GetEffectiveBase (); + if (TypeSpecComparer.IsEqual (effective, source_type) || TypeSpec.IsBaseClass (effective, source_type, false)) + return source == null ? EmptyExpression.Null : new ClassCast (source, target_type); + + return null; + } + public static Expression ImplicitReferenceConversion (Expression expr, TypeSpec target_type, bool explicit_cast) { TypeSpec expr_type = expr.Type; @@ -1467,6 +1463,7 @@ namespace Mono.CSharp { return e; source.Error_ValueCannotBeConverted (ec, target_type, false); + return null; } @@ -1820,10 +1817,10 @@ namespace Mono.CSharp { return source == null ? EmptyExpression.Null : new UnboxCast (source, target_type); // - // Explicit type parameter conversion. + // Explicit type parameter conversion from T // if (source_type.Kind == MemberKind.TypeParameter) - return ExplicitTypeParameterConversion (source, source_type, target_type); + return ExplicitTypeParameterConversionFromT (source, source_type, target_type); bool target_is_value_type = target_type.Kind == MemberKind.Struct || target_type.Kind == MemberKind.Enum; @@ -1857,6 +1854,9 @@ namespace Mono.CSharp { // From any interface-type S to to any class type T, provided T is not // sealed, or provided T implements S. // + // This also covers Explicit conversions involving type parameters + // section From any interface type to T + // if (source_type.Kind == MemberKind.Interface) { if (!target_type.IsSealed || target_type.ImplementsInterface (source_type, true)) { if (source == null) @@ -1901,10 +1901,23 @@ namespace Mono.CSharp { if (source_array.Rank == target_array.Rank) { source_type = source_array.Element; - if (!TypeSpec.IsReferenceType (source_type)) - return null; - var target_element = target_array.Element; + + // + // LAMESPEC: Type parameters are special cased somehow but + // only when both source and target elements are type parameters + // + if ((source_type.Kind & target_element.Kind & MemberKind.TypeParameter) == MemberKind.TypeParameter) { + // + // Conversion is allowed unless source element type has struct constrain + // + if (TypeSpec.IsValueType (source_type)) + return null; + } else { + if (!TypeSpec.IsReferenceType (source_type)) + return null; + } + if (!TypeSpec.IsReferenceType (target_element)) return null; @@ -1979,6 +1992,10 @@ namespace Mono.CSharp { return source == null ? EmptyExpression.Null : new ClassCast (source, target_type); } + var tps = target_type as TypeParameterSpec; + if (tps != null) + return ExplicitTypeParameterConversionToT (source, source_type, tps); + return null; } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs index e8e4cfa0f7..64b8c1f09d 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs @@ -37,7 +37,8 @@ namespace Mono.CSharp Arglist = 1 << 5, DefaultValue = 1 << 6, - All = Ref | Out | This | Params | Arglist | DefaultValue + All = Ref | Out | This | Params | Arglist | DefaultValue, + PrimaryConstructor = Ref | Out | Params | DefaultValue } static readonly object ModifierNone = 0; @@ -302,7 +303,7 @@ namespace Mono.CSharp //t "$$10 :", //t "$$11 :", //t "$$12 :", -//t "struct_declaration : opt_attributes opt_modifiers opt_partial STRUCT $$8 type_declaration_name $$9 opt_class_base opt_type_parameter_constraints_clauses $$10 OPEN_BRACE $$11 opt_class_member_declarations CLOSE_BRACE $$12 opt_semicolon", +//t "struct_declaration : opt_attributes opt_modifiers opt_partial STRUCT $$8 type_declaration_name $$9 opt_primary_parameters opt_class_base opt_type_parameter_constraints_clauses $$10 OPEN_BRACE $$11 opt_class_member_declarations CLOSE_BRACE $$12 opt_semicolon", //t "struct_declaration : opt_attributes opt_modifiers opt_partial STRUCT error", //t "$$13 :", //t "constant_declaration : opt_attributes opt_modifiers CONST type IDENTIFIER $$13 constant_initializer opt_constant_declarators SEMICOLON", @@ -634,6 +635,7 @@ namespace Mono.CSharp //t "member_access : primary_expression DOT identifier_inside_body opt_type_argument_list", //t "member_access : builtin_types DOT identifier_inside_body opt_type_argument_list", //t "member_access : BASE DOT identifier_inside_body opt_type_argument_list", +//t "member_access : AWAIT DOT identifier_inside_body opt_type_argument_list", //t "member_access : qualified_alias_member identifier_inside_body opt_type_argument_list", //t "member_access : primary_expression DOT GENERATE_COMPLETION", //t "member_access : primary_expression DOT IDENTIFIER GENERATE_COMPLETION", @@ -699,12 +701,15 @@ namespace Mono.CSharp //t "$$64 :", //t "new_expr_type : $$64 simple_type", //t "anonymous_type_expression : NEW OPEN_BRACE anonymous_type_parameters_opt_comma CLOSE_BRACE", +//t "anonymous_type_expression : NEW OPEN_BRACE GENERATE_COMPLETION", //t "anonymous_type_parameters_opt_comma : anonymous_type_parameters_opt", //t "anonymous_type_parameters_opt_comma : anonymous_type_parameters COMMA", //t "anonymous_type_parameters_opt :", //t "anonymous_type_parameters_opt : anonymous_type_parameters", //t "anonymous_type_parameters : anonymous_type_parameter", //t "anonymous_type_parameters : anonymous_type_parameters COMMA anonymous_type_parameter", +//t "anonymous_type_parameters : COMPLETE_COMPLETION", +//t "anonymous_type_parameters : anonymous_type_parameter COMPLETE_COMPLETION", //t "anonymous_type_parameter : identifier_inside_body ASSIGN variable_initializer", //t "anonymous_type_parameter : identifier_inside_body", //t "anonymous_type_parameter : member_access", @@ -789,6 +794,8 @@ namespace Mono.CSharp //t "additive_expression : additive_expression MINUS error", //t "additive_expression : additive_expression AS error", //t "additive_expression : additive_expression IS error", +//t "additive_expression : AWAIT IS type", +//t "additive_expression : AWAIT AS type", //t "shift_expression : additive_expression", //t "shift_expression : shift_expression OP_SHIFT_LEFT additive_expression", //t "shift_expression : shift_expression OP_SHIFT_RIGHT additive_expression", @@ -878,11 +885,19 @@ namespace Mono.CSharp //t "undocumented_expressions : MAKEREF open_parens_any expression CLOSE_PARENS", //t "constant_expression : expression", //t "boolean_expression : expression", +//t "opt_primary_parameters :", +//t "opt_primary_parameters : primary_parameters", +//t "primary_parameters : OPEN_PARENS opt_formal_parameter_list CLOSE_PARENS", +//t "opt_primary_parameters_with_class_base :", +//t "opt_primary_parameters_with_class_base : class_base", +//t "opt_primary_parameters_with_class_base : primary_parameters", //t "$$77 :", +//t "opt_primary_parameters_with_class_base : primary_parameters class_base OPEN_PARENS $$77 opt_argument_list CLOSE_PARENS", //t "$$78 :", //t "$$79 :", //t "$$80 :", -//t "class_declaration : opt_attributes opt_modifiers opt_partial CLASS $$77 type_declaration_name $$78 opt_class_base opt_type_parameter_constraints_clauses $$79 OPEN_BRACE opt_class_member_declarations CLOSE_BRACE $$80 opt_semicolon", +//t "$$81 :", +//t "class_declaration : opt_attributes opt_modifiers opt_partial CLASS $$78 type_declaration_name $$79 opt_primary_parameters_with_class_base opt_type_parameter_constraints_clauses $$80 OPEN_BRACE opt_class_member_declarations CLOSE_BRACE $$81 opt_semicolon", //t "opt_partial :", //t "opt_partial : PARTIAL", //t "opt_modifiers :", @@ -905,8 +920,9 @@ namespace Mono.CSharp //t "modifier : UNSAFE", //t "modifier : ASYNC", //t "opt_class_base :", -//t "opt_class_base : COLON type_list", -//t "opt_class_base : COLON type_list error", +//t "opt_class_base : class_base", +//t "class_base : COLON type_list", +//t "class_base : COLON type_list error", //t "opt_type_parameter_constraints_clauses :", //t "opt_type_parameter_constraints_clauses : type_parameter_constraints_clauses", //t "type_parameter_constraints_clauses : type_parameter_constraints_clause", @@ -923,15 +939,15 @@ namespace Mono.CSharp //t "opt_type_parameter_variance : type_parameter_variance", //t "type_parameter_variance : OUT", //t "type_parameter_variance : IN", -//t "$$81 :", -//t "block : OPEN_BRACE $$81 opt_statement_list block_end", +//t "$$82 :", +//t "block : OPEN_BRACE $$82 opt_statement_list block_end", //t "block_end : CLOSE_BRACE", //t "block_end : COMPLETE_COMPLETION", -//t "$$82 :", -//t "block_prepared : OPEN_BRACE $$82 opt_statement_list CLOSE_BRACE", -//t "block_prepared : CLOSE_BRACE", //t "$$83 :", -//t "block_prepared_strict : OPEN_BRACE $$83 opt_statement_list CLOSE_BRACE", +//t "block_prepared : OPEN_BRACE $$83 opt_statement_list CLOSE_BRACE", +//t "block_prepared : CLOSE_BRACE", +//t "$$84 :", +//t "block_prepared_strict : OPEN_BRACE $$84 opt_statement_list CLOSE_BRACE", //t "opt_statement_list :", //t "opt_statement_list : statement_list", //t "statement_list : statement", @@ -977,8 +993,8 @@ namespace Mono.CSharp //t "embedded_statement : labeled_statement", //t "embedded_statement : error", //t "empty_statement : SEMICOLON", -//t "$$84 :", -//t "labeled_statement : identifier_inside_body COLON $$84 statement", +//t "$$85 :", +//t "labeled_statement : identifier_inside_body COLON $$85 statement", //t "variable_type : variable_type_simple", //t "variable_type : variable_type_simple rank_specifiers", //t "variable_type_simple : primary_expression_or_type opt_nullable", @@ -992,10 +1008,10 @@ namespace Mono.CSharp //t "pointer_star : STAR", //t "identifier_inside_body : IDENTIFIER", //t "identifier_inside_body : AWAIT", -//t "$$85 :", -//t "block_variable_declaration : variable_type identifier_inside_body $$85 opt_local_variable_initializer opt_variable_declarators semicolon_or_handle_error_close_brace", //t "$$86 :", -//t "block_variable_declaration : CONST variable_type identifier_inside_body $$86 const_variable_initializer opt_const_declarators SEMICOLON", +//t "block_variable_declaration : variable_type identifier_inside_body $$86 opt_local_variable_initializer opt_variable_declarators semicolon_or_handle_error_close_brace", +//t "$$87 :", +//t "block_variable_declaration : CONST variable_type identifier_inside_body $$87 const_variable_initializer opt_const_declarators SEMICOLON", //t "semicolon_or_handle_error_close_brace : SEMICOLON", //t "semicolon_or_handle_error_close_brace : CLOSE_BRACE", //t "opt_local_variable_initializer :", @@ -1032,8 +1048,8 @@ namespace Mono.CSharp //t "if_statement : IF open_parens_any boolean_expression CLOSE_PARENS embedded_statement", //t "if_statement : IF open_parens_any boolean_expression CLOSE_PARENS embedded_statement ELSE embedded_statement", //t "if_statement : IF open_parens_any boolean_expression error", -//t "$$87 :", -//t "switch_statement : SWITCH open_parens_any expression CLOSE_PARENS OPEN_BRACE $$87 opt_switch_sections CLOSE_BRACE", +//t "$$88 :", +//t "switch_statement : SWITCH open_parens_any expression CLOSE_PARENS OPEN_BRACE $$88 opt_switch_sections CLOSE_BRACE", //t "switch_statement : SWITCH open_parens_any expression error", //t "opt_switch_sections :", //t "opt_switch_sections : switch_sections", @@ -1055,20 +1071,20 @@ namespace Mono.CSharp //t "do_statement : DO embedded_statement WHILE open_parens_any boolean_expression CLOSE_PARENS SEMICOLON", //t "do_statement : DO embedded_statement error", //t "do_statement : DO embedded_statement WHILE open_parens_any boolean_expression error", -//t "$$88 :", -//t "for_statement : FOR open_parens_any $$88 for_statement_cont", //t "$$89 :", -//t "for_statement_cont : opt_for_initializer SEMICOLON $$89 for_statement_condition", -//t "for_statement_cont : opt_for_initializer CLOSE_PARENS", +//t "for_statement : FOR open_parens_any $$89 for_statement_cont", //t "$$90 :", -//t "for_statement_condition : opt_for_condition SEMICOLON $$90 for_statement_end", +//t "for_statement_cont : opt_for_initializer SEMICOLON $$90 for_statement_condition", +//t "for_statement_cont : opt_for_initializer CLOSE_PARENS", +//t "$$91 :", +//t "for_statement_condition : opt_for_condition SEMICOLON $$91 for_statement_end", //t "for_statement_condition : boolean_expression CLOSE_PARENS", //t "for_statement_end : opt_for_iterator CLOSE_PARENS embedded_statement", //t "for_statement_end : error", //t "opt_for_initializer :", //t "opt_for_initializer : for_initializer", -//t "$$91 :", -//t "for_initializer : variable_type identifier_inside_body $$91 opt_local_variable_initializer opt_variable_declarators", +//t "$$92 :", +//t "for_initializer : variable_type identifier_inside_body $$92 opt_local_variable_initializer opt_variable_declarators", //t "for_initializer : statement_expression_list", //t "opt_for_condition :", //t "opt_for_condition : boolean_expression", @@ -1079,8 +1095,8 @@ namespace Mono.CSharp //t "statement_expression_list : statement_expression_list COMMA statement_expression", //t "foreach_statement : FOREACH open_parens_any type error", //t "foreach_statement : FOREACH open_parens_any type identifier_inside_body error", -//t "$$92 :", -//t "foreach_statement : FOREACH open_parens_any type identifier_inside_body IN expression CLOSE_PARENS $$92 embedded_statement", +//t "$$93 :", +//t "foreach_statement : FOREACH open_parens_any type identifier_inside_body IN expression CLOSE_PARENS $$93 embedded_statement", //t "foreach_statement : FOREACH open_parens_any type identifier_inside_body error", //t "foreach_statement : FOREACH open_parens_any type error", //t "jump_statement : break_statement", @@ -1114,23 +1130,25 @@ namespace Mono.CSharp //t "catch_clauses : catch_clauses catch_clause", //t "opt_identifier :", //t "opt_identifier : identifier_inside_body", -//t "catch_clause : CATCH block", -//t "$$93 :", -//t "catch_clause : CATCH open_parens_any type opt_identifier CLOSE_PARENS $$93 block_prepared_strict", +//t "catch_clause : CATCH opt_catch_filter block", +//t "$$94 :", +//t "catch_clause : CATCH open_parens_any type opt_identifier CLOSE_PARENS $$94 opt_catch_filter block_prepared", //t "catch_clause : CATCH open_parens_any error", //t "catch_clause : CATCH open_parens_any type opt_identifier CLOSE_PARENS error", +//t "opt_catch_filter :", +//t "opt_catch_filter : IF open_parens_any expression CLOSE_PARENS", //t "checked_statement : CHECKED block", //t "unchecked_statement : UNCHECKED block", -//t "$$94 :", -//t "unsafe_statement : UNSAFE $$94 block", +//t "$$95 :", +//t "unsafe_statement : UNSAFE $$95 block", //t "lock_statement : LOCK open_parens_any expression CLOSE_PARENS embedded_statement", //t "lock_statement : LOCK open_parens_any expression error", -//t "$$95 :", //t "$$96 :", -//t "fixed_statement : FIXED open_parens_any variable_type identifier_inside_body $$95 using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators CLOSE_PARENS $$96 embedded_statement", //t "$$97 :", +//t "fixed_statement : FIXED open_parens_any variable_type identifier_inside_body $$96 using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators CLOSE_PARENS $$97 embedded_statement", //t "$$98 :", -//t "using_statement : USING open_parens_any variable_type identifier_inside_body $$97 using_initialization CLOSE_PARENS $$98 embedded_statement", +//t "$$99 :", +//t "using_statement : USING open_parens_any variable_type identifier_inside_body $$98 using_initialization CLOSE_PARENS $$99 embedded_statement", //t "using_statement : USING open_parens_any expression CLOSE_PARENS embedded_statement", //t "using_statement : USING open_parens_any expression error", //t "using_initialization : using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators", @@ -1145,20 +1163,20 @@ namespace Mono.CSharp //t "first_from_clause : FROM_FIRST type identifier_inside_body IN expression", //t "nested_from_clause : FROM identifier_inside_body IN expression", //t "nested_from_clause : FROM type identifier_inside_body IN expression", -//t "$$99 :", -//t "from_clause : FROM identifier_inside_body IN $$99 expression_or_error", //t "$$100 :", -//t "from_clause : FROM type identifier_inside_body IN $$100 expression_or_error", +//t "from_clause : FROM identifier_inside_body IN $$100 expression_or_error", +//t "$$101 :", +//t "from_clause : FROM type identifier_inside_body IN $$101 expression_or_error", //t "query_body : query_body_clauses select_or_group_clause opt_query_continuation", //t "query_body : select_or_group_clause opt_query_continuation", //t "query_body : query_body_clauses COMPLETE_COMPLETION", //t "query_body : query_body_clauses error", //t "query_body : error", -//t "$$101 :", -//t "select_or_group_clause : SELECT $$101 expression_or_error", //t "$$102 :", +//t "select_or_group_clause : SELECT $$102 expression_or_error", //t "$$103 :", -//t "select_or_group_clause : GROUP $$102 expression_or_error $$103 by_expression", +//t "$$104 :", +//t "select_or_group_clause : GROUP $$103 expression_or_error $$104 by_expression", //t "by_expression : BY expression_or_error", //t "by_expression : error", //t "query_body_clauses : query_body_clause", @@ -1168,28 +1186,28 @@ namespace Mono.CSharp //t "query_body_clause : where_clause", //t "query_body_clause : join_clause", //t "query_body_clause : orderby_clause", -//t "$$104 :", -//t "let_clause : LET identifier_inside_body ASSIGN $$104 expression_or_error", //t "$$105 :", -//t "where_clause : WHERE $$105 expression_or_error", +//t "let_clause : LET identifier_inside_body ASSIGN $$105 expression_or_error", //t "$$106 :", +//t "where_clause : WHERE $$106 expression_or_error", //t "$$107 :", //t "$$108 :", -//t "join_clause : JOIN identifier_inside_body IN $$106 expression_or_error ON $$107 expression_or_error EQUALS $$108 expression_or_error opt_join_into", //t "$$109 :", +//t "join_clause : JOIN identifier_inside_body IN $$107 expression_or_error ON $$108 expression_or_error EQUALS $$109 expression_or_error opt_join_into", //t "$$110 :", //t "$$111 :", -//t "join_clause : JOIN type identifier_inside_body IN $$109 expression_or_error ON $$110 expression_or_error EQUALS $$111 expression_or_error opt_join_into", +//t "$$112 :", +//t "join_clause : JOIN type identifier_inside_body IN $$110 expression_or_error ON $$111 expression_or_error EQUALS $$112 expression_or_error opt_join_into", //t "opt_join_into :", //t "opt_join_into : INTO identifier_inside_body", -//t "$$112 :", -//t "orderby_clause : ORDERBY $$112 orderings", -//t "orderings : order_by", //t "$$113 :", -//t "orderings : order_by COMMA $$113 orderings_then_by", -//t "orderings_then_by : then_by", +//t "orderby_clause : ORDERBY $$113 orderings", +//t "orderings : order_by", //t "$$114 :", -//t "orderings_then_by : orderings_then_by COMMA $$114 then_by", +//t "orderings : order_by COMMA $$114 orderings_then_by", +//t "orderings_then_by : then_by", +//t "$$115 :", +//t "orderings_then_by : orderings_then_by COMMA $$115 then_by", //t "order_by : expression", //t "order_by : expression ASCENDING", //t "order_by : expression DESCENDING", @@ -1197,12 +1215,12 @@ namespace Mono.CSharp //t "then_by : expression ASCENDING", //t "then_by : expression DESCENDING", //t "opt_query_continuation :", -//t "$$115 :", -//t "opt_query_continuation : INTO identifier_inside_body $$115 query_body", +//t "$$116 :", +//t "opt_query_continuation : INTO identifier_inside_body $$116 query_body", //t "interactive_parsing : EVAL_STATEMENT_PARSER EOF", //t "interactive_parsing : EVAL_USING_DECLARATIONS_UNIT_PARSER using_directives opt_COMPLETE_COMPLETION", -//t "$$116 :", -//t "interactive_parsing : EVAL_STATEMENT_PARSER $$116 interactive_statement_list opt_COMPLETE_COMPLETION", +//t "$$117 :", +//t "interactive_parsing : EVAL_STATEMENT_PARSER $$117 interactive_statement_list opt_COMPLETE_COMPLETION", //t "interactive_parsing : EVAL_COMPILATION_UNIT_PARSER interactive_compilation_unit", //t "interactive_compilation_unit : opt_extern_alias_directives opt_using_directives", //t "interactive_compilation_unit : opt_extern_alias_directives opt_using_directives namespace_or_type_declarations", @@ -1213,18 +1231,19 @@ namespace Mono.CSharp //t "documentation_parsing : DOC_SEE doc_cref", //t "doc_cref : doc_type_declaration_name opt_doc_method_sig", //t "doc_cref : builtin_types opt_doc_method_sig", +//t "doc_cref : VOID opt_doc_method_sig", //t "doc_cref : builtin_types DOT IDENTIFIER opt_doc_method_sig", //t "doc_cref : doc_type_declaration_name DOT THIS", -//t "$$117 :", -//t "doc_cref : doc_type_declaration_name DOT THIS OPEN_BRACKET $$117 opt_doc_parameters CLOSE_BRACKET", +//t "$$118 :", +//t "doc_cref : doc_type_declaration_name DOT THIS OPEN_BRACKET $$118 opt_doc_parameters CLOSE_BRACKET", //t "doc_cref : EXPLICIT OPERATOR type opt_doc_method_sig", //t "doc_cref : IMPLICIT OPERATOR type opt_doc_method_sig", //t "doc_cref : OPERATOR overloadable_operator opt_doc_method_sig", //t "doc_type_declaration_name : type_declaration_name", //t "doc_type_declaration_name : doc_type_declaration_name DOT type_declaration_name", //t "opt_doc_method_sig :", -//t "$$118 :", -//t "opt_doc_method_sig : OPEN_PARENS $$118 opt_doc_parameters CLOSE_PARENS", +//t "$$119 :", +//t "opt_doc_method_sig : OPEN_PARENS $$119 opt_doc_parameters CLOSE_PARENS", //t "opt_doc_parameters :", //t "opt_doc_parameters : doc_parameters", //t "doc_parameters : doc_parameter", @@ -1473,20 +1492,20 @@ namespace Mono.CSharp yyVal = yyV > yyTop ? null : yyVals[yyV]; // yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); switch (yyN) { case 1: -#line 387 "cs-parser.jay" +#line 388 "cs-parser.jay" { Lexer.check_incorrect_doc_comment (); } break; case 2: -#line 388 "cs-parser.jay" +#line 389 "cs-parser.jay" { Lexer.CompleteOnEOF = false; } break; case 6: case_6(); break; case 7: -#line 407 "cs-parser.jay" +#line 408 "cs-parser.jay" { module.AddAttributes ((Attributes) yyVals[0+yyTop], current_namespace); } @@ -1498,7 +1517,7 @@ case 13: case_13(); break; case 14: -#line 452 "cs-parser.jay" +#line 453 "cs-parser.jay" { Error_SyntaxError (yyToken); } @@ -1543,7 +1562,7 @@ case 43: case_43(); break; case 44: -#line 636 "cs-parser.jay" +#line 637 "cs-parser.jay" { current_namespace.DeclarationFound = true; } @@ -1582,15 +1601,15 @@ case 62: case_62(); break; case 63: -#line 761 "cs-parser.jay" +#line 762 "cs-parser.jay" { yyVal = "event"; PushLocation (GetLocation (yyVals[0+yyTop])); } break; case 64: -#line 762 "cs-parser.jay" +#line 763 "cs-parser.jay" { yyVal = "return"; PushLocation (GetLocation (yyVals[0+yyTop])); } break; case 65: -#line 769 "cs-parser.jay" +#line 770 "cs-parser.jay" { yyVal = new List (4) { (Attribute) yyVals[0+yyTop] }; } @@ -1599,7 +1618,7 @@ case 66: case_66(); break; case 67: -#line 786 "cs-parser.jay" +#line 787 "cs-parser.jay" { ++lexer.parsing_block; } @@ -1608,14 +1627,14 @@ case 68: case_68(); break; case 70: -#line 814 "cs-parser.jay" +#line 815 "cs-parser.jay" { yyVal = null; HadAttributeParens = false; } break; case 71: case_71(); break; case 72: -#line 826 "cs-parser.jay" +#line 827 "cs-parser.jay" { yyVal = null; } break; case 73: @@ -1631,7 +1650,7 @@ case 76: case_76(); break; case 77: -#line 870 "cs-parser.jay" +#line 871 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } @@ -1640,7 +1659,7 @@ case 79: case_79(); break; case 80: -#line 883 "cs-parser.jay" +#line 884 "cs-parser.jay" { ++lexer.parsing_block; } @@ -1652,38 +1671,32 @@ case 82: case_82(); break; case 83: -#line 909 "cs-parser.jay" +#line 910 "cs-parser.jay" { yyVal = null; } break; case 84: -#line 913 "cs-parser.jay" +#line 914 "cs-parser.jay" { yyVal = Argument.AType.Ref; } break; case 85: -#line 917 "cs-parser.jay" +#line 918 "cs-parser.jay" { yyVal = Argument.AType.Out; } break; case 88: -#line 929 "cs-parser.jay" - { - lexer.parsing_modifiers = true; - } + case_88(); break; case 89: -#line 933 "cs-parser.jay" - { - lexer.parsing_modifiers = true; - } + case_89(); break; case 102: case_102(); break; case 103: -#line 964 "cs-parser.jay" +#line 967 "cs-parser.jay" { } break; @@ -1703,7 +1716,7 @@ case 108: case_108(); break; case 109: -#line 1008 "cs-parser.jay" +#line 1017 "cs-parser.jay" { Error_SyntaxError (yyToken); } @@ -1718,13 +1731,13 @@ case 112: case_112(); break; case 115: -#line 1057 "cs-parser.jay" +#line 1066 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 116: -#line 1061 "cs-parser.jay" +#line 1070 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } @@ -1733,7 +1746,7 @@ case 117: case_117(); break; case 118: -#line 1077 "cs-parser.jay" +#line 1086 "cs-parser.jay" { ++lexer.parsing_block; } @@ -1757,7 +1770,7 @@ case 126: case_126(); break; case 127: -#line 1156 "cs-parser.jay" +#line 1165 "cs-parser.jay" { report.Error (1641, GetLocation (yyVals[-1+yyTop]), "A fixed size buffer field must have the array size specifier after the field name"); } @@ -1769,13 +1782,13 @@ case 130: case_130(); break; case 133: -#line 1186 "cs-parser.jay" +#line 1195 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 134: -#line 1190 "cs-parser.jay" +#line 1199 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } @@ -1784,7 +1797,7 @@ case 135: case_135(); break; case 136: -#line 1203 "cs-parser.jay" +#line 1212 "cs-parser.jay" { ++lexer.parsing_block; } @@ -1793,13 +1806,13 @@ case 137: case_137(); break; case 140: -#line 1222 "cs-parser.jay" +#line 1231 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 141: -#line 1226 "cs-parser.jay" +#line 1235 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } @@ -1808,7 +1821,7 @@ case 142: case_142(); break; case 143: -#line 1242 "cs-parser.jay" +#line 1251 "cs-parser.jay" { ++lexer.parsing_block; } @@ -1829,7 +1842,7 @@ case 150: case_150(); break; case 151: -#line 1310 "cs-parser.jay" +#line 1319 "cs-parser.jay" { valid_param_mod = ParameterModifierType.All; } @@ -1841,7 +1854,7 @@ case 153: case_153(); break; case 154: -#line 1349 "cs-parser.jay" +#line 1358 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } @@ -1850,7 +1863,7 @@ case 155: case_155(); break; case 156: -#line 1359 "cs-parser.jay" +#line 1368 "cs-parser.jay" { lexer.ConstraintsParsing = true; } @@ -1865,11 +1878,11 @@ case 159: case_159(); break; case 161: -#line 1432 "cs-parser.jay" +#line 1441 "cs-parser.jay" { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } break; case 162: -#line 1436 "cs-parser.jay" +#line 1445 "cs-parser.jay" { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 164: @@ -1894,13 +1907,13 @@ case 170: case_170(); break; case 171: -#line 1508 "cs-parser.jay" +#line 1517 "cs-parser.jay" { yyVal = new ParametersCompiled (new Parameter[] { (Parameter) yyVals[0+yyTop] } ); } break; case 172: -#line 1512 "cs-parser.jay" +#line 1521 "cs-parser.jay" { yyVal = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation (yyVals[0+yyTop])) }, true); } @@ -1927,7 +1940,7 @@ case 179: case_179(); break; case 180: -#line 1593 "cs-parser.jay" +#line 1602 "cs-parser.jay" { ++lexer.parsing_block; } @@ -1936,11 +1949,11 @@ case 181: case_181(); break; case 182: -#line 1634 "cs-parser.jay" +#line 1643 "cs-parser.jay" { yyVal = Parameter.Modifier.NONE; } break; case 184: -#line 1642 "cs-parser.jay" +#line 1651 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -1973,7 +1986,7 @@ case 193: case_193(); break; case 194: -#line 1736 "cs-parser.jay" +#line 1745 "cs-parser.jay" { Error_DuplicateParameterModifier (GetLocation (yyVals[-1+yyTop]), Parameter.Modifier.PARAMS); } @@ -1994,7 +2007,7 @@ case 199: case_199(); break; case 200: -#line 1790 "cs-parser.jay" +#line 1799 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue; } @@ -2003,7 +2016,7 @@ case 201: case_201(); break; case 202: -#line 1819 "cs-parser.jay" +#line 1828 "cs-parser.jay" { lexer.PropertyParsing = false; } @@ -2033,7 +2046,7 @@ case 215: case_215(); break; case 216: -#line 1967 "cs-parser.jay" +#line 1976 "cs-parser.jay" { } break; @@ -2050,55 +2063,49 @@ case 220: case_220(); break; case 221: -#line 2007 "cs-parser.jay" +#line 2016 "cs-parser.jay" { Error_SyntaxError (yyToken); } break; case 224: -#line 2019 "cs-parser.jay" - { - lexer.parsing_modifiers = true; - } + case_224(); break; case 225: -#line 2023 "cs-parser.jay" - { - lexer.parsing_modifiers = true; - } + case_225(); break; case 226: -#line 2030 "cs-parser.jay" +#line 2041 "cs-parser.jay" { report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; case 227: -#line 2034 "cs-parser.jay" +#line 2045 "cs-parser.jay" { report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; case 232: -#line 2042 "cs-parser.jay" +#line 2053 "cs-parser.jay" { report.Error (567, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain operators"); } break; case 233: -#line 2046 "cs-parser.jay" +#line 2057 "cs-parser.jay" { report.Error (526, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain contructors"); } break; case 234: -#line 2050 "cs-parser.jay" +#line 2061 "cs-parser.jay" { report.Error (524, GetLocation (yyVals[0+yyTop]), "Interfaces cannot declare classes, structs, interfaces, delegates, or enumerations"); } break; case 235: -#line 2056 "cs-parser.jay" +#line 2067 "cs-parser.jay" { } break; @@ -2106,14 +2113,14 @@ case 236: case_236(); break; case 238: -#line 2089 "cs-parser.jay" +#line 2100 "cs-parser.jay" { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } break; case 240: case_240(); break; case 241: -#line 2105 "cs-parser.jay" +#line 2116 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; } @@ -2122,95 +2129,95 @@ case 242: case_242(); break; case 244: -#line 2151 "cs-parser.jay" +#line 2162 "cs-parser.jay" { yyVal = Operator.OpType.LogicalNot; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 245: -#line 2152 "cs-parser.jay" +#line 2163 "cs-parser.jay" { yyVal = Operator.OpType.OnesComplement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 246: -#line 2153 "cs-parser.jay" +#line 2164 "cs-parser.jay" { yyVal = Operator.OpType.Increment; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 247: -#line 2154 "cs-parser.jay" +#line 2165 "cs-parser.jay" { yyVal = Operator.OpType.Decrement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 248: -#line 2155 "cs-parser.jay" +#line 2166 "cs-parser.jay" { yyVal = Operator.OpType.True; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 249: -#line 2156 "cs-parser.jay" +#line 2167 "cs-parser.jay" { yyVal = Operator.OpType.False; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 250: -#line 2158 "cs-parser.jay" +#line 2169 "cs-parser.jay" { yyVal = Operator.OpType.Addition; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 251: -#line 2159 "cs-parser.jay" +#line 2170 "cs-parser.jay" { yyVal = Operator.OpType.Subtraction; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 252: -#line 2161 "cs-parser.jay" +#line 2172 "cs-parser.jay" { yyVal = Operator.OpType.Multiply; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 253: -#line 2162 "cs-parser.jay" +#line 2173 "cs-parser.jay" { yyVal = Operator.OpType.Division; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 254: -#line 2163 "cs-parser.jay" +#line 2174 "cs-parser.jay" { yyVal = Operator.OpType.Modulus; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 255: -#line 2164 "cs-parser.jay" +#line 2175 "cs-parser.jay" { yyVal = Operator.OpType.BitwiseAnd; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 256: -#line 2165 "cs-parser.jay" +#line 2176 "cs-parser.jay" { yyVal = Operator.OpType.BitwiseOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 257: -#line 2166 "cs-parser.jay" +#line 2177 "cs-parser.jay" { yyVal = Operator.OpType.ExclusiveOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 258: -#line 2167 "cs-parser.jay" +#line 2178 "cs-parser.jay" { yyVal = Operator.OpType.LeftShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 259: -#line 2168 "cs-parser.jay" +#line 2179 "cs-parser.jay" { yyVal = Operator.OpType.RightShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 260: -#line 2169 "cs-parser.jay" +#line 2180 "cs-parser.jay" { yyVal = Operator.OpType.Equality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 261: -#line 2170 "cs-parser.jay" +#line 2181 "cs-parser.jay" { yyVal = Operator.OpType.Inequality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 262: -#line 2171 "cs-parser.jay" +#line 2182 "cs-parser.jay" { yyVal = Operator.OpType.GreaterThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 263: -#line 2172 "cs-parser.jay" +#line 2183 "cs-parser.jay" { yyVal = Operator.OpType.LessThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 264: -#line 2173 "cs-parser.jay" +#line 2184 "cs-parser.jay" { yyVal = Operator.OpType.GreaterThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 265: -#line 2174 "cs-parser.jay" +#line 2185 "cs-parser.jay" { yyVal = Operator.OpType.LessThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 266: -#line 2181 "cs-parser.jay" +#line 2192 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; } @@ -2219,7 +2226,7 @@ case 267: case_267(); break; case 268: -#line 2204 "cs-parser.jay" +#line 2215 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; } @@ -2246,11 +2253,11 @@ case 275: case_275(); break; case 277: -#line 2314 "cs-parser.jay" +#line 2325 "cs-parser.jay" { current_block = null; yyVal = null; } break; case 280: -#line 2326 "cs-parser.jay" +#line 2337 "cs-parser.jay" { ++lexer.parsing_block; } @@ -2259,7 +2266,7 @@ case 281: case_281(); break; case 282: -#line 2336 "cs-parser.jay" +#line 2347 "cs-parser.jay" { ++lexer.parsing_block; } @@ -2298,7 +2305,7 @@ case 293: case_293(); break; case 295: -#line 2463 "cs-parser.jay" +#line 2474 "cs-parser.jay" { ++lexer.parsing_block; } @@ -2307,13 +2314,13 @@ case 296: case_296(); break; case 299: -#line 2481 "cs-parser.jay" +#line 2492 "cs-parser.jay" { current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 300: -#line 2485 "cs-parser.jay" +#line 2496 "cs-parser.jay" { current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } @@ -2322,7 +2329,7 @@ case 301: case_301(); break; case 302: -#line 2498 "cs-parser.jay" +#line 2509 "cs-parser.jay" { ++lexer.parsing_block; } @@ -2334,7 +2341,7 @@ case 304: case_304(); break; case 305: -#line 2523 "cs-parser.jay" +#line 2534 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -2388,7 +2395,7 @@ case 325: case_325(); break; case 328: -#line 2711 "cs-parser.jay" +#line 2722 "cs-parser.jay" { lbag.AppendToMember (current_container, GetLocation (yyVals[0+yyTop])); } @@ -2409,7 +2416,7 @@ case 334: case_334(); break; case 336: -#line 2785 "cs-parser.jay" +#line 2796 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue; } @@ -2418,7 +2425,7 @@ case 337: case_337(); break; case 338: -#line 2804 "cs-parser.jay" +#line 2815 "cs-parser.jay" { lexer.ConstraintsParsing = false; } @@ -2451,7 +2458,7 @@ case 351: case_351(); break; case 352: -#line 2910 "cs-parser.jay" +#line 2921 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } @@ -2496,13 +2503,13 @@ case 367: case_367(); break; case 369: -#line 3035 "cs-parser.jay" +#line 3046 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } break; case 370: -#line 3042 "cs-parser.jay" +#line 3053 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } @@ -2517,7 +2524,7 @@ case 376: case_376(); break; case 378: -#line 3080 "cs-parser.jay" +#line 3091 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } @@ -2526,7 +2533,7 @@ case 379: case_379(); break; case 380: -#line 3099 "cs-parser.jay" +#line 3110 "cs-parser.jay" { yyVal = new ComposedCast ((ATypeNameExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } @@ -2535,13 +2542,13 @@ case 381: case_381(); break; case 382: -#line 3108 "cs-parser.jay" +#line 3119 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 383: -#line 3112 "cs-parser.jay" +#line 3123 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } @@ -2556,63 +2563,63 @@ case 386: case_386(); break; case 387: -#line 3146 "cs-parser.jay" +#line 3157 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Object, GetLocation (yyVals[0+yyTop])); } break; case 388: -#line 3147 "cs-parser.jay" +#line 3158 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.String, GetLocation (yyVals[0+yyTop])); } break; case 389: -#line 3148 "cs-parser.jay" +#line 3159 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Bool, GetLocation (yyVals[0+yyTop])); } break; case 390: -#line 3149 "cs-parser.jay" +#line 3160 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Decimal, GetLocation (yyVals[0+yyTop])); } break; case 391: -#line 3150 "cs-parser.jay" +#line 3161 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Float, GetLocation (yyVals[0+yyTop])); } break; case 392: -#line 3151 "cs-parser.jay" +#line 3162 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Double, GetLocation (yyVals[0+yyTop])); } break; case 394: -#line 3156 "cs-parser.jay" +#line 3167 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.SByte, GetLocation (yyVals[0+yyTop])); } break; case 395: -#line 3157 "cs-parser.jay" +#line 3168 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Byte, GetLocation (yyVals[0+yyTop])); } break; case 396: -#line 3158 "cs-parser.jay" +#line 3169 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Short, GetLocation (yyVals[0+yyTop])); } break; case 397: -#line 3159 "cs-parser.jay" +#line 3170 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UShort, GetLocation (yyVals[0+yyTop])); } break; case 398: -#line 3160 "cs-parser.jay" +#line 3171 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Int, GetLocation (yyVals[0+yyTop])); } break; case 399: -#line 3161 "cs-parser.jay" +#line 3172 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UInt, GetLocation (yyVals[0+yyTop])); } break; case 400: -#line 3162 "cs-parser.jay" +#line 3173 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Long, GetLocation (yyVals[0+yyTop])); } break; case 401: -#line 3163 "cs-parser.jay" +#line 3174 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.ULong, GetLocation (yyVals[0+yyTop])); } break; case 402: -#line 3164 "cs-parser.jay" +#line 3175 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Char, GetLocation (yyVals[0+yyTop])); } break; case 423: @@ -2622,22 +2629,22 @@ case 424: case_424(); break; case 428: -#line 3211 "cs-parser.jay" +#line 3222 "cs-parser.jay" { yyVal = new NullLiteral (GetLocation (yyVals[0+yyTop])); } break; case 429: -#line 3215 "cs-parser.jay" +#line 3226 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, true, GetLocation (yyVals[0+yyTop])); } break; case 430: -#line 3216 "cs-parser.jay" +#line 3227 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation (yyVals[0+yyTop])); } break; case 435: case_435(); break; case 436: -#line 3249 "cs-parser.jay" +#line 3260 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } @@ -2655,23 +2662,23 @@ case 440: case_440(); break; case 441: -#line 3281 "cs-parser.jay" + case_441(); + break; +case 442: +#line 3298 "cs-parser.jay" { yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop])); } break; -case 442: - case_442(); - break; case 443: -#line 3289 "cs-parser.jay" + case_443(); + break; +case 444: +#line 3306 "cs-parser.jay" { yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null, lexer.Location); } break; -case 444: - case_444(); - break; case 445: case_445(); break; @@ -2682,28 +2689,28 @@ case 447: case_447(); break; case 448: -#line 3319 "cs-parser.jay" - { yyVal = null; } + case_448(); break; -case 450: - case_450(); +case 449: +#line 3336 "cs-parser.jay" + { yyVal = null; } break; case 451: case_451(); break; case 452: -#line 3341 "cs-parser.jay" - { yyVal = null; } + case_452(); break; case 453: -#line 3345 "cs-parser.jay" +#line 3358 "cs-parser.jay" + { yyVal = null; } + break; +case 454: +#line 3362 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; -case 454: - case_454(); - break; case 455: case_455(); break; @@ -2717,26 +2724,26 @@ case 458: case_458(); break; case 459: -#line 3384 "cs-parser.jay" + case_459(); + break; +case 460: +#line 3401 "cs-parser.jay" { yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop])); } break; -case 460: - case_460(); - break; case 461: case_461(); break; case 462: case_462(); break; -case 465: -#line 3415 "cs-parser.jay" - { yyVal = null; } +case 463: + case_463(); break; -case 467: - case_467(); +case 466: +#line 3432 "cs-parser.jay" + { yyVal = null; } break; case 468: case_468(); @@ -2751,14 +2758,14 @@ case 471: case_471(); break; case 472: -#line 3469 "cs-parser.jay" + case_472(); + break; +case 473: +#line 3486 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; -case 476: - case_476(); - break; case 477: case_477(); break; @@ -2768,8 +2775,8 @@ case 478: case 479: case_479(); break; -case 481: - case_481(); +case 480: + case_480(); break; case 482: case_482(); @@ -2790,38 +2797,38 @@ case 487: case_487(); break; case 488: -#line 3562 "cs-parser.jay" + case_488(); + break; +case 489: +#line 3579 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; -case 490: -#line 3570 "cs-parser.jay" +case 491: +#line 3587 "cs-parser.jay" { yyVal = new This (GetLocation (yyVals[0+yyTop])); } break; -case 491: - case_491(); - break; case 492: case_492(); break; case 493: -#line 3590 "cs-parser.jay" + case_493(); + break; +case 494: +#line 3607 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; -case 494: -#line 3597 "cs-parser.jay" +case 495: +#line 3614 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; -case 495: - case_495(); - break; case 496: case_496(); break; @@ -2841,26 +2848,29 @@ case 501: case_501(); break; case 502: -#line 3664 "cs-parser.jay" + case_502(); + break; +case 503: +#line 3681 "cs-parser.jay" { ++lexer.parsing_type; } break; -case 503: - case_503(); - break; case 504: case_504(); break; -case 507: -#line 3691 "cs-parser.jay" - { yyVal = null; } +case 505: + case_505(); break; -case 509: - case_509(); +case 506: +#line 3703 "cs-parser.jay" + { + yyVal = new EmptyCompletion (); + } break; -case 510: - case_510(); +case 509: +#line 3712 "cs-parser.jay" + { yyVal = null; } break; case 511: case_511(); @@ -2869,77 +2879,83 @@ case 512: case_512(); break; case 513: - case_513(); +#line 3734 "cs-parser.jay" + { + yyVal = new EmptyCompletion (); + } break; case 514: - case_514(); +#line 3738 "cs-parser.jay" + { + yyVal = yyVals[-1+yyTop]; + } + break; +case 515: + case_515(); + break; +case 516: + case_516(); + break; +case 517: + case_517(); break; case 518: case_518(); break; -case 519: - case_519(); +case 522: + case_522(); + break; +case 523: + case_523(); break; -case 520: - case_520(); +case 524: + case_524(); break; -case 521: -#line 3769 "cs-parser.jay" +case 525: +#line 3798 "cs-parser.jay" { yyVal = 2; } break; -case 522: -#line 3773 "cs-parser.jay" +case 526: +#line 3802 "cs-parser.jay" { yyVal = ((int) yyVals[-1+yyTop]) + 1; } break; -case 523: -#line 3780 "cs-parser.jay" +case 527: +#line 3809 "cs-parser.jay" { yyVal = null; } break; -case 524: -#line 3784 "cs-parser.jay" +case 528: +#line 3813 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; -case 525: - case_525(); +case 529: + case_529(); break; -case 526: - case_526(); +case 530: + case_530(); break; -case 527: - case_527(); +case 531: + case_531(); break; -case 528: - case_528(); +case 532: + case_532(); break; -case 529: -#line 3828 "cs-parser.jay" +case 533: +#line 3857 "cs-parser.jay" { lexer.TypeOfParsing = true; } break; -case 530: - case_530(); - break; -case 533: - case_533(); - break; case 534: case_534(); break; -case 535: - case_535(); - break; -case 536: - case_536(); - break; case 537: case_537(); break; @@ -2974,64 +2990,64 @@ case 547: case_547(); break; case 548: -#line 3971 "cs-parser.jay" - { - start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], false, GetLocation (yyVals[-1+yyTop])); - } + case_548(); break; case 549: case_549(); break; case 550: -#line 3984 "cs-parser.jay" - { - start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], true, GetLocation (yyVals[-2+yyTop])); - } + case_550(); break; case 551: case_551(); break; case 552: -#line 4001 "cs-parser.jay" +#line 4000 "cs-parser.jay" { - yyVal = ParametersCompiled.Undefined; + start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], false, GetLocation (yyVals[-1+yyTop])); } break; +case 553: + case_553(); + break; case 554: -#line 4009 "cs-parser.jay" +#line 4013 "cs-parser.jay" { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], true, GetLocation (yyVals[-2+yyTop])); } break; case 555: case_555(); break; case 556: - case_556(); +#line 4030 "cs-parser.jay" + { + yyVal = ParametersCompiled.Undefined; + } break; case 558: -#line 4035 "cs-parser.jay" +#line 4038 "cs-parser.jay" { - yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 559: -#line 4039 "cs-parser.jay" - { - yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_559(); break; case 560: case_560(); break; -case 561: - case_561(); - break; case 562: - case_562(); +#line 4064 "cs-parser.jay" + { + yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 563: - case_563(); +#line 4068 "cs-parser.jay" + { + yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 564: case_564(); @@ -3039,60 +3055,63 @@ case 564: case 565: case_565(); break; +case 566: + case_566(); + break; case 567: -#line 4103 "cs-parser.jay" + case_567(); + break; +case 568: + case_568(); + break; +case 569: + case_569(); + break; +case 571: +#line 4132 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 568: -#line 4107 "cs-parser.jay" +case 572: +#line 4136 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 569: -#line 4111 "cs-parser.jay" +case 573: +#line 4140 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 570: -#line 4115 "cs-parser.jay" +case 574: +#line 4144 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 571: -#line 4119 "cs-parser.jay" +case 575: +#line 4148 "cs-parser.jay" { yyVal = new Indirection ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 572: -#line 4123 "cs-parser.jay" +case 576: +#line 4152 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 573: - case_573(); - break; -case 574: - case_574(); - break; -case 575: - case_575(); - break; -case 576: - case_576(); - break; case 577: case_577(); break; case 578: case_578(); break; +case 579: + case_579(); + break; case 580: case_580(); break; @@ -3102,15 +3121,15 @@ case 581: case 582: case_582(); break; -case 583: - case_583(); - break; case 584: case_584(); break; case 585: case_585(); break; +case 586: + case_586(); + break; case 587: case_587(); break; @@ -3118,16 +3137,7 @@ case 588: case_588(); break; case 589: -#line 4217 "cs-parser.jay" - { - yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } - break; -case 590: -#line 4221 "cs-parser.jay" - { - yyVal = new Is ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_589(); break; case 591: case_591(); @@ -3136,10 +3146,19 @@ case 592: case_592(); break; case 593: - case_593(); +#line 4246 "cs-parser.jay" + { + yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 594: - case_594(); +#line 4250 "cs-parser.jay" + { + yyVal = new Is ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 595: + case_595(); break; case 596: case_596(); @@ -3153,8 +3172,8 @@ case 598: case 599: case_599(); break; -case 601: - case_601(); +case 600: + case_600(); break; case 602: case_602(); @@ -3168,15 +3187,15 @@ case 604: case 605: case_605(); break; -case 606: - case_606(); - break; case 607: case_607(); break; case 608: case_608(); break; +case 609: + case_609(); + break; case 610: case_610(); break; @@ -3189,12 +3208,15 @@ case 612: case 613: case_613(); break; -case 615: - case_615(); +case 614: + case_614(); break; case 616: case_616(); break; +case 617: + case_617(); + break; case 618: case_618(); break; @@ -3222,8 +3244,8 @@ case 628: case 630: case_630(); break; -case 632: - case_632(); +case 631: + case_631(); break; case 633: case_633(); @@ -3231,15 +3253,9 @@ case 633: case 634: case_634(); break; -case 635: - case_635(); - break; case 636: case_636(); break; -case 637: - case_637(); - break; case 638: case_638(); break; @@ -3286,50 +3302,47 @@ case 652: case_652(); break; case 653: -#line 4587 "cs-parser.jay" - { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } + case_653(); break; case 654: case_654(); break; case 655: -#line 4598 "cs-parser.jay" - { - start_block (Location.Null); - } + case_655(); break; case 656: case_656(); break; +case 657: + case_657(); + break; case 658: case_658(); break; +case 659: +#line 4626 "cs-parser.jay" + { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } + break; case 660: case_660(); break; case 661: - case_661(); +#line 4637 "cs-parser.jay" + { + start_block (Location.Null); + } break; case 662: case_662(); break; -case 663: - case_663(); - break; case 664: case_664(); break; -case 665: - case_665(); - break; case 666: case_666(); break; case 667: -#line 4665 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; - } + case_667(); break; case 668: case_668(); @@ -3338,10 +3351,7 @@ case 669: case_669(); break; case 670: -#line 4679 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; - } + case_670(); break; case 671: case_671(); @@ -3349,30 +3359,34 @@ case 671: case 672: case_672(); break; -case 678: +case 673: #line 4704 "cs-parser.jay" { - yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop])); + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; -case 679: - case_679(); - break; -case 680: - case_680(); +case 674: + case_674(); break; -case 681: - case_681(); +case 675: + case_675(); break; -case 683: -#line 4733 "cs-parser.jay" +case 676: +#line 4718 "cs-parser.jay" { - yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]); + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; +case 677: + case_677(); + break; +case 678: + case_678(); + break; case 684: -#line 4745 "cs-parser.jay" +#line 4743 "cs-parser.jay" { + yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop])); } break; case 685: @@ -3384,40 +3398,52 @@ case 686: case 687: case_687(); break; -case 688: - case_688(); - break; case 689: -#line 4792 "cs-parser.jay" - { yyVal = null; } +#line 4772 "cs-parser.jay" + { + yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]); + } break; case 690: -#line 4794 "cs-parser.jay" - { yyVal = yyVals[0+yyTop]; StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[0+yyTop])); } - break; -case 691: - case_691(); +#line 4779 "cs-parser.jay" + { + yyVal = null; + } break; case 692: -#line 4807 "cs-parser.jay" + case_692(); + break; +case 693: +#line 4797 "cs-parser.jay" { - lexer.parsing_modifiers = false; + yyVal = null; } break; case 694: - case_694(); +#line 4801 "cs-parser.jay" + { + yyVal = null; + } break; case 695: - case_695(); +#line 4805 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 696: - case_696(); +#line 4809 "cs-parser.jay" + { + ++lexer.parsing_block; + } break; case 697: case_697(); break; case 698: - case_698(); +#line 4829 "cs-parser.jay" + { + } break; case 699: case_699(); @@ -3432,19 +3458,21 @@ case 702: case_702(); break; case 703: - case_703(); +#line 4881 "cs-parser.jay" + { yyVal = null; } break; case 704: - case_704(); +#line 4883 "cs-parser.jay" + { yyVal = yyVals[0+yyTop]; StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[0+yyTop])); } break; case 705: case_705(); break; case 706: - case_706(); - break; -case 707: - case_707(); +#line 4896 "cs-parser.jay" + { + lexer.parsing_modifiers = false; + } break; case 708: case_708(); @@ -3452,17 +3480,20 @@ case 708: case 709: case_709(); break; +case 710: + case_710(); + break; case 711: case_711(); break; case 712: case_712(); break; +case 713: + case_713(); + break; case 714: -#line 4933 "cs-parser.jay" - { - yyVal = yyVals[0+yyTop]; - } + case_714(); break; case 715: case_715(); @@ -3489,22 +3520,7 @@ case 722: case_722(); break; case 723: -#line 5026 "cs-parser.jay" - { - yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop])); - } - break; -case 724: -#line 5030 "cs-parser.jay" - { - yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop])); - } - break; -case 725: -#line 5037 "cs-parser.jay" - { - yyVal = null; - } + case_723(); break; case 726: case_726(); @@ -3512,18 +3528,15 @@ case 726: case 727: case_727(); break; -case 728: - case_728(); - break; case 729: - case_729(); - break; -case 730: -#line 5082 "cs-parser.jay" +#line 5026 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; +case 730: + case_730(); + break; case 731: case_731(); break; @@ -3545,116 +3558,149 @@ case 736: case 737: case_737(); break; -case 742: -#line 5144 "cs-parser.jay" +case 738: +#line 5119 "cs-parser.jay" { - current_block.AddStatement ((Statement) yyVals[0+yyTop]); + yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop])); } break; -case 743: -#line 5148 "cs-parser.jay" +case 739: +#line 5123 "cs-parser.jay" { - current_block.AddStatement ((Statement) yyVals[0+yyTop]); + yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop])); + } + break; +case 740: +#line 5130 "cs-parser.jay" + { + yyVal = null; } break; +case 741: + case_741(); + break; +case 742: + case_742(); + break; +case 743: + case_743(); + break; +case 744: + case_744(); + break; case 745: - case_745(); +#line 5175 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 746: case_746(); break; +case 747: + case_747(); + break; +case 748: + case_748(); + break; case 749: -#line 5182 "cs-parser.jay" + case_749(); + break; +case 750: + case_750(); + break; +case 751: + case_751(); + break; +case 752: + case_752(); + break; +case 757: +#line 5237 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; -case 750: -#line 5186 "cs-parser.jay" +case 758: +#line 5241 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; -case 779: - case_779(); - break; -case 780: - case_780(); - break; -case 781: - case_781(); +case 760: + case_760(); break; -case 782: - case_782(); +case 761: + case_761(); break; -case 783: - case_783(); - break; -case 786: - case_786(); - break; -case 787: - case_787(); - break; -case 788: - case_788(); - break; -case 789: - case_789(); - break; -case 790: -#line 5330 "cs-parser.jay" +case 764: +#line 5275 "cs-parser.jay" { - yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); + current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; -case 791: -#line 5334 "cs-parser.jay" +case 765: +#line 5279 "cs-parser.jay" { - yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); + current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; -case 792: - case_792(); - break; case 794: case_794(); break; case 795: -#line 5355 "cs-parser.jay" - { - yyVal = ComposedTypeSpecifier.CreatePointer (GetLocation (yyVals[0+yyTop])); - } + case_795(); + break; +case 796: + case_796(); break; case 797: -#line 5363 "cs-parser.jay" - { - yyVal = Error_AwaitAsIdentifier (yyVals[0+yyTop]); - } + case_797(); break; case 798: case_798(); break; -case 799: - case_799(); - break; -case 800: - case_800(); - break; case 801: case_801(); break; +case 802: + case_802(); + break; case 803: case_803(); break; +case 804: + case_804(); + break; case 805: - case_805(); +#line 5423 "cs-parser.jay" + { + yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); + } break; case 806: - case_806(); +#line 5427 "cs-parser.jay" + { + yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); + } + break; +case 807: + case_807(); + break; +case 809: + case_809(); break; case 810: - case_810(); +#line 5448 "cs-parser.jay" + { + yyVal = ComposedTypeSpecifier.CreatePointer (GetLocation (yyVals[0+yyTop])); + } + break; +case 812: +#line 5456 "cs-parser.jay" + { + yyVal = Error_AwaitAsIdentifier (yyVals[0+yyTop]); + } break; case 813: case_813(); @@ -3663,64 +3709,43 @@ case 814: case_814(); break; case 815: -#line 5477 "cs-parser.jay" - { - report.Error (145, lexer.Location, "A const field requires a value to be provided"); - } + case_815(); break; case 816: case_816(); break; -case 821: - case_821(); +case 818: + case_818(); break; -case 823: - case_823(); +case 820: + case_820(); break; -case 824: - case_824(); +case 821: + case_821(); break; case 825: case_825(); break; -case 826: -#line 5527 "cs-parser.jay" - { yyVal = yyVals[-1+yyTop]; } - break; -case 827: - case_827(); - break; case 828: -#line 5537 "cs-parser.jay" - { yyVal = yyVals[-1+yyTop]; } + case_828(); break; case 829: -#line 5538 "cs-parser.jay" - { yyVal = yyVals[-1+yyTop]; } + case_829(); break; case 830: - case_830(); +#line 5570 "cs-parser.jay" + { + report.Error (145, lexer.Location, "A const field requires a value to be provided"); + } break; case 831: case_831(); break; -case 832: - case_832(); - break; -case 835: - case_835(); - break; case 836: case_836(); break; -case 837: - case_837(); - break; case 838: -#line 5610 "cs-parser.jay" - { - start_block (GetLocation (yyVals[0+yyTop])); - } + case_838(); break; case 839: case_839(); @@ -3729,95 +3754,88 @@ case 840: case_840(); break; case 841: +#line 5620 "cs-parser.jay" + { yyVal = yyVals[-1+yyTop]; } + break; +case 842: + case_842(); + break; +case 843: #line 5630 "cs-parser.jay" - { - report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); - } + { yyVal = yyVals[-1+yyTop]; } + break; +case 844: +#line 5631 "cs-parser.jay" + { yyVal = yyVals[-1+yyTop]; } break; case 845: -#line 5640 "cs-parser.jay" - { - Error_SyntaxError (yyToken); - } + case_845(); + break; +case 846: + case_846(); break; case 847: case_847(); break; -case 848: -#line 5657 "cs-parser.jay" - { - current_block.AddStatement ((Statement) yyVals[0+yyTop]); - } - break; -case 849: - case_849(); - break; case 850: case_850(); break; case 851: -#line 5674 "cs-parser.jay" + case_851(); + break; +case 852: + case_852(); + break; +case 853: +#line 5703 "cs-parser.jay" { - yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); + start_block (GetLocation (yyVals[0+yyTop])); } break; -case 856: - case_856(); - break; -case 857: - case_857(); +case 854: + case_854(); break; -case 858: - case_858(); +case 855: + case_855(); break; -case 859: - case_859(); +case 856: +#line 5723 "cs-parser.jay" + { + report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); + } break; case 860: - case_860(); - break; -case 861: - case_861(); - break; -case 862: -#line 5735 "cs-parser.jay" +#line 5733 "cs-parser.jay" { - yyVal = yyVals[0+yyTop]; + Error_SyntaxError (yyToken); } break; -case 863: - case_863(); +case 862: + case_862(); break; -case 864: +case 863: #line 5750 "cs-parser.jay" { - yyVal = yyVals[0+yyTop]; + current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; +case 864: + case_864(); + break; case 865: case_865(); break; case 866: - case_866(); - break; -case 867: -#line 5771 "cs-parser.jay" +#line 5767 "cs-parser.jay" { - yyVal = yyVals[0+yyTop]; + yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); } break; -case 868: - case_868(); - break; -case 869: - case_869(); - break; -case 870: - case_870(); - break; case 871: -#line 5805 "cs-parser.jay" - { yyVal = new EmptyStatement (lexer.Location); } + case_871(); + break; +case 872: + case_872(); break; case 873: case_873(); @@ -3825,16 +3843,38 @@ case 873: case 874: case_874(); break; +case 875: + case_875(); + break; case 876: -#line 5829 "cs-parser.jay" - { yyVal = null; } + case_876(); + break; +case 877: +#line 5828 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 878: -#line 5834 "cs-parser.jay" - { yyVal = new EmptyStatement (lexer.Location); } + case_878(); + break; +case 879: +#line 5843 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } + break; +case 880: + case_880(); + break; +case 881: + case_881(); break; case 882: - case_882(); +#line 5864 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 883: case_883(); @@ -3846,19 +3886,22 @@ case 885: case_885(); break; case 886: - case_886(); - break; -case 887: - case_887(); +#line 5898 "cs-parser.jay" + { yyVal = new EmptyStatement (lexer.Location); } break; case 888: case_888(); break; -case 895: - case_895(); +case 889: + case_889(); break; -case 896: - case_896(); +case 891: +#line 5922 "cs-parser.jay" + { yyVal = null; } + break; +case 893: +#line 5927 "cs-parser.jay" + { yyVal = new EmptyStatement (lexer.Location); } break; case 897: case_897(); @@ -3881,29 +3924,14 @@ case 902: case 903: case_903(); break; -case 904: - case_904(); - break; -case 905: - case_905(); - break; -case 906: - case_906(); +case 910: + case_910(); break; -case 907: - case_907(); - break; -case 908: - case_908(); - break; -case 909: - case_909(); +case 911: + case_911(); break; case 912: -#line 6080 "cs-parser.jay" - { - yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); - } + case_912(); break; case 913: case_913(); @@ -3920,20 +3948,20 @@ case 916: case 917: case_917(); break; +case 918: + case_918(); + break; +case 919: + case_919(); + break; case 920: -#line 6129 "cs-parser.jay" - { - yyVal = new Catch ((ExplicitBlock) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_920(); break; case 921: case_921(); break; case 922: -#line 6148 "cs-parser.jay" - { - yyVal = yyVals[-1+yyTop]; - } + case_922(); break; case 923: case_923(); @@ -3941,26 +3969,14 @@ case 923: case 924: case_924(); break; -case 925: -#line 6189 "cs-parser.jay" - { - yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } - break; -case 926: -#line 6196 "cs-parser.jay" +case 927: +#line 6173 "cs-parser.jay" { - yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); } break; -case 927: - case_927(); - break; case 928: -#line 6206 "cs-parser.jay" - { - yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); - } + case_928(); break; case 929: case_929(); @@ -3974,12 +3990,6 @@ case 931: case 932: case_932(); break; -case 933: - case_933(); - break; -case 934: - case_934(); - break; case 935: case_935(); break; @@ -3992,26 +4002,32 @@ case 937: case 938: case_938(); break; -case 940: - case_940(); +case 939: + case_939(); break; case 941: -#line 6311 "cs-parser.jay" - { - Error_MissingInitializer (lexer.Location); - } + case_941(); break; case 942: - case_942(); +#line 6298 "cs-parser.jay" + { + yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 943: - case_943(); +#line 6305 "cs-parser.jay" + { + yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 944: case_944(); break; case 945: - case_945(); +#line 6315 "cs-parser.jay" + { + yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); + } break; case 946: case_946(); @@ -4029,19 +4045,13 @@ case 950: case_950(); break; case 951: -#line 6416 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } + case_951(); break; case 952: case_952(); break; case 953: -#line 6431 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } + case_953(); break; case 954: case_954(); @@ -4049,20 +4059,20 @@ case 954: case 955: case_955(); break; -case 956: - case_956(); +case 957: + case_957(); break; case 958: - case_958(); +#line 6420 "cs-parser.jay" + { + Error_MissingInitializer (lexer.Location); + } break; case 959: case_959(); break; case 960: -#line 6495 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } + case_960(); break; case 961: case_961(); @@ -4077,35 +4087,50 @@ case 964: case_964(); break; case 965: -#line 6534 "cs-parser.jay" - { - yyVal = new object[] { yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]) }; - } + case_965(); break; case 966: case_966(); break; +case 967: + case_967(); + break; case 968: - case_968(); +#line 6525 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + break; +case 969: + case_969(); break; -case 974: -#line 6563 "cs-parser.jay" +case 970: +#line 6540 "cs-parser.jay" { - current_block = new Linq.QueryBlock (current_block, lexer.Location); + current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; +case 971: + case_971(); + break; +case 972: + case_972(); + break; +case 973: + case_973(); + break; case 975: case_975(); break; case 976: -#line 6582 "cs-parser.jay" + case_976(); + break; +case 977: +#line 6604 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; -case 977: - case_977(); - break; case 978: case_978(); break; @@ -4119,32 +4144,32 @@ case 981: case_981(); break; case 982: - case_982(); +#line 6643 "cs-parser.jay" + { + yyVal = new object[] { yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]) }; + } break; case 983: case_983(); break; -case 984: - case_984(); - break; case 985: case_985(); break; -case 987: - case_987(); - break; -case 988: - case_988(); - break; -case 989: - case_989(); - break; case 991: - case_991(); +#line 6672 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } break; case 992: case_992(); break; +case 993: +#line 6691 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + break; case 994: case_994(); break; @@ -4152,10 +4177,7 @@ case 995: case_995(); break; case 996: -#line 6783 "cs-parser.jay" - { - yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); - } + case_996(); break; case 997: case_997(); @@ -4164,10 +4186,7 @@ case 998: case_998(); break; case 999: -#line 6800 "cs-parser.jay" - { - yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); - } + case_999(); break; case 1000: case_1000(); @@ -4175,92 +4194,143 @@ case 1000: case 1001: case_1001(); break; -case 1003: - case_1003(); +case 1002: + case_1002(); break; case 1004: case_1004(); break; -case 1007: - case_1007(); +case 1005: + case_1005(); + break; +case 1006: + case_1006(); break; case 1008: case_1008(); break; +case 1009: + case_1009(); + break; +case 1011: + case_1011(); + break; +case 1012: + case_1012(); + break; +case 1013: +#line 6892 "cs-parser.jay" + { + yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); + } + break; +case 1014: + case_1014(); + break; +case 1015: + case_1015(); + break; case 1016: -#line 6925 "cs-parser.jay" +#line 6909 "cs-parser.jay" { - module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; + yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } break; case 1017: -#line 6932 "cs-parser.jay" + case_1017(); + break; +case 1018: + case_1018(); + break; +case 1020: + case_1020(); + break; +case 1021: + case_1021(); + break; +case 1024: + case_1024(); + break; +case 1025: + case_1025(); + break; +case 1033: +#line 7034 "cs-parser.jay" + { + module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; + } + break; +case 1034: +#line 7041 "cs-parser.jay" { module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; } break; -case 1018: - case_1018(); +case 1035: + case_1035(); break; -case 1019: - case_1019(); +case 1036: + case_1036(); break; -case 1020: -#line 6949 "cs-parser.jay" +case 1037: + case_1037(); + break; +case 1038: +#line 7064 "cs-parser.jay" { yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], MemberCache.IndexerNameAlias, Location.Null); } break; -case 1021: -#line 6953 "cs-parser.jay" +case 1039: +#line 7068 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; -case 1022: - case_1022(); +case 1040: + case_1040(); break; -case 1023: - case_1023(); +case 1041: + case_1041(); break; -case 1024: - case_1024(); +case 1042: + case_1042(); break; -case 1025: - case_1025(); +case 1043: + case_1043(); break; -case 1027: -#line 6989 "cs-parser.jay" +case 1045: +#line 7104 "cs-parser.jay" { yyVal = new MemberName (((MemberName) yyVals[-2+yyTop]), (MemberName) yyVals[0+yyTop]); } break; -case 1029: -#line 6997 "cs-parser.jay" +case 1047: +#line 7112 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; -case 1030: -#line 7001 "cs-parser.jay" +case 1048: +#line 7116 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; -case 1031: -#line 7008 "cs-parser.jay" +case 1049: +#line 7123 "cs-parser.jay" { yyVal = new List (0); } break; -case 1033: - case_1033(); +case 1051: + case_1051(); break; -case 1034: - case_1034(); +case 1052: + case_1052(); break; -case 1035: - case_1035(); +case 1053: + case_1053(); break; #line default } @@ -4298,7 +4368,7 @@ case 1035: All more than 3 lines long rules are wrapped into a method */ void case_6() -#line 395 "cs-parser.jay" +#line 396 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { Attributes attrs = (Attributes) yyVals[0+yyTop]; @@ -4310,7 +4380,7 @@ void case_6() } void case_8() -#line 409 "cs-parser.jay" +#line 410 "cs-parser.jay" { if (yyToken == Token.EXTERN_ALIAS) report.Error (439, lexer.Location, "An extern alias declaration must precede all other elements"); @@ -4319,7 +4389,7 @@ void case_8() } void case_13() -#line 429 "cs-parser.jay" +#line 430 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; @@ -4342,14 +4412,14 @@ void case_13() } void case_17() -#line 462 "cs-parser.jay" +#line 463 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } void case_18() -#line 470 "cs-parser.jay" +#line 471 "cs-parser.jay" { var un = new UsingNamespace ((ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); current_namespace.AddUsing (un); @@ -4358,7 +4428,7 @@ void case_18() } void case_19() -#line 477 "cs-parser.jay" +#line 478 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; if (lang_version != LanguageVersion.ISO_1 && lt.Value == "global") { @@ -4372,14 +4442,14 @@ void case_19() } void case_20() -#line 489 "cs-parser.jay" +#line 490 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } void case_21() -#line 502 "cs-parser.jay" +#line 503 "cs-parser.jay" { Attributes attrs = (Attributes) yyVals[-2+yyTop]; var name = (MemberName) yyVals[0+yyTop]; @@ -4409,14 +4479,14 @@ void case_21() } void case_22() -#line 530 "cs-parser.jay" +#line 531 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } void case_23() -#line 535 "cs-parser.jay" +#line 536 "cs-parser.jay" { if (yyVals[0+yyTop] != null) lbag.AddLocation (current_container, GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); @@ -4427,7 +4497,7 @@ void case_23() } void case_24() -#line 544 "cs-parser.jay" +#line 545 "cs-parser.jay" { report.Error (1514, lexer.Location, "Unexpected symbol `{0}', expecting `.' or `{{'", GetSymbolName (yyToken)); @@ -4438,21 +4508,21 @@ void case_24() } void case_27() -#line 558 "cs-parser.jay" +#line 559 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } void case_28() -#line 566 "cs-parser.jay" +#line 567 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new MemberName (lt.Value, lt.Location); } void case_29() -#line 571 "cs-parser.jay" +#line 572 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], lt.Value, lt.Location); @@ -4460,14 +4530,14 @@ void case_29() } void case_30() -#line 577 "cs-parser.jay" +#line 578 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new MemberName ("", lexer.Location); } void case_43() -#line 615 "cs-parser.jay" +#line 616 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { TypeContainer ds = (TypeContainer)yyVals[0+yyTop]; @@ -4488,7 +4558,7 @@ void case_43() } void case_45() -#line 637 "cs-parser.jay" +#line 638 "cs-parser.jay" { current_namespace.UnattachedAttributes = (Attributes) yyVals[-1+yyTop]; report.Error (1518, lexer.Location, "Attributes must be attached to class, delegate, enum, interface or struct"); @@ -4496,14 +4566,14 @@ void case_45() } void case_53() -#line 670 "cs-parser.jay" +#line 671 "cs-parser.jay" { var sect = (List) yyVals[0+yyTop]; yyVal = new Attributes (sect); } void case_54() -#line 675 "cs-parser.jay" +#line 676 "cs-parser.jay" { Attributes attrs = yyVals[-1+yyTop] as Attributes; var sect = (List) yyVals[0+yyTop]; @@ -4515,21 +4585,21 @@ void case_54() } void case_55() -#line 688 "cs-parser.jay" +#line 689 "cs-parser.jay" { PushLocation (GetLocation (yyVals[0+yyTop])); lexer.parsing_attribute_section = true; } void case_56() -#line 693 "cs-parser.jay" +#line 694 "cs-parser.jay" { lexer.parsing_attribute_section = false; yyVal = yyVals[0+yyTop]; } void case_57() -#line 701 "cs-parser.jay" +#line 702 "cs-parser.jay" { current_attr_target = (string) yyVals[-1+yyTop]; if (current_attr_target == "assembly" || current_attr_target == "module") { @@ -4538,7 +4608,7 @@ void case_57() } void case_58() -#line 708 "cs-parser.jay" +#line 709 "cs-parser.jay" { /* when attribute target is invalid*/ if (current_attr_target == string.Empty) @@ -4559,7 +4629,7 @@ void case_58() } void case_59() -#line 727 "cs-parser.jay" +#line 728 "cs-parser.jay" { yyVal = yyVals[-2+yyTop]; lbag.InsertLocation (yyVal, 0, PopLocation ()); @@ -4571,7 +4641,7 @@ void case_59() } void case_60() -#line 737 "cs-parser.jay" +#line 738 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -4584,14 +4654,14 @@ void case_60() } void case_61() -#line 748 "cs-parser.jay" +#line 749 "cs-parser.jay" { CheckAttributeTarget (yyToken, GetTokenName (yyToken), GetLocation (yyVals[0+yyTop])); yyVal = null; } void case_62() -#line 756 "cs-parser.jay" +#line 757 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = CheckAttributeTarget (yyToken, lt.Value, lt.Location); @@ -4599,7 +4669,7 @@ void case_62() } void case_66() -#line 771 "cs-parser.jay" +#line 772 "cs-parser.jay" { var attrs = (List) yyVals[-2+yyTop]; if (attrs != null) { @@ -4611,7 +4681,7 @@ void case_66() } void case_68() -#line 788 "cs-parser.jay" +#line 789 "cs-parser.jay" { --lexer.parsing_block; @@ -4633,7 +4703,7 @@ void case_68() } void case_71() -#line 816 "cs-parser.jay" +#line 817 "cs-parser.jay" { savedAttrParenOpenLocation = GetLocation (yyVals[-2+yyTop]); savedAttrParenCloseLocation = GetLocation (yyVals[0+yyTop]); @@ -4642,7 +4712,7 @@ void case_71() } void case_73() -#line 828 "cs-parser.jay" +#line 829 "cs-parser.jay" { Arguments a = new Arguments (4); a.Add ((Argument) yyVals[0+yyTop]); @@ -4650,7 +4720,7 @@ void case_73() } void case_74() -#line 834 "cs-parser.jay" +#line 835 "cs-parser.jay" { Arguments a = new Arguments (4); a.Add ((Argument) yyVals[0+yyTop]); @@ -4658,7 +4728,7 @@ void case_74() } void case_75() -#line 840 "cs-parser.jay" +#line 841 "cs-parser.jay" { Arguments[] o = (Arguments[]) yyVals[-2+yyTop]; if (o [1] != null) { @@ -4675,7 +4745,7 @@ void case_75() } void case_76() -#line 855 "cs-parser.jay" +#line 856 "cs-parser.jay" { Arguments[] o = (Arguments[]) yyVals[-2+yyTop]; if (o [1] == null) { @@ -4687,14 +4757,14 @@ void case_76() } void case_79() -#line 873 "cs-parser.jay" +#line 874 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } void case_81() -#line 885 "cs-parser.jay" +#line 886 "cs-parser.jay" { --lexer.parsing_block; var lt = (LocatedToken) yyVals[-3+yyTop]; @@ -4703,7 +4773,7 @@ void case_81() } void case_82() -#line 895 "cs-parser.jay" +#line 896 "cs-parser.jay" { if (lang_version <= LanguageVersion.V_3) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "named argument"); @@ -4716,8 +4786,22 @@ void case_82() lbag.AddLocation (yyVal, GetLocation(yyVals[-2+yyTop])); } +void case_88() +#line 928 "cs-parser.jay" +{ + lexer.parsing_modifiers = true; + lexer.parsing_block = 0; + } + +void case_89() +#line 933 "cs-parser.jay" +{ + lexer.parsing_modifiers = true; + lexer.parsing_block = 0; + } + void case_102() -#line 950 "cs-parser.jay" +#line 953 "cs-parser.jay" { report.Error (1519, lexer.Location, "Unexpected symbol `{0}' in class, struct, or interface member declaration", GetSymbolName (yyToken)); @@ -4726,18 +4810,23 @@ void case_102() } void case_104() -#line 966 "cs-parser.jay" +#line 969 "cs-parser.jay" { lexer.ConstraintsParsing = true; + valid_param_mod = ParameterModifierType.PrimaryConstructor; push_current_container (new Struct (current_container, (MemberName) yyVals[0+yyTop], (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), yyVals[-3+yyTop]); lbag.AddMember (current_container, GetModifierLocations (), GetLocation (yyVals[-2+yyTop])); } void case_105() -#line 973 "cs-parser.jay" +#line 978 "cs-parser.jay" { + valid_param_mod = 0; lexer.ConstraintsParsing = false; + if (yyVals[-2+yyTop] != null) + current_type.PrimaryConstructorParameters = (ParametersCompiled) yyVals[-2+yyTop]; + if (yyVals[0+yyTop] != null) current_container.SetConstraints ((List) yyVals[0+yyTop]); @@ -4749,14 +4838,14 @@ void case_105() } void case_106() -#line 986 "cs-parser.jay" +#line 995 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } void case_107() -#line 991 "cs-parser.jay" +#line 1000 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) @@ -4764,9 +4853,9 @@ void case_107() } void case_108() -#line 997 "cs-parser.jay" +#line 1006 "cs-parser.jay" { - if (yyVals[0+yyTop] == null) { + if (yyVals[-1+yyTop] == null) { lbag.AppendToMember (current_container, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop])); } else { lbag.AppendToMember (current_container, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); @@ -4775,7 +4864,7 @@ void case_108() } void case_110() -#line 1015 "cs-parser.jay" +#line 1024 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var mod = (Modifiers) yyVals[-3+yyTop]; @@ -4790,7 +4879,7 @@ void case_110() } void case_111() -#line 1028 "cs-parser.jay" +#line 1037 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); @@ -4803,7 +4892,7 @@ void case_111() } void case_112() -#line 1041 "cs-parser.jay" +#line 1050 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -4811,7 +4900,7 @@ void case_112() } void case_117() -#line 1066 "cs-parser.jay" +#line 1075 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (ConstInitializer) yyVals[0+yyTop]); @@ -4819,7 +4908,7 @@ void case_117() } void case_119() -#line 1079 "cs-parser.jay" +#line 1088 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstInitializer (current_field, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -4827,14 +4916,14 @@ void case_119() } void case_120() -#line 1085 "cs-parser.jay" +#line 1094 "cs-parser.jay" { report.Error (145, lexer.Location, "A const field requires a value to be provided"); yyVal = null; } void case_123() -#line 1100 "cs-parser.jay" +#line 1109 "cs-parser.jay" { lexer.parsing_generic_declaration = false; @@ -4849,7 +4938,7 @@ void case_123() } void case_124() -#line 1115 "cs-parser.jay" +#line 1124 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); @@ -4862,7 +4951,7 @@ void case_124() } void case_125() -#line 1128 "cs-parser.jay" +#line 1137 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "fixed size buffers"); @@ -4875,7 +4964,7 @@ void case_125() } void case_126() -#line 1139 "cs-parser.jay" +#line 1148 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); @@ -4889,7 +4978,7 @@ void case_126() } void case_129() -#line 1162 "cs-parser.jay" +#line 1171 "cs-parser.jay" { ++lexer.parsing_block; current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; @@ -4897,7 +4986,7 @@ void case_129() } void case_130() -#line 1168 "cs-parser.jay" +#line 1177 "cs-parser.jay" { --lexer.parsing_block; current_field.Initializer = (Expression) yyVals[0+yyTop]; @@ -4907,7 +4996,7 @@ void case_130() } void case_135() -#line 1195 "cs-parser.jay" +#line 1204 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), null); @@ -4915,7 +5004,7 @@ void case_135() } void case_137() -#line 1205 "cs-parser.jay" +#line 1214 "cs-parser.jay" { --lexer.parsing_block; var lt = (LocatedToken) yyVals[-3+yyTop]; @@ -4924,7 +5013,7 @@ void case_137() } void case_142() -#line 1231 "cs-parser.jay" +#line 1240 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (ConstInitializer) yyVals[0+yyTop]); @@ -4932,7 +5021,7 @@ void case_142() } void case_144() -#line 1244 "cs-parser.jay" +#line 1253 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstInitializer (current_field, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); @@ -4940,14 +5029,14 @@ void case_144() } void case_145() -#line 1250 "cs-parser.jay" +#line 1259 "cs-parser.jay" { report.Error (443, lexer.Location, "Value or constant expected"); yyVal = null; } void case_148() -#line 1260 "cs-parser.jay" +#line 1269 "cs-parser.jay" { /* It has to be here for the parent to safely restore artificial block*/ Error_SyntaxError (yyToken); @@ -4955,7 +5044,7 @@ void case_148() } void case_149() -#line 1269 "cs-parser.jay" +#line 1278 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.NotAllowed; @@ -4964,7 +5053,7 @@ void case_149() } void case_150() -#line 1276 "cs-parser.jay" +#line 1285 "cs-parser.jay" { Method method = (Method) yyVals[-2+yyTop]; method.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -4992,7 +5081,7 @@ void case_150() } void case_152() -#line 1312 "cs-parser.jay" +#line 1321 "cs-parser.jay" { valid_param_mod = 0; MemberName name = (MemberName) yyVals[-4+yyTop]; @@ -5015,7 +5104,7 @@ void case_152() } void case_153() -#line 1333 "cs-parser.jay" +#line 1342 "cs-parser.jay" { lexer.ConstraintsParsing = false; @@ -5028,14 +5117,14 @@ void case_153() } void case_155() -#line 1352 "cs-parser.jay" +#line 1361 "cs-parser.jay" { lexer.parsing_generic_declaration = false; valid_param_mod = ParameterModifierType.All; } void case_157() -#line 1361 "cs-parser.jay" +#line 1370 "cs-parser.jay" { lexer.ConstraintsParsing = false; valid_param_mod = 0; @@ -5065,7 +5154,7 @@ void case_157() } void case_158() -#line 1392 "cs-parser.jay" +#line 1401 "cs-parser.jay" { MemberName name = (MemberName) yyVals[-3+yyTop]; report.Error (1585, name.Location, @@ -5085,7 +5174,7 @@ void case_158() } void case_159() -#line 1413 "cs-parser.jay" +#line 1422 "cs-parser.jay" { Error_SyntaxError (yyToken); current_local_parameters = ParametersCompiled.Undefined; @@ -5103,7 +5192,7 @@ void case_159() } void case_164() -#line 1442 "cs-parser.jay" +#line 1451 "cs-parser.jay" { var pars_list = (List) yyVals[0+yyTop]; yyVal = new ParametersCompiled (pars_list.ToArray ()); @@ -5111,7 +5200,7 @@ void case_164() } void case_165() -#line 1448 "cs-parser.jay" +#line 1457 "cs-parser.jay" { var pars_list = (List) yyVals[-2+yyTop]; pars_list.Add ((Parameter) yyVals[0+yyTop]); @@ -5122,7 +5211,7 @@ void case_165() } void case_166() -#line 1457 "cs-parser.jay" +#line 1466 "cs-parser.jay" { var pars_list = (List) yyVals[-2+yyTop]; pars_list.Add (new ArglistParameter (GetLocation (yyVals[0+yyTop]))); @@ -5133,7 +5222,7 @@ void case_166() } void case_167() -#line 1466 "cs-parser.jay" +#line 1475 "cs-parser.jay" { if (yyVals[-2+yyTop] != null) report.Error (231, ((Parameter) yyVals[-2+yyTop]).Location, "A params parameter must be the last parameter in a formal parameter list"); @@ -5143,7 +5232,7 @@ void case_167() } void case_168() -#line 1474 "cs-parser.jay" +#line 1483 "cs-parser.jay" { if (yyVals[-2+yyTop] != null) report.Error (231, ((Parameter) yyVals[-2+yyTop]).Location, "A params parameter must be the last parameter in a formal parameter list"); @@ -5158,7 +5247,7 @@ void case_168() } void case_169() -#line 1487 "cs-parser.jay" +#line 1496 "cs-parser.jay" { report.Error (257, GetLocation (yyVals[-2+yyTop]), "An __arglist parameter must be the last parameter in a formal parameter list"); @@ -5167,7 +5256,7 @@ void case_169() } void case_170() -#line 1494 "cs-parser.jay" +#line 1503 "cs-parser.jay" { report.Error (257, GetLocation (yyVals[-2+yyTop]), "An __arglist parameter must be the last parameter in a formal parameter list"); @@ -5181,14 +5270,14 @@ void case_170() } void case_173() -#line 1514 "cs-parser.jay" +#line 1523 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = ParametersCompiled.EmptyReadOnlyParameters; } void case_174() -#line 1522 "cs-parser.jay" +#line 1531 "cs-parser.jay" { parameters_bucket.Clear (); Parameter p = (Parameter) yyVals[0+yyTop]; @@ -5199,7 +5288,7 @@ void case_174() } void case_175() -#line 1531 "cs-parser.jay" +#line 1540 "cs-parser.jay" { var pars = (List) yyVals[-2+yyTop]; Parameter p = (Parameter) yyVals[0+yyTop]; @@ -5219,7 +5308,7 @@ void case_175() } void case_176() -#line 1555 "cs-parser.jay" +#line 1564 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Parameter.Modifier) yyVals[-2+yyTop], (Attributes) yyVals[-3+yyTop], lt.Location); @@ -5227,7 +5316,7 @@ void case_176() } void case_177() -#line 1564 "cs-parser.jay" +#line 1573 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; report.Error (1552, lt.Location, "Array type specifier, [], must appear before parameter name"); @@ -5236,7 +5325,7 @@ void case_177() } void case_178() -#line 1571 "cs-parser.jay" +#line 1580 "cs-parser.jay" { Error_SyntaxError (yyToken); Location l = GetLocation (yyVals[0+yyTop]); @@ -5244,7 +5333,7 @@ void case_178() } void case_179() -#line 1580 "cs-parser.jay" +#line 1589 "cs-parser.jay" { Error_SyntaxError (yyToken); Location l = GetLocation (yyVals[0+yyTop]); @@ -5253,7 +5342,7 @@ void case_179() } void case_181() -#line 1595 "cs-parser.jay" +#line 1604 "cs-parser.jay" { --lexer.parsing_block; if (lang_version <= LanguageVersion.V_3) { @@ -5292,7 +5381,7 @@ void case_181() } void case_185() -#line 1644 "cs-parser.jay" +#line 1653 "cs-parser.jay" { Parameter.Modifier p2 = (Parameter.Modifier)yyVals[0+yyTop]; Parameter.Modifier mod = (Parameter.Modifier)yyVals[-1+yyTop] | p2; @@ -5315,7 +5404,7 @@ void case_185() } void case_186() -#line 1668 "cs-parser.jay" +#line 1677 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Ref) == 0) Error_ParameterModifierNotValid ("ref", GetLocation (yyVals[0+yyTop])); @@ -5324,7 +5413,7 @@ void case_186() } void case_187() -#line 1675 "cs-parser.jay" +#line 1684 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Out) == 0) Error_ParameterModifierNotValid ("out", GetLocation (yyVals[0+yyTop])); @@ -5333,7 +5422,7 @@ void case_187() } void case_188() -#line 1682 "cs-parser.jay" +#line 1691 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.This) == 0) Error_ParameterModifierNotValid ("this", GetLocation (yyVals[0+yyTop])); @@ -5345,7 +5434,7 @@ void case_188() } void case_189() -#line 1695 "cs-parser.jay" +#line 1704 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new ParamsParameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Attributes) yyVals[-3+yyTop], lt.Location); @@ -5353,7 +5442,7 @@ void case_189() } void case_190() -#line 1701 "cs-parser.jay" +#line 1710 "cs-parser.jay" { report.Error (1751, GetLocation (yyVals[-4+yyTop]), "Cannot specify a default value for a parameter array"); @@ -5363,7 +5452,7 @@ void case_190() } void case_191() -#line 1709 "cs-parser.jay" +#line 1718 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -5371,7 +5460,7 @@ void case_191() } void case_192() -#line 1718 "cs-parser.jay" +#line 1727 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Params) == 0) report.Error (1670, (GetLocation (yyVals[0+yyTop])), "The `params' modifier is not allowed in current context"); @@ -5379,7 +5468,7 @@ void case_192() } void case_193() -#line 1724 "cs-parser.jay" +#line 1733 "cs-parser.jay" { Parameter.Modifier mod = (Parameter.Modifier)yyVals[0+yyTop]; if ((mod & Parameter.Modifier.This) != 0) { @@ -5391,21 +5480,21 @@ void case_193() } void case_195() -#line 1741 "cs-parser.jay" +#line 1750 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Arglist) == 0) report.Error (1669, GetLocation (yyVals[0+yyTop]), "__arglist is not valid in this context"); } void case_196() -#line 1752 "cs-parser.jay" +#line 1761 "cs-parser.jay" { if (doc_support) tmpComment = Lexer.consume_doc_comment (); } void case_197() -#line 1757 "cs-parser.jay" +#line 1766 "cs-parser.jay" { var type = (FullNamedExpression) yyVals[-3+yyTop]; current_property = new Property (current_type, type, (Modifiers) yyVals[-4+yyTop], @@ -5421,7 +5510,7 @@ void case_197() } void case_198() -#line 1771 "cs-parser.jay" +#line 1780 "cs-parser.jay" { lexer.PropertyParsing = false; @@ -5430,14 +5519,14 @@ void case_198() } void case_199() -#line 1778 "cs-parser.jay" +#line 1787 "cs-parser.jay" { lbag.AppendToMember (current_property, GetLocation (yyVals[0+yyTop])); current_property = null; } void case_201() -#line 1792 "cs-parser.jay" +#line 1801 "cs-parser.jay" { valid_param_mod = 0; var type = (FullNamedExpression) yyVals[-5+yyTop]; @@ -5464,7 +5553,7 @@ void case_201() } void case_203() -#line 1821 "cs-parser.jay" +#line 1830 "cs-parser.jay" { if (current_property.AccessorFirst != null && current_property.AccessorFirst.Block == null) ((Indexer) current_property).ParameterInfo.CheckParameters (current_property); @@ -5477,7 +5566,7 @@ void case_203() } void case_208() -#line 1840 "cs-parser.jay" +#line 1849 "cs-parser.jay" { if (yyToken == Token.CLOSE_BRACE) { report.Error (548, lexer.Location, "`{0}': property or indexer must have at least one accessor", current_property.GetSignatureForError ()); @@ -5490,7 +5579,7 @@ void case_208() } void case_209() -#line 1854 "cs-parser.jay" +#line 1863 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone && lang_version == LanguageVersion.ISO_1) { FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "access modifiers on properties"); @@ -5513,7 +5602,7 @@ void case_209() } void case_210() -#line 1875 "cs-parser.jay" +#line 1884 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { current_property.Get.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -5536,7 +5625,7 @@ void case_210() } void case_211() -#line 1899 "cs-parser.jay" +#line 1908 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone && lang_version == LanguageVersion.ISO_1) { FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "access modifiers on properties"); @@ -5564,7 +5653,7 @@ void case_211() } void case_212() -#line 1925 "cs-parser.jay" +#line 1934 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { current_property.Set.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -5587,21 +5676,21 @@ void case_212() } void case_214() -#line 1950 "cs-parser.jay" +#line 1959 "cs-parser.jay" { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } void case_215() -#line 1955 "cs-parser.jay" +#line 1964 "cs-parser.jay" { Error_SyntaxError (1043, yyToken, "Invalid accessor body"); yyVal = null; } void case_217() -#line 1969 "cs-parser.jay" +#line 1978 "cs-parser.jay" { lexer.ConstraintsParsing = true; push_current_container (new Interface (current_container, (MemberName) yyVals[0+yyTop], (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), yyVals[-3+yyTop]); @@ -5609,7 +5698,7 @@ void case_217() } void case_218() -#line 1976 "cs-parser.jay" +#line 1985 "cs-parser.jay" { lexer.ConstraintsParsing = false; @@ -5625,7 +5714,7 @@ void case_218() } void case_219() -#line 1990 "cs-parser.jay" +#line 1999 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) @@ -5633,7 +5722,7 @@ void case_219() } void case_220() -#line 1996 "cs-parser.jay" +#line 2005 "cs-parser.jay" { if (yyVals[0+yyTop] == null) { lbag.AppendToMember (current_container, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); @@ -5643,8 +5732,22 @@ void case_220() yyVal = pop_current_class (); } +void case_224() +#line 2026 "cs-parser.jay" +{ + lexer.parsing_modifiers = true; + lexer.parsing_block = 0; + } + +void case_225() +#line 2031 "cs-parser.jay" +{ + lexer.parsing_modifiers = true; + lexer.parsing_block = 0; + } + void case_236() -#line 2058 "cs-parser.jay" +#line 2069 "cs-parser.jay" { OperatorDeclaration decl = (OperatorDeclaration) yyVals[-2+yyTop]; if (decl != null) { @@ -5674,14 +5777,14 @@ void case_236() } void case_240() -#line 2095 "cs-parser.jay" +#line 2106 "cs-parser.jay" { report.Error (590, GetLocation (yyVals[0+yyTop]), "User-defined operators cannot return void"); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } void case_242() -#line 2107 "cs-parser.jay" +#line 2118 "cs-parser.jay" { valid_param_mod = 0; @@ -5723,7 +5826,7 @@ void case_242() } void case_267() -#line 2183 "cs-parser.jay" +#line 2194 "cs-parser.jay" { valid_param_mod = 0; @@ -5744,7 +5847,7 @@ void case_267() } void case_269() -#line 2206 "cs-parser.jay" +#line 2217 "cs-parser.jay" { valid_param_mod = 0; @@ -5765,7 +5868,7 @@ void case_269() } void case_270() -#line 2225 "cs-parser.jay" +#line 2236 "cs-parser.jay" { Error_SyntaxError (yyToken); current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; @@ -5773,7 +5876,7 @@ void case_270() } void case_271() -#line 2231 "cs-parser.jay" +#line 2242 "cs-parser.jay" { Error_SyntaxError (yyToken); current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; @@ -5781,7 +5884,7 @@ void case_271() } void case_272() -#line 2241 "cs-parser.jay" +#line 2252 "cs-parser.jay" { Constructor c = (Constructor) yyVals[-1+yyTop]; c.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -5795,7 +5898,7 @@ void case_272() } void case_273() -#line 2258 "cs-parser.jay" +#line 2269 "cs-parser.jay" { if (doc_support) { tmpComment = Lexer.consume_doc_comment (); @@ -5806,7 +5909,7 @@ void case_273() } void case_274() -#line 2267 "cs-parser.jay" +#line 2278 "cs-parser.jay" { valid_param_mod = 0; current_local_parameters = (ParametersCompiled) yyVals[-1+yyTop]; @@ -5837,7 +5940,7 @@ void case_274() } void case_275() -#line 2296 "cs-parser.jay" +#line 2307 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { var c = (Constructor) yyVals[-1+yyTop]; @@ -5854,7 +5957,7 @@ void case_275() } void case_281() -#line 2328 "cs-parser.jay" +#line 2339 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstructorBaseInitializer ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); @@ -5862,7 +5965,7 @@ void case_281() } void case_283() -#line 2338 "cs-parser.jay" +#line 2349 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstructorThisInitializer ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); @@ -5870,7 +5973,7 @@ void case_283() } void case_284() -#line 2344 "cs-parser.jay" +#line 2355 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ConstructorThisInitializer (null, GetLocation (yyVals[0+yyTop])); @@ -5878,14 +5981,14 @@ void case_284() } void case_285() -#line 2350 "cs-parser.jay" +#line 2361 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } void case_286() -#line 2358 "cs-parser.jay" +#line 2369 "cs-parser.jay" { if (doc_support) { tmpComment = Lexer.consume_doc_comment (); @@ -5896,7 +5999,7 @@ void case_286() } void case_287() -#line 2367 "cs-parser.jay" +#line 2378 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; if (lt.Value != current_container.MemberName.Name){ @@ -5919,7 +6022,7 @@ void case_287() } void case_288() -#line 2393 "cs-parser.jay" +#line 2404 "cs-parser.jay" { current_event_field = new EventField (current_type, (FullNamedExpression) yyVals[-1+yyTop], (Modifiers) yyVals[-3+yyTop], (MemberName) yyVals[0+yyTop], (Attributes) yyVals[-4+yyTop]); current_type.AddMember (current_event_field); @@ -5933,7 +6036,7 @@ void case_288() } void case_289() -#line 2407 "cs-parser.jay" +#line 2418 "cs-parser.jay" { if (doc_support) { current_event_field.DocComment = Lexer.consume_doc_comment (); @@ -5948,7 +6051,7 @@ void case_289() } void case_290() -#line 2423 "cs-parser.jay" +#line 2434 "cs-parser.jay" { current_event = new EventProperty (current_type, (FullNamedExpression) yyVals[-2+yyTop], (Modifiers) yyVals[-4+yyTop], (MemberName) yyVals[-1+yyTop], (Attributes) yyVals[-5+yyTop]); current_type.AddMember (current_event); @@ -5958,7 +6061,7 @@ void case_290() } void case_291() -#line 2431 "cs-parser.jay" +#line 2442 "cs-parser.jay" { if (current_container.Kind == MemberKind.Interface) report.Error (69, GetLocation (yyVals[-2+yyTop]), "Event in interface cannot have add or remove accessors"); @@ -5967,7 +6070,7 @@ void case_291() } void case_292() -#line 2438 "cs-parser.jay" +#line 2449 "cs-parser.jay" { if (doc_support) { current_event.DocComment = Lexer.consume_doc_comment (); @@ -5980,7 +6083,7 @@ void case_292() } void case_293() -#line 2451 "cs-parser.jay" +#line 2462 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -5988,7 +6091,7 @@ void case_293() } void case_296() -#line 2465 "cs-parser.jay" +#line 2476 "cs-parser.jay" { --lexer.parsing_block; savedEventAssignLocation = GetLocation (yyVals[-2+yyTop]); @@ -5996,7 +6099,7 @@ void case_296() } void case_301() -#line 2490 "cs-parser.jay" +#line 2501 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), null); @@ -6004,7 +6107,7 @@ void case_301() } void case_303() -#line 2500 "cs-parser.jay" +#line 2511 "cs-parser.jay" { --lexer.parsing_block; var lt = (LocatedToken) yyVals[-3+yyTop]; @@ -6013,7 +6116,7 @@ void case_303() } void case_304() -#line 2509 "cs-parser.jay" +#line 2520 "cs-parser.jay" { if (current_container.Kind == MemberKind.Interface) { report.Error (68, lexer.Location, "`{0}': event in interface cannot have an initializer", @@ -6027,28 +6130,28 @@ void case_304() } void case_308() -#line 2530 "cs-parser.jay" +#line 2541 "cs-parser.jay" { report.Error (65, lexer.Location, "`{0}': event property must have both add and remove accessors", current_event.GetSignatureForError ()); } void case_309() -#line 2535 "cs-parser.jay" +#line 2546 "cs-parser.jay" { report.Error (65, lexer.Location, "`{0}': event property must have both add and remove accessors", current_event.GetSignatureForError ()); } void case_310() -#line 2540 "cs-parser.jay" +#line 2551 "cs-parser.jay" { report.Error (1055, GetLocation (yyVals[0+yyTop]), "An add or remove accessor expected"); yyVal = null; } void case_311() -#line 2548 "cs-parser.jay" +#line 2559 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone) { report.Error (1609, GetLocation (yyVals[-1+yyTop]), "Modifiers cannot be placed on event accessor declarations"); @@ -6062,7 +6165,7 @@ void case_311() } void case_312() -#line 2560 "cs-parser.jay" +#line 2571 "cs-parser.jay" { lexer.EventParsing = true; @@ -6077,7 +6180,7 @@ void case_312() } void case_313() -#line 2576 "cs-parser.jay" +#line 2587 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone) { report.Error (1609, GetLocation (yyVals[-1+yyTop]), "Modifiers cannot be placed on event accessor declarations"); @@ -6091,7 +6194,7 @@ void case_313() } void case_314() -#line 2588 "cs-parser.jay" +#line 2599 "cs-parser.jay" { lexer.EventParsing = true; @@ -6106,14 +6209,14 @@ void case_314() } void case_315() -#line 2604 "cs-parser.jay" +#line 2615 "cs-parser.jay" { report.Error (73, lexer.Location, "An add or remove accessor must have a body"); yyVal = null; } void case_317() -#line 2613 "cs-parser.jay" +#line 2624 "cs-parser.jay" { current_type.UnattachedAttributes = (Attributes) yyVals[-1+yyTop]; report.Error (1519, GetLocation (yyVals[-1+yyTop]), "An attribute is missing member declaration"); @@ -6121,7 +6224,7 @@ void case_317() } void case_318() -#line 2624 "cs-parser.jay" +#line 2635 "cs-parser.jay" { report.Error (1519, lexer.Location, "Unexpected symbol `}' in class, struct, or interface member declaration"); @@ -6136,14 +6239,14 @@ void case_318() } void case_319() -#line 2644 "cs-parser.jay" +#line 2655 "cs-parser.jay" { if (doc_support) enumTypeComment = Lexer.consume_doc_comment (); } void case_320() -#line 2649 "cs-parser.jay" +#line 2660 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; @@ -6162,7 +6265,7 @@ void case_320() } void case_321() -#line 2666 "cs-parser.jay" +#line 2677 "cs-parser.jay" { lexer.parsing_modifiers = true; @@ -6172,7 +6275,7 @@ void case_321() } void case_322() -#line 2674 "cs-parser.jay" +#line 2685 "cs-parser.jay" { lbag.AppendToMember (current_container, GetLocation (yyVals[-1+yyTop])); if (yyVals[0+yyTop] != null) { @@ -6190,28 +6293,28 @@ void case_322() } void case_324() -#line 2694 "cs-parser.jay" +#line 2705 "cs-parser.jay" { savedLocation = GetLocation (yyVals[-1+yyTop]); yyVal = yyVals[0+yyTop]; } void case_325() -#line 2699 "cs-parser.jay" +#line 2710 "cs-parser.jay" { Error_TypeExpected (GetLocation (yyVals[-1+yyTop])); yyVal = null; } void case_330() -#line 2717 "cs-parser.jay" +#line 2728 "cs-parser.jay" { lbag.AppendToMember (current_container, GetLocation (yyVals[-1+yyTop])); yyVal = yyVals[0+yyTop]; } void case_331() -#line 2725 "cs-parser.jay" +#line 2736 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var em = new EnumMember ((Enum) current_type, new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-1+yyTop]); @@ -6226,7 +6329,7 @@ void case_331() } void case_332() -#line 2738 "cs-parser.jay" +#line 2749 "cs-parser.jay" { ++lexer.parsing_block; if (doc_support) { @@ -6236,7 +6339,7 @@ void case_332() } void case_333() -#line 2746 "cs-parser.jay" +#line 2757 "cs-parser.jay" { --lexer.parsing_block; @@ -6252,7 +6355,7 @@ void case_333() } void case_334() -#line 2760 "cs-parser.jay" +#line 2771 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -6269,7 +6372,7 @@ void case_334() } void case_337() -#line 2787 "cs-parser.jay" +#line 2798 "cs-parser.jay" { valid_param_mod = 0; @@ -6286,7 +6389,7 @@ void case_337() } void case_339() -#line 2806 "cs-parser.jay" +#line 2817 "cs-parser.jay" { if (doc_support) { current_delegate.DocComment = Lexer.consume_doc_comment (); @@ -6303,7 +6406,7 @@ void case_339() } void case_341() -#line 2825 "cs-parser.jay" +#line 2836 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "nullable types"); @@ -6312,7 +6415,7 @@ void case_341() } void case_343() -#line 2836 "cs-parser.jay" +#line 2847 "cs-parser.jay" { var lt1 = (LocatedToken) yyVals[-2+yyTop]; var lt2 = (LocatedToken) yyVals[-1+yyTop]; @@ -6322,7 +6425,7 @@ void case_343() } void case_345() -#line 2848 "cs-parser.jay" +#line 2859 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); @@ -6330,14 +6433,14 @@ void case_345() } void case_346() -#line 2857 "cs-parser.jay" +#line 2868 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new SimpleName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location); } void case_348() -#line 2869 "cs-parser.jay" +#line 2880 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); @@ -6350,14 +6453,14 @@ void case_348() } void case_349() -#line 2880 "cs-parser.jay" +#line 2891 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = new TypeArguments (); } void case_350() -#line 2888 "cs-parser.jay" +#line 2899 "cs-parser.jay" { TypeArguments type_args = new TypeArguments (); type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6366,7 +6469,7 @@ void case_350() } void case_351() -#line 2895 "cs-parser.jay" +#line 2906 "cs-parser.jay" { TypeArguments type_args = (TypeArguments) yyVals[-2+yyTop]; type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6375,7 +6478,7 @@ void case_351() } void case_353() -#line 2912 "cs-parser.jay" +#line 2923 "cs-parser.jay" { lexer.parsing_generic_declaration = false; var lt = (LocatedToken) yyVals[-2+yyTop]; @@ -6383,7 +6486,7 @@ void case_353() } void case_354() -#line 2921 "cs-parser.jay" +#line 2932 "cs-parser.jay" { MemberName mn = (MemberName)yyVals[0+yyTop]; if (mn.TypeParameters != null) @@ -6392,7 +6495,7 @@ void case_354() } void case_356() -#line 2932 "cs-parser.jay" +#line 2943 "cs-parser.jay" { lexer.parsing_generic_declaration = false; var lt = (LocatedToken) yyVals[-1+yyTop]; @@ -6400,21 +6503,21 @@ void case_356() } void case_357() -#line 2941 "cs-parser.jay" +#line 2952 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = new MemberName (TypeDefinition.DefaultIndexerName, GetLocation (yyVals[0+yyTop])); } void case_358() -#line 2946 "cs-parser.jay" +#line 2957 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = new MemberName (TypeDefinition.DefaultIndexerName, null, (ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } void case_359() -#line 2954 "cs-parser.jay" +#line 2965 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new SimpleName (lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); @@ -6422,7 +6525,7 @@ void case_359() } void case_360() -#line 2960 "cs-parser.jay" +#line 2971 "cs-parser.jay" { var lt1 = (LocatedToken) yyVals[-3+yyTop]; var lt2 = (LocatedToken) yyVals[-2+yyTop]; @@ -6432,7 +6535,7 @@ void case_360() } void case_361() -#line 2968 "cs-parser.jay" +#line 2979 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new MemberAccess ((ATypeNameExpression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); @@ -6440,7 +6543,7 @@ void case_361() } void case_363() -#line 2978 "cs-parser.jay" +#line 2989 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); @@ -6453,7 +6556,7 @@ void case_363() } void case_364() -#line 2992 "cs-parser.jay" +#line 3003 "cs-parser.jay" { var tparams = new TypeParameters (); tparams.Add ((TypeParameter)yyVals[0+yyTop]); @@ -6462,7 +6565,7 @@ void case_364() } void case_365() -#line 2999 "cs-parser.jay" +#line 3010 "cs-parser.jay" { var tparams = (TypeParameters) yyVals[-2+yyTop]; tparams.Add ((TypeParameter)yyVals[0+yyTop]); @@ -6471,7 +6574,7 @@ void case_365() } void case_366() -#line 3009 "cs-parser.jay" +#line 3020 "cs-parser.jay" { var lt = (LocatedToken)yyVals[0+yyTop]; var variance = (VarianceDecl) yyVals[-1+yyTop]; @@ -6481,7 +6584,7 @@ void case_366() } void case_367() -#line 3017 "cs-parser.jay" +#line 3028 "cs-parser.jay" { if (GetTokenName (yyToken) == "type") report.Error (81, GetLocation (yyVals[0+yyTop]), "Type parameter declaration must be an identifier not a type"); @@ -6492,28 +6595,28 @@ void case_367() } void case_372() -#line 3051 "cs-parser.jay" +#line 3062 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } void case_374() -#line 3060 "cs-parser.jay" +#line 3071 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } void case_376() -#line 3069 "cs-parser.jay" +#line 3080 "cs-parser.jay" { report.Error (1536, GetLocation (yyVals[0+yyTop]), "Invalid parameter type `void'"); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } void case_379() -#line 3085 "cs-parser.jay" +#line 3096 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { yyVal = new ComposedCast ((ATypeNameExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); @@ -6527,14 +6630,14 @@ void case_379() } void case_381() -#line 3101 "cs-parser.jay" +#line 3112 "cs-parser.jay" { if (yyVals[0+yyTop] != null) yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } void case_384() -#line 3117 "cs-parser.jay" +#line 3128 "cs-parser.jay" { var types = new List (2); types.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6542,7 +6645,7 @@ void case_384() } void case_385() -#line 3123 "cs-parser.jay" +#line 3134 "cs-parser.jay" { var types = (List) yyVals[-2+yyTop]; types.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6551,7 +6654,7 @@ void case_385() } void case_386() -#line 3133 "cs-parser.jay" +#line 3144 "cs-parser.jay" { if (yyVals[0+yyTop] is ComposedCast) { report.Error (1521, GetLocation (yyVals[0+yyTop]), "Invalid base type `{0}'", ((ComposedCast)yyVals[0+yyTop]).GetSignatureForError ()); @@ -6560,28 +6663,28 @@ void case_386() } void case_423() -#line 3197 "cs-parser.jay" +#line 3208 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new SimpleName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location); } void case_424() -#line 3201 "cs-parser.jay" +#line 3212 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionSimpleName (MemberName.MakeName (lt.Value, null), lt.Location); } void case_435() -#line 3242 "cs-parser.jay" +#line 3253 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_437() -#line 3254 "cs-parser.jay" +#line 3265 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); @@ -6589,7 +6692,7 @@ void case_437() } void case_438() -#line 3260 "cs-parser.jay" +#line 3271 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); @@ -6597,7 +6700,7 @@ void case_438() } void case_439() -#line 3266 "cs-parser.jay" +#line 3277 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess (new BaseThis (GetLocation (yyVals[-3+yyTop])), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); @@ -6605,7 +6708,15 @@ void case_439() } void case_440() -#line 3272 "cs-parser.jay" +#line 3283 "cs-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new MemberAccess (new SimpleName ("await", ((LocatedToken) yyVals[-3+yyTop]).Location), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_441() +#line 3289 "cs-parser.jay" { var lt1 = (LocatedToken) yyVals[-2+yyTop]; var lt2 = (LocatedToken) yyVals[-1+yyTop]; @@ -6614,29 +6725,29 @@ void case_440() lbag.AddLocation (yyVal, savedLocation, GetLocation (yyVals[-1+yyTop])); } -void case_442() -#line 3282 "cs-parser.jay" +void case_443() +#line 3299 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location); } -void case_444() -#line 3290 "cs-parser.jay" +void case_445() +#line 3307 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location); } -void case_445() -#line 3298 "cs-parser.jay" +void case_446() +#line 3315 "cs-parser.jay" { yyVal = new Invocation ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_446() -#line 3303 "cs-parser.jay" +void case_447() +#line 3320 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -6644,8 +6755,8 @@ void case_446() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_447() -#line 3310 "cs-parser.jay" +void case_448() +#line 3327 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -6653,8 +6764,8 @@ void case_447() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_450() -#line 3325 "cs-parser.jay" +void case_451() +#line 3342 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) { yyVal = new CollectionOrObjectInitializers (GetLocation (yyVals[-2+yyTop])); @@ -6664,23 +6775,23 @@ void case_450() lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_451() -#line 3334 "cs-parser.jay" +void case_452() +#line 3351 "cs-parser.jay" { yyVal = new CollectionOrObjectInitializers ((List) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_454() -#line 3350 "cs-parser.jay" +void case_455() +#line 3367 "cs-parser.jay" { var a = new List (); a.Add ((Expression) yyVals[0+yyTop]); yyVal = a; } -void case_455() -#line 3356 "cs-parser.jay" +void case_456() +#line 3373 "cs-parser.jay" { var a = (List)yyVals[-2+yyTop]; a.Add ((Expression) yyVals[0+yyTop]); @@ -6688,31 +6799,31 @@ void case_455() yyVal = a; } -void case_456() -#line 3362 "cs-parser.jay" +void case_457() +#line 3379 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = yyVals[-1+yyTop]; } -void case_457() -#line 3370 "cs-parser.jay" +void case_458() +#line 3387 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new ElementInitializer (lt.Value, (Expression)yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_458() -#line 3376 "cs-parser.jay" +void case_459() +#line 3393 "cs-parser.jay" { var lt = (LocatedToken) Error_AwaitAsIdentifier (yyVals[-2+yyTop]); yyVal = new ElementInitializer (lt.Value, (Expression)yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_460() -#line 3385 "cs-parser.jay" +void case_461() +#line 3402 "cs-parser.jay" { CompletionSimpleName csn = yyVals[-1+yyTop] as CompletionSimpleName; if (csn == null) @@ -6721,8 +6832,8 @@ void case_460() yyVal = new CompletionElementInitializer (csn.Prefix, csn.Location); } -void case_461() -#line 3393 "cs-parser.jay" +void case_462() +#line 3410 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) yyVal = new CollectionElementInitializer (GetLocation (yyVals[-2+yyTop])); @@ -6732,24 +6843,24 @@ void case_461() } } -void case_462() -#line 3402 "cs-parser.jay" +void case_463() +#line 3419 "cs-parser.jay" { report.Error (1920, GetLocation (yyVals[-1+yyTop]), "An element initializer cannot be empty"); yyVal = new CollectionElementInitializer (GetLocation (yyVals[-1+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_467() -#line 3421 "cs-parser.jay" +void case_468() +#line 3438 "cs-parser.jay" { Arguments list = new Arguments (4); list.Add ((Argument) yyVals[0+yyTop]); yyVal = list; } -void case_468() -#line 3427 "cs-parser.jay" +void case_469() +#line 3444 "cs-parser.jay" { Arguments list = (Arguments) yyVals[-2+yyTop]; if (list [list.Count - 1] is NamedArgument) @@ -6760,8 +6871,8 @@ void case_468() yyVal = list; } -void case_469() -#line 3437 "cs-parser.jay" +void case_470() +#line 3454 "cs-parser.jay" { Arguments list = (Arguments) yyVals[-2+yyTop]; NamedArgument a = (NamedArgument) yyVals[0+yyTop]; @@ -6777,8 +6888,8 @@ void case_469() yyVal = list; } -void case_470() -#line 3452 "cs-parser.jay" +void case_471() +#line 3469 "cs-parser.jay" { if (lexer.putback_char == -1) lexer.putback (')'); /* TODO: Wrong but what can I do*/ @@ -6786,72 +6897,72 @@ void case_470() yyVal = yyVals[-2+yyTop]; } -void case_471() -#line 3459 "cs-parser.jay" +void case_472() +#line 3476 "cs-parser.jay" { report.Error (839, GetLocation (yyVals[-1+yyTop]), "An argument is missing"); yyVal = null; } -void case_476() -#line 3480 "cs-parser.jay" +void case_477() +#line 3497 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_477() -#line 3485 "cs-parser.jay" +void case_478() +#line 3502 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_478() -#line 3490 "cs-parser.jay" +void case_479() +#line 3507 "cs-parser.jay" { yyVal = new Argument (new Arglist ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop]))); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_479() -#line 3495 "cs-parser.jay" +void case_480() +#line 3512 "cs-parser.jay" { yyVal = new Argument (new Arglist (GetLocation (yyVals[-2+yyTop]))); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_481() -#line 3507 "cs-parser.jay" +void case_482() +#line 3524 "cs-parser.jay" { yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_482() -#line 3512 "cs-parser.jay" +void case_483() +#line 3529 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_483() -#line 3517 "cs-parser.jay" +void case_484() +#line 3534 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); } -void case_484() -#line 3525 "cs-parser.jay" +void case_485() +#line 3542 "cs-parser.jay" { var list = new List (4); list.Add ((Expression) yyVals[0+yyTop]); yyVal = list; } -void case_485() -#line 3531 "cs-parser.jay" +void case_486() +#line 3548 "cs-parser.jay" { var list = (List) yyVals[-2+yyTop]; list.Add ((Expression) yyVals[0+yyTop]); @@ -6859,16 +6970,16 @@ void case_485() yyVal = list; } -void case_486() -#line 3541 "cs-parser.jay" +void case_487() +#line 3558 "cs-parser.jay" { Arguments args = new Arguments (4); args.Add ((Argument) yyVals[0+yyTop]); yyVal = args; } -void case_487() -#line 3547 "cs-parser.jay" +void case_488() +#line 3564 "cs-parser.jay" { Arguments args = (Arguments) yyVals[-2+yyTop]; if (args [args.Count - 1] is NamedArgument && !(yyVals[0+yyTop] is NamedArgument)) @@ -6879,22 +6990,22 @@ void case_487() yyVal = args; } -void case_491() -#line 3575 "cs-parser.jay" +void case_492() +#line 3592 "cs-parser.jay" { yyVal = new ElementAccess (new BaseThis (GetLocation (yyVals[-3+yyTop])), (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_492() -#line 3580 "cs-parser.jay" +void case_493() +#line 3597 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess (null, null, GetLocation (yyVals[-1+yyTop])); } -void case_495() -#line 3602 "cs-parser.jay" +void case_496() +#line 3619 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { if (lang_version <= LanguageVersion.ISO_2) @@ -6908,8 +7019,8 @@ void case_495() lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_496() -#line 3615 "cs-parser.jay" +void case_497() +#line 3632 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "collection initializers"); @@ -6917,8 +7028,8 @@ void case_496() yyVal = new NewInitialize ((FullNamedExpression) yyVals[-1+yyTop], null, (CollectionOrObjectInitializers) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_497() -#line 3627 "cs-parser.jay" +void case_498() +#line 3644 "cs-parser.jay" { yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-5+yyTop], (List) yyVals[-3+yyTop], new ComposedTypeSpecifier (((List) yyVals[-3+yyTop]).Count, GetLocation (yyVals[-4+yyTop])) { @@ -6927,8 +7038,8 @@ void case_497() lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_498() -#line 3635 "cs-parser.jay" +void case_499() +#line 3652 "cs-parser.jay" { if (yyVals[0+yyTop] == null) report.Error (1586, GetLocation (yyVals[-3+yyTop]), "Array creation must have array size or array initializer"); @@ -6936,8 +7047,8 @@ void case_498() yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-2+yyTop], (ComposedTypeSpecifier) yyVals[-1+yyTop], (ArrayInitializer) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); } -void case_499() -#line 3642 "cs-parser.jay" +void case_500() +#line 3659 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "implicitly typed arrays"); @@ -6945,30 +7056,30 @@ void case_499() yyVal = new ImplicitlyTypedArrayCreation ((ComposedTypeSpecifier) yyVals[-1+yyTop], (ArrayInitializer) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_500() -#line 3649 "cs-parser.jay" +void case_501() +#line 3666 "cs-parser.jay" { report.Error (178, GetLocation (yyVals[-1+yyTop]), "Invalid rank specifier, expecting `,' or `]'"); yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-5+yyTop], null, GetLocation (yyVals[-6+yyTop])); } -void case_501() -#line 3654 "cs-parser.jay" +void case_502() +#line 3671 "cs-parser.jay" { Error_SyntaxError (yyToken); /* It can be any of new expression, create the most common one*/ yyVal = new New ((FullNamedExpression) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop])); } -void case_503() -#line 3666 "cs-parser.jay" +void case_504() +#line 3683 "cs-parser.jay" { --lexer.parsing_type; yyVal = yyVals[0+yyTop]; } -void case_504() -#line 3674 "cs-parser.jay" +void case_505() +#line 3691 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "anonymous types"); @@ -6979,16 +7090,16 @@ void case_504() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_509() -#line 3697 "cs-parser.jay" +void case_511() +#line 3718 "cs-parser.jay" { var a = new List (4); a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]); yyVal = a; } -void case_510() -#line 3703 "cs-parser.jay" +void case_512() +#line 3724 "cs-parser.jay" { var a = (List) yyVals[-2+yyTop]; a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]); @@ -6997,60 +7108,60 @@ void case_510() yyVal = a; } -void case_511() -#line 3714 "cs-parser.jay" +void case_515() +#line 3743 "cs-parser.jay" { var lt = (LocatedToken)yyVals[-2+yyTop]; yyVal = new AnonymousTypeParameter ((Expression)yyVals[0+yyTop], lt.Value, lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_512() -#line 3720 "cs-parser.jay" +void case_516() +#line 3749 "cs-parser.jay" { var lt = (LocatedToken)yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (new SimpleName (lt.Value, lt.Location), lt.Value, lt.Location); } -void case_513() -#line 3726 "cs-parser.jay" +void case_517() +#line 3755 "cs-parser.jay" { MemberAccess ma = (MemberAccess) yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (ma, ma.Name, ma.Location); } -void case_514() -#line 3731 "cs-parser.jay" +void case_518() +#line 3760 "cs-parser.jay" { report.Error (746, lexer.Location, "Invalid anonymous type member declarator. Anonymous type members must be a member assignment, simple name or member access expression"); yyVal = null; } -void case_518() -#line 3746 "cs-parser.jay" +void case_522() +#line 3775 "cs-parser.jay" { ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } -void case_519() -#line 3754 "cs-parser.jay" +void case_523() +#line 3783 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreateArrayDimension (1, GetLocation (yyVals[-1+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_520() -#line 3759 "cs-parser.jay" +void case_524() +#line 3788 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreateArrayDimension ((int)yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_525() -#line 3789 "cs-parser.jay" +void case_529() +#line 3818 "cs-parser.jay" { var ai = new ArrayInitializer (0, GetLocation (yyVals[-1+yyTop])); ai.VariableDeclaration = current_variable; @@ -7058,8 +7169,8 @@ void case_525() yyVal = ai; } -void case_526() -#line 3796 "cs-parser.jay" +void case_530() +#line 3825 "cs-parser.jay" { var ai = new ArrayInitializer ((List) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); ai.VariableDeclaration = current_variable; @@ -7071,16 +7182,16 @@ void case_526() yyVal = ai; } -void case_527() -#line 3810 "cs-parser.jay" +void case_531() +#line 3839 "cs-parser.jay" { var list = new List (4); list.Add ((Expression) yyVals[0+yyTop]); yyVal = list; } -void case_528() -#line 3816 "cs-parser.jay" +void case_532() +#line 3845 "cs-parser.jay" { var list = (List) yyVals[-2+yyTop]; list.Add ((Expression) yyVals[0+yyTop]); @@ -7088,23 +7199,23 @@ void case_528() yyVal = list; } -void case_530() -#line 3830 "cs-parser.jay" +void case_534() +#line 3859 "cs-parser.jay" { lexer.TypeOfParsing = false; yyVal = new TypeOf ((FullNamedExpression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_533() -#line 3841 "cs-parser.jay" +void case_537() +#line 3870 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = null; } -void case_534() -#line 3849 "cs-parser.jay" +void case_538() +#line 3878 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; @@ -7113,8 +7224,8 @@ void case_534() lbag.AddLocation (sn.TypeArguments, Lexer.GetGenericDimensionLocations ()); } -void case_535() -#line 3857 "cs-parser.jay" +void case_539() +#line 3886 "cs-parser.jay" { var lt1 = (LocatedToken) yyVals[-2+yyTop]; var lt2 = (LocatedToken) yyVals[-1+yyTop]; @@ -7125,8 +7236,8 @@ void case_535() lbag.AddLocation (yyVal, savedLocation, GetLocation (yyVals[-1+yyTop])); } -void case_536() -#line 3867 "cs-parser.jay" +void case_540() +#line 3896 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; @@ -7134,8 +7245,8 @@ void case_536() lbag.AddLocation (yyVal, savedLocation, GetLocation (yyVals[-1+yyTop])); } -void case_537() -#line 3874 "cs-parser.jay" +void case_541() +#line 3903 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; @@ -7145,8 +7256,8 @@ void case_537() lbag.AddLocation (ma.TypeArguments, Lexer.GetGenericDimensionLocations ()); } -void case_538() -#line 3883 "cs-parser.jay" +void case_542() +#line 3912 "cs-parser.jay" { var tne = (ATypeNameExpression) yyVals[-3+yyTop]; if (tne.HasTypeArguments) @@ -7158,8 +7269,8 @@ void case_538() lbag.AddLocation (ma.TypeArguments, Lexer.GetGenericDimensionLocations ()); } -void case_539() -#line 3897 "cs-parser.jay" +void case_543() +#line 3926 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "generics"); @@ -7167,8 +7278,8 @@ void case_539() yyVal = yyVals[0+yyTop]; } -void case_540() -#line 3907 "cs-parser.jay" +void case_544() +#line 3936 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; if (lang_version == LanguageVersion.ISO_1) @@ -7177,15 +7288,15 @@ void case_540() yyVal = lt; } -void case_541() -#line 3918 "cs-parser.jay" +void case_545() +#line 3947 "cs-parser.jay" { yyVal = new SizeOf ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_542() -#line 3923 "cs-parser.jay" +void case_546() +#line 3952 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7193,45 +7304,45 @@ void case_542() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_543() -#line 3933 "cs-parser.jay" +void case_547() +#line 3962 "cs-parser.jay" { yyVal = new CheckedExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_544() -#line 3938 "cs-parser.jay" +void case_548() +#line 3967 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new CheckedExpr (null, GetLocation (yyVals[-1+yyTop])); } -void case_545() -#line 3947 "cs-parser.jay" +void case_549() +#line 3976 "cs-parser.jay" { yyVal = new UnCheckedExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_546() -#line 3952 "cs-parser.jay" +void case_550() +#line 3981 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new UnCheckedExpr (null, GetLocation (yyVals[-1+yyTop])); } -void case_547() -#line 3961 "cs-parser.jay" +void case_551() +#line 3990 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess (new Indirection ((Expression) yyVals[-3+yyTop], GetLocation (yyVals[-2+yyTop])), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); } -void case_549() -#line 3973 "cs-parser.jay" +void case_553() +#line 4002 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); if ((ParametersCompiled) yyVals[-2+yyTop] != ParametersCompiled.Undefined) { @@ -7241,8 +7352,8 @@ void case_549() } } -void case_551() -#line 3986 "cs-parser.jay" +void case_555() +#line 4015 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); @@ -7253,8 +7364,8 @@ void case_551() } } -void case_555() -#line 4011 "cs-parser.jay" +void case_559() +#line 4040 "cs-parser.jay" { valid_param_mod = 0; yyVal = yyVals[-1+yyTop]; @@ -7262,8 +7373,8 @@ void case_555() PushLocation (GetLocation (yyVals[-3+yyTop])); } -void case_556() -#line 4021 "cs-parser.jay" +void case_560() +#line 4050 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "default value expression"); @@ -7272,15 +7383,15 @@ void case_556() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_560() -#line 4041 "cs-parser.jay" +void case_564() +#line 4070 "cs-parser.jay" { yyVal = new Cast ((FullNamedExpression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_561() -#line 4046 "cs-parser.jay" +void case_565() +#line 4075 "cs-parser.jay" { if (!async_block) { if (current_anonymous_method is LambdaExpression) { @@ -7303,24 +7414,24 @@ void case_561() yyVal = new Await ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_562() -#line 4068 "cs-parser.jay" +void case_566() +#line 4097 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.LogicalNot, null, GetLocation (yyVals[-1+yyTop])); } -void case_563() -#line 4074 "cs-parser.jay" +void case_567() +#line 4103 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.OnesComplement, null, GetLocation (yyVals[-1+yyTop])); } -void case_564() -#line 4080 "cs-parser.jay" +void case_568() +#line 4109 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7328,85 +7439,85 @@ void case_564() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_565() -#line 4087 "cs-parser.jay" +void case_569() +#line 4116 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Await (null, GetLocation (yyVals[-1+yyTop])); } -void case_573() -#line 4125 "cs-parser.jay" +void case_577() +#line 4154 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.UnaryPlus, null, GetLocation (yyVals[-1+yyTop])); } -void case_574() -#line 4131 "cs-parser.jay" +void case_578() +#line 4160 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.UnaryNegation, null, GetLocation (yyVals[-1+yyTop])); } -void case_575() -#line 4137 "cs-parser.jay" +void case_579() +#line 4166 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, null, GetLocation (yyVals[-1+yyTop])); } -void case_576() -#line 4143 "cs-parser.jay" +void case_580() +#line 4172 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, null, GetLocation (yyVals[-1+yyTop])); } -void case_577() -#line 4149 "cs-parser.jay" +void case_581() +#line 4178 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Indirection (null, GetLocation (yyVals[-1+yyTop])); } -void case_578() -#line 4155 "cs-parser.jay" +void case_582() +#line 4184 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.AddressOf, null, GetLocation (yyVals[-1+yyTop])); } -void case_580() -#line 4165 "cs-parser.jay" +void case_584() +#line 4194 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_581() -#line 4170 "cs-parser.jay" +void case_585() +#line 4199 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_582() -#line 4175 "cs-parser.jay" +void case_586() +#line 4204 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_583() -#line 4180 "cs-parser.jay" +void case_587() +#line 4209 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7414,8 +7525,8 @@ void case_583() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_584() -#line 4187 "cs-parser.jay" +void case_588() +#line 4216 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7423,8 +7534,8 @@ void case_584() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_585() -#line 4194 "cs-parser.jay" +void case_589() +#line 4223 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7432,22 +7543,22 @@ void case_585() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_587() -#line 4205 "cs-parser.jay" +void case_591() +#line 4234 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_588() -#line 4210 "cs-parser.jay" +void case_592() +#line 4239 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_591() -#line 4223 "cs-parser.jay" +void case_595() +#line 4252 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7455,8 +7566,8 @@ void case_591() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_592() -#line 4230 "cs-parser.jay" +void case_596() +#line 4259 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7464,38 +7575,52 @@ void case_592() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_593() -#line 4237 "cs-parser.jay" +void case_597() +#line 4266 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new As ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); } -void case_594() -#line 4243 "cs-parser.jay" +void case_598() +#line 4272 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Is ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); } -void case_596() -#line 4253 "cs-parser.jay" +void case_599() +#line 4278 "cs-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + yyVal = new Is (new SimpleName (lt.Value, lt.Location), (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + +void case_600() +#line 4283 "cs-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + yyVal = new As (new SimpleName (lt.Value, lt.Location), (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + +void case_602() +#line 4292 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_597() -#line 4258 "cs-parser.jay" +void case_603() +#line 4297 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_598() -#line 4263 "cs-parser.jay" +void case_604() +#line 4302 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7503,8 +7628,8 @@ void case_598() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_599() -#line 4270 "cs-parser.jay" +void case_605() +#line 4309 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7512,36 +7637,36 @@ void case_599() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_601() -#line 4281 "cs-parser.jay" +void case_607() +#line 4320 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LessThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_602() -#line 4286 "cs-parser.jay" +void case_608() +#line 4325 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.GreaterThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_603() -#line 4291 "cs-parser.jay" +void case_609() +#line 4330 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LessThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_604() -#line 4296 "cs-parser.jay" +void case_610() +#line 4335 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.GreaterThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_605() -#line 4301 "cs-parser.jay" +void case_611() +#line 4340 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7549,8 +7674,8 @@ void case_605() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_606() -#line 4308 "cs-parser.jay" +void case_612() +#line 4347 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7558,8 +7683,8 @@ void case_606() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_607() -#line 4315 "cs-parser.jay" +void case_613() +#line 4354 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7567,8 +7692,8 @@ void case_607() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_608() -#line 4322 "cs-parser.jay" +void case_614() +#line 4361 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7576,22 +7701,22 @@ void case_608() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_610() -#line 4333 "cs-parser.jay" +void case_616() +#line 4372 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Equality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_611() -#line 4338 "cs-parser.jay" +void case_617() +#line 4377 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Inequality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_612() -#line 4343 "cs-parser.jay" +void case_618() +#line 4382 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7599,8 +7724,8 @@ void case_612() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_613() -#line 4350 "cs-parser.jay" +void case_619() +#line 4389 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7608,15 +7733,15 @@ void case_613() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_615() -#line 4361 "cs-parser.jay" +void case_621() +#line 4400 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_616() -#line 4366 "cs-parser.jay" +void case_622() +#line 4405 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7624,15 +7749,15 @@ void case_616() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_618() -#line 4377 "cs-parser.jay" +void case_624() +#line 4416 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_619() -#line 4382 "cs-parser.jay" +void case_625() +#line 4421 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7640,15 +7765,15 @@ void case_619() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_621() -#line 4393 "cs-parser.jay" +void case_627() +#line 4432 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_622() -#line 4398 "cs-parser.jay" +void case_628() +#line 4437 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7656,15 +7781,15 @@ void case_622() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_624() -#line 4409 "cs-parser.jay" +void case_630() +#line 4448 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LogicalAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_625() -#line 4414 "cs-parser.jay" +void case_631() +#line 4453 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7672,15 +7797,15 @@ void case_625() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_627() -#line 4425 "cs-parser.jay" +void case_633() +#line 4464 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LogicalOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_628() -#line 4430 "cs-parser.jay" +void case_634() +#line 4469 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7688,8 +7813,8 @@ void case_628() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_630() -#line 4441 "cs-parser.jay" +void case_636() +#line 4480 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "null coalescing operator"); @@ -7698,23 +7823,23 @@ void case_630() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_632() -#line 4453 "cs-parser.jay" +void case_638() +#line 4492 "cs-parser.jay" { yyVal = new Conditional (new BooleanExpression ((Expression) yyVals[-4+yyTop]), (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_633() -#line 4458 "cs-parser.jay" +void case_639() +#line 4497 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Conditional (new BooleanExpression ((Expression) yyVals[-3+yyTop]), (Expression) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop])); } -void case_634() -#line 4464 "cs-parser.jay" +void case_640() +#line 4503 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7722,8 +7847,8 @@ void case_634() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_635() -#line 4471 "cs-parser.jay" +void case_641() +#line 4510 "cs-parser.jay" { Error_SyntaxError (Token.CLOSE_BRACE); @@ -7732,85 +7857,85 @@ void case_635() lexer.putback ('}'); } -void case_636() -#line 4482 "cs-parser.jay" +void case_642() +#line 4521 "cs-parser.jay" { yyVal = new SimpleAssign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_637() -#line 4487 "cs-parser.jay" +void case_643() +#line 4526 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_638() -#line 4492 "cs-parser.jay" +void case_644() +#line 4531 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_639() -#line 4497 "cs-parser.jay" +void case_645() +#line 4536 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_640() -#line 4502 "cs-parser.jay" +void case_646() +#line 4541 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_641() -#line 4507 "cs-parser.jay" +void case_647() +#line 4546 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_642() -#line 4512 "cs-parser.jay" +void case_648() +#line 4551 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_643() -#line 4517 "cs-parser.jay" +void case_649() +#line 4556 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_644() -#line 4522 "cs-parser.jay" +void case_650() +#line 4561 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_645() -#line 4527 "cs-parser.jay" +void case_651() +#line 4566 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_646() -#line 4532 "cs-parser.jay" +void case_652() +#line 4571 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_647() -#line 4540 "cs-parser.jay" +void case_653() +#line 4579 "cs-parser.jay" { var pars = new List (4); pars.Add ((Parameter) yyVals[0+yyTop]); @@ -7818,8 +7943,8 @@ void case_647() yyVal = pars; } -void case_648() -#line 4547 "cs-parser.jay" +void case_654() +#line 4586 "cs-parser.jay" { var pars = (List) yyVals[-2+yyTop]; Parameter p = (Parameter)yyVals[0+yyTop]; @@ -7833,46 +7958,46 @@ void case_648() yyVal = pars; } -void case_649() -#line 4563 "cs-parser.jay" +void case_655() +#line 4602 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Parameter.Modifier) yyVals[-2+yyTop], null, lt.Location); } -void case_650() -#line 4569 "cs-parser.jay" +void case_656() +#line 4608 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, Parameter.Modifier.NONE, null, lt.Location); } -void case_651() -#line 4575 "cs-parser.jay" +void case_657() +#line 4614 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new ImplicitLambdaParameter (lt.Value, lt.Location); } -void case_652() -#line 4580 "cs-parser.jay" +void case_658() +#line 4619 "cs-parser.jay" { var lt = (LocatedToken) Error_AwaitAsIdentifier (yyVals[0+yyTop]); yyVal = new ImplicitLambdaParameter (lt.Value, lt.Location); } -void case_654() -#line 4588 "cs-parser.jay" +void case_660() +#line 4627 "cs-parser.jay" { var pars_list = (List) yyVals[0+yyTop]; yyVal = new ParametersCompiled (pars_list.ToArray ()); lbag.AddLocation (yyVal, parameterListCommas); } -void case_656() -#line 4600 "cs-parser.jay" +void case_662() +#line 4639 "cs-parser.jay" { Block b = end_block (Location.Null); b.IsCompilerGenerated = true; @@ -7880,8 +8005,8 @@ void case_656() yyVal = b; } -void case_658() -#line 4608 "cs-parser.jay" +void case_664() +#line 4647 "cs-parser.jay" { /* Handles only cases like foo = x.FirstOrDefault (l => );*/ /* where we must restore current_variable*/ @@ -7892,109 +8017,128 @@ void case_658() yyVal = null; } -void case_660() -#line 4622 "cs-parser.jay" +void case_666() +#line 4661 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_661() -#line 4630 "cs-parser.jay" +void case_667() +#line 4669 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); start_anonymous (true, new ParametersCompiled (p), false, lt.Location); } -void case_662() -#line 4636 "cs-parser.jay" +void case_668() +#line 4675 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_663() -#line 4641 "cs-parser.jay" +void case_669() +#line 4680 "cs-parser.jay" { var lt = (LocatedToken) Error_AwaitAsIdentifier (yyVals[-1+yyTop]); Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); start_anonymous (true, new ParametersCompiled (p), false, lt.Location); } -void case_664() -#line 4647 "cs-parser.jay" +void case_670() +#line 4686 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_665() -#line 4652 "cs-parser.jay" +void case_671() +#line 4691 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); start_anonymous (true, new ParametersCompiled (p), true, lt.Location); } -void case_666() -#line 4658 "cs-parser.jay" +void case_672() +#line 4697 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_668() -#line 4667 "cs-parser.jay" +void case_674() +#line 4706 "cs-parser.jay" { valid_param_mod = 0; start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], false, GetLocation (yyVals[-4+yyTop])); } -void case_669() -#line 4672 "cs-parser.jay" +void case_675() +#line 4711 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_671() -#line 4681 "cs-parser.jay" +void case_677() +#line 4720 "cs-parser.jay" { valid_param_mod = 0; start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], true, GetLocation (yyVals[-5+yyTop])); } -void case_672() -#line 4686 "cs-parser.jay" +void case_678() +#line 4725 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_679() -#line 4709 "cs-parser.jay" +void case_685() +#line 4748 "cs-parser.jay" { yyVal = new RefValueExpr ((Expression) yyVals[-3+yyTop], (FullNamedExpression) yyVals[-1+yyTop], GetLocation (yyVals[-5+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_680() -#line 4714 "cs-parser.jay" +void case_686() +#line 4753 "cs-parser.jay" { yyVal = new RefTypeExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_681() -#line 4719 "cs-parser.jay" +void case_687() +#line 4758 "cs-parser.jay" { yyVal = new MakeRefExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_685() -#line 4747 "cs-parser.jay" +void case_692() +#line 4785 "cs-parser.jay" +{ + yyVal = yyVals[-1+yyTop]; + + /* Cannot use opt_formal_parameter_list because it can be shared instance for empty parameters*/ + lbag.AppendToMember (current_container, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_697() +#line 4811 "cs-parser.jay" +{ + lbag.AppendToMember (current_container, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); + ((Class)current_type).PrimaryConstructorBaseArguments = (Arguments) yyVals[-1+yyTop]; + --lexer.parsing_block; + + yyVal = yyVals[-5+yyTop]; + } + +void case_699() +#line 4831 "cs-parser.jay" { lexer.ConstraintsParsing = true; @@ -8005,13 +8149,18 @@ void case_685() push_current_container (c, yyVals[-3+yyTop]); lbag.AddMember (current_container, GetModifierLocations (), GetLocation (yyVals[-2+yyTop])); + valid_param_mod = ParameterModifierType.PrimaryConstructor; } -void case_686() -#line 4760 "cs-parser.jay" +void case_700() +#line 4845 "cs-parser.jay" { + valid_param_mod = 0; lexer.ConstraintsParsing = false; + if (yyVals[-1+yyTop] != null) + current_type.PrimaryConstructorParameters = (ParametersCompiled) yyVals[-1+yyTop]; + if (yyVals[0+yyTop] != null) current_container.SetConstraints ((List) yyVals[0+yyTop]); @@ -8023,16 +8172,16 @@ void case_686() lexer.parsing_modifiers = true; } -void case_687() -#line 4774 "cs-parser.jay" +void case_701() +#line 4863 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_688() -#line 4780 "cs-parser.jay" +void case_702() +#line 4869 "cs-parser.jay" { if (yyVals[0+yyTop] == null) { lbag.AppendToMember (current_container, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); @@ -8042,16 +8191,16 @@ void case_688() yyVal = pop_current_class (); } -void case_691() -#line 4799 "cs-parser.jay" +void case_705() +#line 4888 "cs-parser.jay" { mod_locations = null; yyVal = ModifierNone; lexer.parsing_modifiers = false; } -void case_694() -#line 4813 "cs-parser.jay" +void case_708() +#line 4902 "cs-parser.jay" { var m1 = (Modifiers) yyVals[-1+yyTop]; var m2 = (Modifiers) yyVals[0+yyTop]; @@ -8068,8 +8217,8 @@ void case_694() yyVal = m1 | m2; } -void case_695() -#line 4832 "cs-parser.jay" +void case_709() +#line 4921 "cs-parser.jay" { yyVal = Modifiers.NEW; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); @@ -8078,92 +8227,92 @@ void case_695() report.Error (1530, GetLocation (yyVals[0+yyTop]), "Keyword `new' is not allowed on namespace elements"); } -void case_696() -#line 4840 "cs-parser.jay" +void case_710() +#line 4929 "cs-parser.jay" { yyVal = Modifiers.PUBLIC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_697() -#line 4845 "cs-parser.jay" +void case_711() +#line 4934 "cs-parser.jay" { yyVal = Modifiers.PROTECTED; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_698() -#line 4850 "cs-parser.jay" +void case_712() +#line 4939 "cs-parser.jay" { yyVal = Modifiers.INTERNAL; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_699() -#line 4855 "cs-parser.jay" +void case_713() +#line 4944 "cs-parser.jay" { yyVal = Modifiers.PRIVATE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_700() -#line 4860 "cs-parser.jay" +void case_714() +#line 4949 "cs-parser.jay" { yyVal = Modifiers.ABSTRACT; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_701() -#line 4865 "cs-parser.jay" +void case_715() +#line 4954 "cs-parser.jay" { yyVal = Modifiers.SEALED; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_702() -#line 4870 "cs-parser.jay" +void case_716() +#line 4959 "cs-parser.jay" { yyVal = Modifiers.STATIC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_703() -#line 4875 "cs-parser.jay" +void case_717() +#line 4964 "cs-parser.jay" { yyVal = Modifiers.READONLY; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_704() -#line 4880 "cs-parser.jay" +void case_718() +#line 4969 "cs-parser.jay" { yyVal = Modifiers.VIRTUAL; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_705() -#line 4885 "cs-parser.jay" +void case_719() +#line 4974 "cs-parser.jay" { yyVal = Modifiers.OVERRIDE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_706() -#line 4890 "cs-parser.jay" +void case_720() +#line 4979 "cs-parser.jay" { yyVal = Modifiers.EXTERN; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_707() -#line 4895 "cs-parser.jay" +void case_721() +#line 4984 "cs-parser.jay" { yyVal = Modifiers.VOLATILE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_708() -#line 4900 "cs-parser.jay" +void case_722() +#line 4989 "cs-parser.jay" { yyVal = Modifiers.UNSAFE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); @@ -8171,38 +8320,38 @@ void case_708() Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop])); } -void case_709() -#line 4907 "cs-parser.jay" +void case_723() +#line 4996 "cs-parser.jay" { yyVal = Modifiers.ASYNC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_711() -#line 4916 "cs-parser.jay" +void case_726() +#line 5009 "cs-parser.jay" { current_type.SetBaseTypes ((List) yyVals[0+yyTop]); lbag.AppendToMember (current_type, GetLocation (yyVals[-1+yyTop])); } -void case_712() -#line 4921 "cs-parser.jay" +void case_727() +#line 5014 "cs-parser.jay" { Error_SyntaxError (yyToken); current_type.SetBaseTypes ((List) yyVals[-1+yyTop]); } -void case_715() -#line 4938 "cs-parser.jay" +void case_730() +#line 5031 "cs-parser.jay" { var constraints = new List (1); constraints.Add ((Constraints) yyVals[0+yyTop]); yyVal = constraints; } -void case_716() -#line 4944 "cs-parser.jay" +void case_731() +#line 5037 "cs-parser.jay" { var constraints = (List) yyVals[-1+yyTop]; Constraints new_constraint = (Constraints)yyVals[0+yyTop]; @@ -8219,16 +8368,16 @@ void case_716() yyVal = constraints; } -void case_717() -#line 4963 "cs-parser.jay" +void case_732() +#line 5056 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new Constraints (new SimpleMemberName (lt.Value, lt.Location), (List) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_718() -#line 4969 "cs-parser.jay" +void case_733() +#line 5062 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8236,16 +8385,16 @@ void case_718() yyVal = new Constraints (new SimpleMemberName (lt.Value, lt.Location), null, GetLocation (yyVals[-2+yyTop])); } -void case_719() -#line 4979 "cs-parser.jay" +void case_734() +#line 5072 "cs-parser.jay" { var constraints = new List (1); constraints.Add ((FullNamedExpression) yyVals[0+yyTop]); yyVal = constraints; } -void case_720() -#line 4985 "cs-parser.jay" +void case_735() +#line 5078 "cs-parser.jay" { var constraints = (List) yyVals[-2+yyTop]; var prev = constraints [constraints.Count - 1] as SpecialContraintExpr; @@ -8270,8 +8419,8 @@ void case_720() yyVal = constraints; } -void case_721() -#line 5012 "cs-parser.jay" +void case_736() +#line 5105 "cs-parser.jay" { if (yyVals[0+yyTop] is ComposedCast) report.Error (706, GetLocation (yyVals[0+yyTop]), "Invalid constraint type `{0}'", ((ComposedCast)yyVals[0+yyTop]).GetSignatureForError ()); @@ -8279,15 +8428,15 @@ void case_721() yyVal = yyVals[0+yyTop]; } -void case_722() -#line 5019 "cs-parser.jay" +void case_737() +#line 5112 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Constructor, GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_726() -#line 5039 "cs-parser.jay" +void case_741() +#line 5132 "cs-parser.jay" { if (lang_version <= LanguageVersion.V_3) FeatureIsNotAvailable (lexer.Location, "generic type variance"); @@ -8295,79 +8444,79 @@ void case_726() yyVal = yyVals[0+yyTop]; } -void case_727() -#line 5049 "cs-parser.jay" +void case_742() +#line 5142 "cs-parser.jay" { yyVal = new VarianceDecl (Variance.Covariant, GetLocation (yyVals[0+yyTop])); savedLocation = GetLocation (yyVals[0+yyTop]); } -void case_728() -#line 5054 "cs-parser.jay" +void case_743() +#line 5147 "cs-parser.jay" { yyVal = new VarianceDecl (Variance.Contravariant, GetLocation (yyVals[0+yyTop])); savedLocation = GetLocation (yyVals[0+yyTop]); } -void case_729() -#line 5075 "cs-parser.jay" +void case_744() +#line 5168 "cs-parser.jay" { ++lexer.parsing_block; start_block (GetLocation (yyVals[0+yyTop])); } -void case_731() -#line 5087 "cs-parser.jay" +void case_746() +#line 5180 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_732() -#line 5092 "cs-parser.jay" +void case_747() +#line 5185 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (lexer.Location); } -void case_733() -#line 5101 "cs-parser.jay" +void case_748() +#line 5194 "cs-parser.jay" { ++lexer.parsing_block; current_block.StartLocation = GetLocation (yyVals[0+yyTop]); } -void case_734() -#line 5106 "cs-parser.jay" +void case_749() +#line 5199 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_735() -#line 5110 "cs-parser.jay" +void case_750() +#line 5203 "cs-parser.jay" { report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol '}', expected '{'"); lexer.putback ('}'); yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_736() -#line 5119 "cs-parser.jay" +void case_751() +#line 5212 "cs-parser.jay" { ++lexer.parsing_block; current_block.StartLocation = GetLocation (yyVals[0+yyTop]); } -void case_737() -#line 5124 "cs-parser.jay" +void case_752() +#line 5217 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_745() -#line 5152 "cs-parser.jay" +void case_760() +#line 5245 "cs-parser.jay" { Error_SyntaxError (yyToken); var lt =(LocatedToken) yyVals[-1+yyTop]; @@ -8376,43 +8525,43 @@ void case_745() yyVal = null; } -void case_746() -#line 5161 "cs-parser.jay" +void case_761() +#line 5254 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_779() -#line 5225 "cs-parser.jay" +void case_794() +#line 5318 "cs-parser.jay" { report.Error (1023, GetLocation (yyVals[0+yyTop]), "An embedded statement may not be a declaration or labeled statement"); yyVal = null; } -void case_780() -#line 5230 "cs-parser.jay" +void case_795() +#line 5323 "cs-parser.jay" { report.Error (1023, GetLocation (yyVals[0+yyTop]), "An embedded statement may not be a declaration or labeled statement"); yyVal = null; } -void case_781() -#line 5235 "cs-parser.jay" +void case_796() +#line 5328 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } -void case_782() -#line 5243 "cs-parser.jay" +void case_797() +#line 5336 "cs-parser.jay" { /* Uses lexer.Location because semicolon location is not kept in quick mode*/ yyVal = new EmptyStatement (lexer.Location); } -void case_783() -#line 5251 "cs-parser.jay" +void case_798() +#line 5344 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; LabeledStatement labeled = new LabeledStatement (lt.Value, current_block, lt.Location); @@ -8421,8 +8570,8 @@ void case_783() current_block.AddStatement (labeled); } -void case_786() -#line 5264 "cs-parser.jay" +void case_801() +#line 5357 "cs-parser.jay" { if (yyVals[-1+yyTop] is VarExpr) yyVals[-1+yyTop] = new SimpleName ("var", ((VarExpr) yyVals[-1+yyTop]).Location); @@ -8430,8 +8579,8 @@ void case_786() yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } -void case_787() -#line 5280 "cs-parser.jay" +void case_802() +#line 5373 "cs-parser.jay" { /* Ok, the above "primary_expression" is there to get rid of*/ /* both reduce/reduce and shift/reduces in the grammar, it should*/ @@ -8462,8 +8611,8 @@ void case_787() } } -void case_788() -#line 5310 "cs-parser.jay" +void case_803() +#line 5403 "cs-parser.jay" { ATypeNameExpression expr = yyVals[-1+yyTop] as ATypeNameExpression; @@ -8475,8 +8624,8 @@ void case_788() } } -void case_789() -#line 5321 "cs-parser.jay" +void case_804() +#line 5414 "cs-parser.jay" { if (yyVals[0+yyTop] == null) yyVal = yyVals[-1+yyTop]; @@ -8484,22 +8633,22 @@ void case_789() yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } -void case_792() -#line 5336 "cs-parser.jay" +void case_807() +#line 5429 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } -void case_794() -#line 5345 "cs-parser.jay" +void case_809() +#line 5438 "cs-parser.jay" { ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } -void case_798() -#line 5368 "cs-parser.jay" +void case_813() +#line 5461 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, lt.Location); @@ -8507,8 +8656,8 @@ void case_798() current_variable = new BlockVariable ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_799() -#line 5375 "cs-parser.jay" +void case_814() +#line 5468 "cs-parser.jay" { yyVal = current_variable; current_variable = null; @@ -8518,8 +8667,8 @@ void case_799() lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_800() -#line 5384 "cs-parser.jay" +void case_815() +#line 5477 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location); @@ -8527,8 +8676,8 @@ void case_800() current_variable = new BlockConstant ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_801() -#line 5391 "cs-parser.jay" +void case_816() +#line 5484 "cs-parser.jay" { if (current_variable.Initializer != null) { lbag.AddLocation (current_variable, GetLocation (yyVals[-6+yyTop]), savedLocation, GetLocation (yyVals[0+yyTop])); @@ -8539,8 +8688,8 @@ void case_801() current_variable = null; } -void case_803() -#line 5404 "cs-parser.jay" +void case_818() +#line 5497 "cs-parser.jay" { /* Redundant, but wont regress*/ report.Error (1525, lexer.Location, "Unexpected symbol }"); @@ -8548,16 +8697,16 @@ void case_803() yyVal = yyVals[0+yyTop]; } -void case_805() -#line 5415 "cs-parser.jay" +void case_820() +#line 5508 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; PushLocation (GetLocation (yyVals[-1+yyTop])); yyVal = current_variable; } -void case_806() -#line 5421 "cs-parser.jay" +void case_821() +#line 5514 "cs-parser.jay" { if (yyToken == Token.OPEN_BRACKET_EXPR) { report.Error (650, lexer.Location, @@ -8567,8 +8716,8 @@ void case_806() } } -void case_810() -#line 5439 "cs-parser.jay" +void case_825() +#line 5532 "cs-parser.jay" { foreach (var d in current_variable.Declarators) { if (d.Initializer == null) @@ -8576,8 +8725,8 @@ void case_810() } } -void case_813() -#line 5454 "cs-parser.jay" +void case_828() +#line 5547 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location); @@ -8587,8 +8736,8 @@ void case_813() lbag.AddLocation (d, GetLocation (yyVals[-1+yyTop])); } -void case_814() -#line 5463 "cs-parser.jay" +void case_829() +#line 5556 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location); @@ -8598,15 +8747,15 @@ void case_814() lbag.AddLocation (d, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_816() -#line 5479 "cs-parser.jay" +void case_831() +#line 5572 "cs-parser.jay" { savedLocation = GetLocation (yyVals[-1+yyTop]); current_variable.Initializer = (Expression) yyVals[0+yyTop]; } -void case_821() -#line 5497 "cs-parser.jay" +void case_836() +#line 5590 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location); @@ -8616,37 +8765,37 @@ void case_821() lbag.AddLocation (d, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_823() -#line 5510 "cs-parser.jay" +void case_838() +#line 5603 "cs-parser.jay" { yyVal = new StackAlloc ((Expression) yyVals[-3+yyTop], (Expression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_824() -#line 5515 "cs-parser.jay" +void case_839() +#line 5608 "cs-parser.jay" { report.Error (1575, GetLocation (yyVals[-1+yyTop]), "A stackalloc expression requires [] after type"); yyVal = new StackAlloc ((Expression) yyVals[0+yyTop], null, GetLocation (yyVals[-1+yyTop])); } -void case_825() -#line 5523 "cs-parser.jay" +void case_840() +#line 5616 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_827() -#line 5529 "cs-parser.jay" +void case_842() +#line 5622 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; report.Error (1002, GetLocation (yyVals[0+yyTop]), "; expected"); lexer.putback ('}'); } -void case_830() -#line 5547 "cs-parser.jay" +void case_845() +#line 5640 "cs-parser.jay" { ExpressionStatement s = yyVals[0+yyTop] as ExpressionStatement; if (s == null) { @@ -8657,22 +8806,22 @@ void case_830() } } -void case_831() -#line 5560 "cs-parser.jay" +void case_846() +#line 5653 "cs-parser.jay" { Expression expr = (Expression) yyVals[0+yyTop]; yyVal = new StatementExpression (new OptionalAssign (expr, lexer.Location)); } -void case_832() -#line 5565 "cs-parser.jay" +void case_847() +#line 5658 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } -void case_835() -#line 5579 "cs-parser.jay" +void case_850() +#line 5672 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8681,8 +8830,8 @@ void case_835() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_836() -#line 5588 "cs-parser.jay" +void case_851() +#line 5681 "cs-parser.jay" { yyVal = new If ((BooleanExpression) yyVals[-4+yyTop], (Statement) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-6+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); @@ -8693,8 +8842,8 @@ void case_836() Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); } -void case_837() -#line 5598 "cs-parser.jay" +void case_852() +#line 5691 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8702,16 +8851,16 @@ void case_837() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_839() -#line 5612 "cs-parser.jay" +void case_854() +#line 5705 "cs-parser.jay" { yyVal = new Switch ((Expression) yyVals[-5+yyTop], (ExplicitBlock) current_block.Explicit, GetLocation (yyVals[-7+yyTop])); end_block (GetLocation (yyVals[0+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_840() -#line 5618 "cs-parser.jay" +void case_855() +#line 5711 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8719,30 +8868,30 @@ void case_840() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_847() -#line 5649 "cs-parser.jay" +void case_862() +#line 5742 "cs-parser.jay" { var label = (SwitchLabel) yyVals[0+yyTop]; label.SectionStart = true; current_block.AddStatement (label); } -void case_849() -#line 5662 "cs-parser.jay" +void case_864() +#line 5755 "cs-parser.jay" { yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_850() -#line 5667 "cs-parser.jay" +void case_865() +#line 5760 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_856() -#line 5686 "cs-parser.jay" +void case_871() +#line 5779 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8751,8 +8900,8 @@ void case_856() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_857() -#line 5694 "cs-parser.jay" +void case_872() +#line 5787 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8760,22 +8909,22 @@ void case_857() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_858() -#line 5704 "cs-parser.jay" +void case_873() +#line 5797 "cs-parser.jay" { yyVal = new Do ((Statement) yyVals[-5+yyTop], (BooleanExpression) yyVals[-2+yyTop], GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-4+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_859() -#line 5709 "cs-parser.jay" +void case_874() +#line 5802 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Do ((Statement) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop]), Location.Null); } -void case_860() -#line 5714 "cs-parser.jay" +void case_875() +#line 5807 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8783,8 +8932,8 @@ void case_860() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_861() -#line 5724 "cs-parser.jay" +void case_876() +#line 5817 "cs-parser.jay" { start_block (GetLocation (yyVals[0+yyTop])); current_block.IsCompilerGenerated = true; @@ -8794,8 +8943,8 @@ void case_861() yyVal = f; } -void case_863() -#line 5741 "cs-parser.jay" +void case_878() +#line 5834 "cs-parser.jay" { For f = (For) yyVals[-2+yyTop]; f.Initializer = (Statement) yyVals[-1+yyTop]; @@ -8803,8 +8952,8 @@ void case_863() yyVal = f; } -void case_865() -#line 5751 "cs-parser.jay" +void case_880() +#line 5844 "cs-parser.jay" { report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol ')', expected ';'"); For f = (For) yyVals[-2+yyTop]; @@ -8813,8 +8962,8 @@ void case_865() yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_866() -#line 5762 "cs-parser.jay" +void case_881() +#line 5855 "cs-parser.jay" { For f = (For) yyVals[-2+yyTop]; f.Condition = (BooleanExpression) yyVals[-1+yyTop]; @@ -8822,8 +8971,8 @@ void case_866() yyVal = f; } -void case_868() -#line 5773 "cs-parser.jay" +void case_883() +#line 5866 "cs-parser.jay" { report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol ')', expected ';'"); For f = (For) yyVals[-2+yyTop]; @@ -8832,8 +8981,8 @@ void case_868() yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_869() -#line 5785 "cs-parser.jay" +void case_884() +#line 5878 "cs-parser.jay" { For f = (For) yyVals[-3+yyTop]; f.Iterator = (Statement) yyVals[-2+yyTop]; @@ -8847,15 +8996,15 @@ void case_869() yyVal = end_block (GetLocation (yyVals[-1+yyTop])); } -void case_870() -#line 5798 "cs-parser.jay" +void case_885() +#line 5891 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = end_block (current_block.StartLocation); } -void case_873() -#line 5811 "cs-parser.jay" +void case_888() +#line 5904 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, lt.Location); @@ -8863,8 +9012,8 @@ void case_873() current_variable = new BlockVariable ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_874() -#line 5818 "cs-parser.jay" +void case_889() +#line 5911 "cs-parser.jay" { yyVal = current_variable; if (yyVals[-1+yyTop] != null) @@ -8873,8 +9022,8 @@ void case_874() current_variable = null; } -void case_882() -#line 5845 "cs-parser.jay" +void case_897() +#line 5938 "cs-parser.jay" { var sl = yyVals[-2+yyTop] as StatementList; if (sl == null) { @@ -8889,8 +9038,8 @@ void case_882() yyVal = sl; } -void case_883() -#line 5862 "cs-parser.jay" +void case_898() +#line 5955 "cs-parser.jay" { report.Error (230, GetLocation (yyVals[-3+yyTop]), "Type and identifier are both required in a foreach statement"); @@ -8904,8 +9053,8 @@ void case_883() yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_884() -#line 5875 "cs-parser.jay" +void case_899() +#line 5968 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8923,8 +9072,8 @@ void case_884() yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_885() -#line 5892 "cs-parser.jay" +void case_900() +#line 5985 "cs-parser.jay" { start_block (GetLocation (yyVals[-5+yyTop])); current_block.IsCompilerGenerated = true; @@ -8935,8 +9084,8 @@ void case_885() yyVal = li; } -void case_886() -#line 5902 "cs-parser.jay" +void case_901() +#line 5995 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8948,8 +9097,8 @@ void case_886() yyVal = f; } -void case_887() -#line 5913 "cs-parser.jay" +void case_902() +#line 6006 "cs-parser.jay" { start_block (GetLocation (yyVals[-3+yyTop])); current_block.IsCompilerGenerated = true; @@ -8963,8 +9112,8 @@ void case_887() yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_888() -#line 5926 "cs-parser.jay" +void case_903() +#line 6019 "cs-parser.jay" { Foreach f = new Foreach ((Expression) yyVals[-1+yyTop], null, null, null, null, GetLocation (yyVals[-3+yyTop])); current_block.AddStatement (f); @@ -8973,93 +9122,93 @@ void case_888() yyVal = f; } -void case_895() -#line 5946 "cs-parser.jay" +void case_910() +#line 6039 "cs-parser.jay" { yyVal = new Break (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_896() -#line 5954 "cs-parser.jay" +void case_911() +#line 6047 "cs-parser.jay" { yyVal = new Continue (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_897() -#line 5959 "cs-parser.jay" +void case_912() +#line 6052 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Continue (GetLocation (yyVals[-1+yyTop])); } -void case_898() -#line 5967 "cs-parser.jay" +void case_913() +#line 6060 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new Goto (lt.Value, GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_899() -#line 5973 "cs-parser.jay" +void case_914() +#line 6066 "cs-parser.jay" { yyVal = new GotoCase ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_900() -#line 5978 "cs-parser.jay" +void case_915() +#line 6071 "cs-parser.jay" { yyVal = new GotoDefault (GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_901() -#line 5986 "cs-parser.jay" +void case_916() +#line 6079 "cs-parser.jay" { yyVal = new Return ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_902() -#line 5991 "cs-parser.jay" +void case_917() +#line 6084 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Return ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_903() -#line 5996 "cs-parser.jay" +void case_918() +#line 6089 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Return (null, GetLocation (yyVals[-1+yyTop])); } -void case_904() -#line 6004 "cs-parser.jay" +void case_919() +#line 6097 "cs-parser.jay" { yyVal = new Throw ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_905() -#line 6009 "cs-parser.jay" +void case_920() +#line 6102 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Throw ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_906() -#line 6014 "cs-parser.jay" +void case_921() +#line 6107 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Throw (null, GetLocation (yyVals[-1+yyTop])); } -void case_907() -#line 6022 "cs-parser.jay" +void case_922() +#line 6115 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; string s = lt.Value; @@ -9076,8 +9225,8 @@ void case_907() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_908() -#line 6038 "cs-parser.jay" +void case_923() +#line 6131 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9096,8 +9245,8 @@ void case_908() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_909() -#line 6056 "cs-parser.jay" +void case_924() +#line 6149 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; @@ -9112,29 +9261,29 @@ void case_909() lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_913() -#line 6082 "cs-parser.jay" +void case_928() +#line 6175 "cs-parser.jay" { yyVal = new TryFinally ((Statement) yyVals[-2+yyTop], (ExplicitBlock) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_914() -#line 6087 "cs-parser.jay" +void case_929() +#line 6180 "cs-parser.jay" { yyVal = new TryFinally (new TryCatch ((Block) yyVals[-3+yyTop], (List) yyVals[-2+yyTop], GetLocation (yyVals[-4+yyTop]), true), (ExplicitBlock) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_915() -#line 6092 "cs-parser.jay" +void case_930() +#line 6185 "cs-parser.jay" { Error_SyntaxError (1524, yyToken); yyVal = new TryCatch ((Block) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop]), false); } -void case_916() -#line 6100 "cs-parser.jay" +void case_931() +#line 6193 "cs-parser.jay" { var l = new List (2); @@ -9142,13 +9291,14 @@ void case_916() yyVal = l; } -void case_917() -#line 6107 "cs-parser.jay" +void case_932() +#line 6200 "cs-parser.jay" { var l = (List) yyVals[-1+yyTop]; Catch c = (Catch) yyVals[0+yyTop]; - if (l [l.Count - 1].IsGeneral) { + var prev_catch = l [l.Count - 1]; + if (prev_catch.IsGeneral && prev_catch.Filter == null) { report.Error (1017, c.loc, "Try statement already has an empty catch block"); } @@ -9156,8 +9306,16 @@ void case_917() yyVal = l; } -void case_921() -#line 6131 "cs-parser.jay" +void case_935() +#line 6221 "cs-parser.jay" +{ + var c = new Catch ((ExplicitBlock) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); + c.Filter = (CatchFilterExpression) yyVals[-1+yyTop]; + yyVal = c; + } + +void case_936() +#line 6227 "cs-parser.jay" { start_block (GetLocation (yyVals[-3+yyTop])); var c = new Catch ((ExplicitBlock) current_block, GetLocation (yyVals[-4+yyTop])); @@ -9173,8 +9331,15 @@ void case_921() yyVal = c; } -void case_923() -#line 6150 "cs-parser.jay" +void case_937() +#line 6242 "cs-parser.jay" +{ + ((Catch) yyVals[-2+yyTop]).Filter = (CatchFilterExpression) yyVals[-1+yyTop]; + yyVal = yyVals[-2+yyTop]; + } + +void case_938() +#line 6247 "cs-parser.jay" { if (yyToken == Token.CLOSE_PARENS) { report.Error (1015, lexer.Location, @@ -9186,8 +9351,8 @@ void case_923() yyVal = new Catch (null, GetLocation (yyVals[-2+yyTop])); } -void case_924() -#line 6161 "cs-parser.jay" +void case_939() +#line 6258 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9211,15 +9376,25 @@ void case_924() yyVal = c; } -void case_927() -#line 6201 "cs-parser.jay" +void case_941() +#line 6285 "cs-parser.jay" +{ + if (lang_version <= LanguageVersion.V_5) + FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "exception filter"); + + yyVal = new CatchFilterExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_944() +#line 6310 "cs-parser.jay" { if (!settings.Unsafe) Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop])); } -void case_929() -#line 6211 "cs-parser.jay" +void case_946() +#line 6320 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9228,8 +9403,8 @@ void case_929() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_930() -#line 6219 "cs-parser.jay" +void case_947() +#line 6328 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9237,8 +9412,8 @@ void case_930() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_931() -#line 6229 "cs-parser.jay" +void case_948() +#line 6338 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -9249,15 +9424,15 @@ void case_931() current_variable = new Fixed.VariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_932() -#line 6239 "cs-parser.jay" +void case_949() +#line 6348 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } -void case_933() -#line 6244 "cs-parser.jay" +void case_950() +#line 6353 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9268,8 +9443,8 @@ void case_933() yyVal = end_block (GetLocation (yyVals[-2+yyTop])); } -void case_934() -#line 6257 "cs-parser.jay" +void case_951() +#line 6366 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -9280,15 +9455,15 @@ void case_934() current_variable = new Using.VariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_935() -#line 6267 "cs-parser.jay" +void case_952() +#line 6376 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } -void case_936() -#line 6272 "cs-parser.jay" +void case_953() +#line 6381 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9299,8 +9474,8 @@ void case_936() yyVal = end_block (GetLocation (yyVals[-2+yyTop])); } -void case_937() -#line 6282 "cs-parser.jay" +void case_954() +#line 6391 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9309,8 +9484,8 @@ void case_937() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_938() -#line 6290 "cs-parser.jay" +void case_955() +#line 6399 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9318,23 +9493,23 @@ void case_938() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_940() -#line 6301 "cs-parser.jay" +void case_957() +#line 6410 "cs-parser.jay" { /* It has to be here for the parent to safely restore artificial block*/ Error_SyntaxError (yyToken); } -void case_942() -#line 6313 "cs-parser.jay" +void case_959() +#line 6422 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; lbag.AddLocation (current_variable, GetLocation (yyVals[-1+yyTop])); yyVal = current_variable; } -void case_943() -#line 6325 "cs-parser.jay" +void case_960() +#line 6434 "cs-parser.jay" { lexer.query_parsing = false; @@ -9347,8 +9522,8 @@ void case_943() current_block = current_block.Parent; } -void case_944() -#line 6337 "cs-parser.jay" +void case_961() +#line 6446 "cs-parser.jay" { Linq.AQueryClause from = yyVals[-1+yyTop] as Linq.AQueryClause; @@ -9359,8 +9534,8 @@ void case_944() current_block = current_block.Parent; } -void case_945() -#line 6348 "cs-parser.jay" +void case_962() +#line 6457 "cs-parser.jay" { lexer.query_parsing = false; yyVal = yyVals[-1+yyTop]; @@ -9369,16 +9544,16 @@ void case_945() current_block = current_block.Parent; } -void case_946() -#line 6355 "cs-parser.jay" +void case_963() +#line 6464 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; } -void case_947() -#line 6364 "cs-parser.jay" +void case_964() +#line 6473 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -9389,8 +9564,8 @@ void case_947() yyVal = new Linq.QueryExpression (clause); } -void case_948() -#line 6374 "cs-parser.jay" +void case_965() +#line 6483 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -9403,8 +9578,8 @@ void case_948() yyVal = new Linq.QueryExpression (clause); } -void case_949() -#line 6389 "cs-parser.jay" +void case_966() +#line 6498 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -9415,8 +9590,8 @@ void case_949() yyVal = new Linq.QueryExpression (clause); } -void case_950() -#line 6399 "cs-parser.jay" +void case_967() +#line 6508 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -9429,8 +9604,8 @@ void case_950() yyVal = new Linq.QueryExpression (clause); } -void case_952() -#line 6418 "cs-parser.jay" +void case_969() +#line 6527 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -9442,8 +9617,8 @@ void case_952() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_954() -#line 6433 "cs-parser.jay" +void case_971() +#line 6542 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -9460,8 +9635,8 @@ void case_954() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_955() -#line 6452 "cs-parser.jay" +void case_972() +#line 6561 "cs-parser.jay" { Linq.AQueryClause head = (Linq.AQueryClause)yyVals[-1+yyTop]; @@ -9477,8 +9652,8 @@ void case_955() yyVal = head; } -void case_956() -#line 6467 "cs-parser.jay" +void case_973() +#line 6576 "cs-parser.jay" { Linq.AQueryClause head = (Linq.AQueryClause)yyVals[0+yyTop]; @@ -9491,22 +9666,22 @@ void case_956() yyVal = head; } -void case_958() -#line 6480 "cs-parser.jay" +void case_975() +#line 6589 "cs-parser.jay" { report.Error (742, GetLocation (yyVals[0+yyTop]), "Unexpected symbol `{0}'. A query body must end with select or group clause", GetSymbolName (yyToken)); yyVal = yyVals[-1+yyTop]; } -void case_959() -#line 6485 "cs-parser.jay" +void case_976() +#line 6594 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_961() -#line 6497 "cs-parser.jay" +void case_978() +#line 6606 "cs-parser.jay" { yyVal = new Linq.Select ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -9514,8 +9689,8 @@ void case_961() current_block = current_block.Parent; } -void case_962() -#line 6504 "cs-parser.jay" +void case_979() +#line 6613 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -9524,8 +9699,8 @@ void case_962() linq_clause_blocks.Push ((Linq.QueryBlock)current_block); } -void case_963() -#line 6512 "cs-parser.jay" +void case_980() +#line 6621 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -9533,8 +9708,8 @@ void case_963() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_964() -#line 6519 "cs-parser.jay" +void case_981() +#line 6628 "cs-parser.jay" { var obj = (object[]) yyVals[0+yyTop]; @@ -9545,22 +9720,22 @@ void case_964() current_block = current_block.Parent; } -void case_966() -#line 6536 "cs-parser.jay" +void case_983() +#line 6645 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new object[2] { null, Location.Null }; } -void case_968() -#line 6545 "cs-parser.jay" +void case_985() +#line 6654 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-1+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } -void case_975() -#line 6565 "cs-parser.jay" +void case_992() +#line 6674 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -9573,8 +9748,8 @@ void case_975() ((Linq.QueryBlock)current_block).AddRangeVariable (sn); } -void case_977() -#line 6584 "cs-parser.jay" +void case_994() +#line 6693 "cs-parser.jay" { yyVal = new Linq.Where ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -9582,8 +9757,8 @@ void case_977() current_block = current_block.Parent; } -void case_978() -#line 6594 "cs-parser.jay" +void case_995() +#line 6703 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -9592,8 +9767,8 @@ void case_978() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_979() -#line 6602 "cs-parser.jay" +void case_996() +#line 6711 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -9602,8 +9777,8 @@ void case_979() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_980() -#line 6610 "cs-parser.jay" +void case_997() +#line 6719 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -9612,8 +9787,8 @@ void case_980() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_981() -#line 6618 "cs-parser.jay" +void case_998() +#line 6727 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -9652,8 +9827,8 @@ void case_981() ((Linq.QueryBlock)current_block).AddRangeVariable (into); } -void case_982() -#line 6656 "cs-parser.jay" +void case_999() +#line 6765 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -9662,8 +9837,8 @@ void case_982() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_983() -#line 6664 "cs-parser.jay" +void case_1000() +#line 6773 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -9672,8 +9847,8 @@ void case_983() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_984() -#line 6672 "cs-parser.jay" +void case_1001() +#line 6781 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -9682,8 +9857,8 @@ void case_984() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_985() -#line 6680 "cs-parser.jay" +void case_1002() +#line 6789 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -9726,22 +9901,22 @@ void case_985() ((Linq.QueryBlock)current_block).AddRangeVariable (into); } -void case_987() -#line 6726 "cs-parser.jay" +void case_1004() +#line 6835 "cs-parser.jay" { opt_intoStack.Push (GetLocation (yyVals[-1+yyTop])); yyVal = yyVals[0+yyTop]; } -void case_988() -#line 6734 "cs-parser.jay" +void case_1005() +#line 6843 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); lbag.AddLocation (current_block, GetLocation (yyVals[0+yyTop])); } -void case_989() -#line 6739 "cs-parser.jay" +void case_1006() +#line 6848 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -9749,8 +9924,8 @@ void case_989() yyVal = yyVals[0+yyTop]; } -void case_991() -#line 6750 "cs-parser.jay" +void case_1008() +#line 6859 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -9758,15 +9933,15 @@ void case_991() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_992() -#line 6757 "cs-parser.jay" +void case_1009() +#line 6866 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } -void case_994() -#line 6766 "cs-parser.jay" +void case_1011() +#line 6875 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -9774,43 +9949,43 @@ void case_994() current_block = new Linq.QueryBlock ((Linq.QueryBlock) current_block, lexer.Location); } -void case_995() -#line 6773 "cs-parser.jay" +void case_1012() +#line 6882 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } -void case_997() -#line 6785 "cs-parser.jay" +void case_1014() +#line 6894 "cs-parser.jay" { yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_998() -#line 6790 "cs-parser.jay" +void case_1015() +#line 6899 "cs-parser.jay" { yyVal = new Linq.OrderByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_1000() -#line 6802 "cs-parser.jay" +void case_1017() +#line 6911 "cs-parser.jay" { yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_1001() -#line 6807 "cs-parser.jay" +void case_1018() +#line 6916 "cs-parser.jay" { yyVal = new Linq.ThenByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_1003() -#line 6817 "cs-parser.jay" +void case_1020() +#line 6926 "cs-parser.jay" { /* query continuation block is not linked with query block but with block*/ /* before. This means each query can use same range variable names for*/ @@ -9827,8 +10002,8 @@ void case_1003() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_1004() -#line 6833 "cs-parser.jay" +void case_1021() +#line 6942 "cs-parser.jay" { var current_block = linq_clause_blocks.Pop (); var lt = (LocatedToken) yyVals[-2+yyTop]; @@ -9838,8 +10013,8 @@ void case_1004() }; } -void case_1007() -#line 6860 "cs-parser.jay" +void case_1024() +#line 6969 "cs-parser.jay" { current_container = current_type = new Class (current_container, new MemberName (""), Modifiers.PUBLIC, null); @@ -9868,8 +10043,8 @@ void case_1007() start_block (lexer.Location); } -void case_1008() -#line 6888 "cs-parser.jay" +void case_1025() +#line 6997 "cs-parser.jay" { --lexer.parsing_block; var method = (InteractiveMethod) oob_stack.Pop (); @@ -9883,16 +10058,24 @@ void case_1008() current_local_parameters = null; } -void case_1018() -#line 6934 "cs-parser.jay" +void case_1035() +#line 7043 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-1+yyTop]; module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; yyVal = null; } -void case_1019() -#line 6940 "cs-parser.jay" +void case_1036() +#line 7049 "cs-parser.jay" +{ + module.DocumentationBuilder.ParsedBuiltinType = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])); + module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; + yyVal = null; + } + +void case_1037() +#line 7055 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-3+yyTop]; module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; @@ -9900,15 +10083,15 @@ void case_1019() yyVal = new MemberName (lt.Value); } -void case_1022() -#line 6955 "cs-parser.jay" +void case_1040() +#line 7070 "cs-parser.jay" { module.DocumentationBuilder.ParsedParameters = (List)yyVals[-1+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-6+yyTop], MemberCache.IndexerNameAlias, Location.Null); } -void case_1023() -#line 6960 "cs-parser.jay" +void case_1041() +#line 7075 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -9917,8 +10100,8 @@ void case_1023() yyVal = null; } -void case_1024() -#line 6968 "cs-parser.jay" +void case_1042() +#line 7083 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -9927,33 +10110,33 @@ void case_1024() yyVal = null; } -void case_1025() -#line 6976 "cs-parser.jay" +void case_1043() +#line 7091 "cs-parser.jay" { - var p = (List)yyVals[0+yyTop] ?? new List (1); + var p = (List)yyVals[0+yyTop]; module.DocumentationBuilder.ParsedParameters = p; module.DocumentationBuilder.ParsedOperator = (Operator.OpType) yyVals[-1+yyTop]; yyVal = null; } -void case_1033() -#line 7014 "cs-parser.jay" +void case_1051() +#line 7129 "cs-parser.jay" { var parameters = new List (); parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); yyVal = parameters; } -void case_1034() -#line 7020 "cs-parser.jay" +void case_1052() +#line 7135 "cs-parser.jay" { var parameters = yyVals[-2+yyTop] as List; parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); yyVal = parameters; } -void case_1035() -#line 7029 "cs-parser.jay" +void case_1053() +#line 7144 "cs-parser.jay" { if (yyVals[-1+yyTop] != null) yyVal = new DocumentationParameter ((Parameter.Modifier) yyVals[-1+yyTop], (FullNamedExpression) yyVals[0+yyTop]); @@ -9973,100 +10156,102 @@ void case_1035() 40, 42, 42, 42, 42, 42, 43, 43, 43, 47, 44, 46, 49, 49, 49, 51, 51, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 68, 70, 72, 73, 74, 28, 28, 77, - 54, 54, 78, 78, 79, 79, 80, 82, 76, 76, - 81, 81, 87, 55, 91, 55, 55, 86, 94, 86, - 88, 88, 95, 95, 96, 97, 96, 92, 92, 98, - 98, 99, 100, 90, 90, 93, 93, 93, 103, 56, - 106, 107, 101, 108, 109, 110, 101, 101, 101, 102, - 102, 105, 105, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 114, 114, 117, 117, 117, 117, 120, - 117, 118, 118, 121, 121, 122, 122, 122, 115, 115, - 115, 123, 123, 123, 116, 125, 127, 128, 57, 130, - 131, 132, 59, 126, 126, 126, 126, 126, 136, 133, - 137, 134, 135, 135, 135, 138, 139, 140, 142, 29, - 29, 141, 141, 143, 143, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 147, 60, 146, 146, 148, 148, - 151, 145, 145, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 153, 152, 154, 152, 152, - 152, 61, 157, 159, 155, 156, 156, 158, 158, 163, - 161, 164, 161, 161, 161, 165, 62, 167, 58, 170, - 171, 58, 58, 166, 173, 166, 168, 168, 174, 174, - 175, 176, 175, 177, 172, 169, 169, 169, 169, 169, - 181, 178, 182, 179, 180, 180, 63, 64, 184, 186, - 187, 30, 183, 183, 183, 185, 185, 185, 188, 188, - 189, 190, 189, 189, 189, 191, 192, 193, 31, 194, - 194, 16, 16, 195, 195, 198, 197, 197, 197, 199, - 199, 201, 67, 124, 104, 104, 129, 129, 202, 202, - 202, 200, 200, 203, 203, 204, 204, 206, 206, 85, - 75, 75, 89, 89, 119, 119, 149, 149, 207, 207, - 207, 207, 207, 211, 211, 212, 210, 210, 210, 210, - 210, 210, 210, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 215, 215, 215, 216, 216, 216, 236, 236, - 237, 237, 238, 238, 218, 218, 235, 235, 235, 235, - 235, 235, 235, 235, 220, 220, 220, 240, 240, 241, - 241, 242, 242, 244, 244, 244, 245, 245, 245, 245, - 245, 245, 246, 246, 162, 162, 239, 239, 239, 239, - 239, 251, 251, 250, 250, 252, 252, 252, 252, 253, - 221, 221, 221, 249, 249, 254, 254, 255, 255, 222, - 223, 223, 224, 225, 226, 226, 217, 217, 217, 217, - 217, 260, 256, 227, 261, 261, 262, 262, 263, 263, - 264, 264, 264, 264, 257, 257, 208, 208, 259, 259, - 265, 265, 258, 258, 84, 84, 266, 266, 267, 228, - 268, 268, 268, 269, 269, 269, 269, 269, 270, 196, - 229, 229, 230, 230, 231, 231, 232, 272, 233, 273, - 233, 271, 271, 275, 274, 219, 276, 276, 276, 276, - 276, 276, 276, 276, 276, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 278, 278, - 278, 278, 278, 278, 278, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 280, 280, 280, 280, 280, 281, - 281, 281, 281, 281, 281, 281, 281, 281, 282, 282, - 282, 282, 282, 283, 283, 283, 284, 284, 284, 285, - 285, 285, 286, 286, 286, 287, 287, 287, 288, 288, - 289, 289, 289, 289, 289, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 291, 291, 292, 292, - 292, 292, 293, 293, 295, 294, 294, 294, 50, 50, - 297, 296, 298, 296, 299, 296, 300, 301, 296, 302, - 303, 296, 45, 45, 247, 247, 247, 247, 234, 234, - 234, 83, 305, 306, 307, 308, 309, 27, 66, 66, - 65, 65, 111, 111, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 69, - 69, 69, 71, 71, 311, 311, 312, 312, 313, 313, - 314, 314, 314, 314, 205, 205, 315, 315, 317, 112, - 318, 318, 319, 160, 160, 321, 320, 316, 316, 322, - 322, 323, 323, 323, 323, 323, 327, 327, 328, 328, - 328, 325, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 343, 343, 343, - 343, 330, 344, 326, 345, 345, 346, 346, 346, 346, - 346, 346, 209, 209, 347, 48, 48, 349, 324, 353, - 324, 351, 351, 348, 348, 348, 350, 350, 357, 357, - 356, 356, 358, 358, 352, 352, 354, 354, 359, 359, - 360, 355, 355, 355, 331, 331, 331, 342, 342, 361, - 362, 362, 332, 332, 363, 363, 363, 366, 364, 364, - 365, 365, 367, 367, 367, 368, 369, 369, 370, 370, - 370, 333, 333, 333, 333, 371, 371, 372, 372, 372, - 376, 373, 379, 375, 375, 382, 378, 378, 381, 381, - 377, 377, 385, 384, 384, 380, 380, 383, 383, 387, - 386, 386, 374, 374, 388, 374, 374, 374, 334, 334, - 334, 334, 334, 334, 389, 390, 390, 391, 391, 391, - 392, 392, 392, 393, 393, 393, 394, 394, 394, 395, - 395, 335, 335, 335, 335, 396, 396, 398, 398, 397, - 399, 397, 397, 397, 336, 337, 400, 340, 338, 338, - 402, 403, 341, 405, 406, 339, 339, 339, 404, 404, - 401, 401, 304, 304, 304, 304, 407, 407, 409, 409, - 411, 410, 412, 410, 408, 408, 408, 408, 408, 416, - 414, 417, 419, 414, 418, 418, 413, 413, 420, 420, - 420, 420, 420, 425, 421, 426, 422, 427, 428, 429, - 423, 431, 432, 433, 423, 430, 430, 435, 424, 434, - 438, 434, 437, 440, 437, 436, 436, 436, 439, 439, - 439, 415, 441, 415, 3, 3, 442, 3, 3, 443, - 443, 248, 248, 243, 243, 5, 444, 444, 444, 444, - 448, 444, 444, 444, 444, 445, 445, 446, 449, 446, - 447, 447, 450, 450, 451, + 53, 53, 68, 70, 73, 74, 75, 28, 28, 78, + 54, 54, 79, 79, 80, 80, 81, 83, 77, 77, + 82, 82, 88, 55, 92, 55, 55, 87, 95, 87, + 89, 89, 96, 96, 97, 98, 97, 93, 93, 99, + 99, 100, 101, 91, 91, 94, 94, 94, 104, 56, + 107, 108, 102, 109, 110, 111, 102, 102, 102, 103, + 103, 106, 106, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 115, 115, 118, 118, 118, 118, 121, + 118, 119, 119, 122, 122, 123, 123, 123, 116, 116, + 116, 124, 124, 124, 117, 126, 128, 129, 57, 131, + 132, 133, 59, 127, 127, 127, 127, 127, 137, 134, + 138, 135, 136, 136, 136, 139, 140, 141, 143, 29, + 29, 142, 142, 144, 144, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 148, 60, 147, 147, 149, 149, + 152, 146, 146, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 154, 153, 155, 153, 153, + 153, 61, 158, 160, 156, 157, 157, 159, 159, 164, + 162, 165, 162, 162, 162, 166, 62, 168, 58, 171, + 172, 58, 58, 167, 174, 167, 169, 169, 175, 175, + 176, 177, 176, 178, 173, 170, 170, 170, 170, 170, + 182, 179, 183, 180, 181, 181, 63, 64, 185, 187, + 188, 30, 184, 184, 184, 186, 186, 186, 189, 189, + 190, 191, 190, 190, 190, 192, 193, 194, 31, 195, + 195, 16, 16, 196, 196, 199, 198, 198, 198, 200, + 200, 202, 67, 125, 105, 105, 130, 130, 203, 203, + 203, 201, 201, 204, 204, 205, 205, 207, 207, 86, + 76, 76, 90, 90, 120, 120, 150, 150, 208, 208, + 208, 208, 208, 212, 212, 213, 211, 211, 211, 211, + 211, 211, 211, 214, 214, 214, 214, 214, 214, 214, + 214, 214, 215, 215, 215, 215, 215, 215, 215, 215, + 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, + 215, 215, 216, 216, 216, 217, 217, 217, 237, 237, + 238, 238, 239, 239, 219, 219, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 221, 221, 221, 241, 241, + 242, 242, 243, 243, 245, 245, 245, 246, 246, 246, + 246, 246, 246, 247, 247, 163, 163, 240, 240, 240, + 240, 240, 252, 252, 251, 251, 253, 253, 253, 253, + 254, 222, 222, 222, 250, 250, 255, 255, 256, 256, + 223, 224, 224, 225, 226, 227, 227, 218, 218, 218, + 218, 218, 261, 257, 228, 228, 262, 262, 263, 263, + 264, 264, 264, 264, 265, 265, 265, 265, 258, 258, + 209, 209, 260, 260, 266, 266, 259, 259, 85, 85, + 267, 267, 268, 229, 269, 269, 269, 270, 270, 270, + 270, 270, 271, 197, 230, 230, 231, 231, 232, 232, + 233, 273, 234, 274, 234, 272, 272, 276, 275, 220, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 279, 279, 279, 279, 279, 279, 279, 280, + 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, + 281, 281, 281, 281, 281, 282, 282, 282, 282, 282, + 282, 282, 282, 282, 283, 283, 283, 283, 283, 284, + 284, 284, 285, 285, 285, 286, 286, 286, 287, 287, + 287, 288, 288, 288, 289, 289, 290, 290, 290, 290, + 290, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 292, 292, 293, 293, 293, 293, 294, 294, + 296, 295, 295, 295, 50, 50, 298, 297, 299, 297, + 300, 297, 301, 302, 297, 303, 304, 297, 45, 45, + 248, 248, 248, 248, 235, 235, 235, 84, 306, 69, + 69, 307, 308, 308, 308, 310, 308, 311, 312, 313, + 314, 27, 66, 66, 65, 65, 112, 112, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 71, 71, 309, 309, 72, 72, 316, + 316, 317, 317, 318, 318, 319, 319, 319, 319, 206, + 206, 320, 320, 322, 113, 323, 323, 324, 161, 161, + 326, 325, 321, 321, 327, 327, 328, 328, 328, 328, + 328, 332, 332, 333, 333, 333, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 348, 348, 348, 348, 335, 349, 331, 350, + 350, 351, 351, 351, 351, 351, 351, 210, 210, 352, + 48, 48, 354, 329, 358, 329, 356, 356, 353, 353, + 353, 355, 355, 362, 362, 361, 361, 363, 363, 357, + 357, 359, 359, 364, 364, 365, 360, 360, 360, 336, + 336, 336, 347, 347, 366, 367, 367, 337, 337, 368, + 368, 368, 371, 369, 369, 370, 370, 372, 372, 372, + 373, 374, 374, 375, 375, 375, 338, 338, 338, 338, + 376, 376, 377, 377, 377, 381, 378, 384, 380, 380, + 387, 383, 383, 386, 386, 382, 382, 390, 389, 389, + 385, 385, 388, 388, 392, 391, 391, 379, 379, 393, + 379, 379, 379, 339, 339, 339, 339, 339, 339, 394, + 395, 395, 396, 396, 396, 397, 397, 397, 398, 398, + 398, 399, 399, 399, 400, 400, 340, 340, 340, 340, + 401, 401, 403, 403, 402, 405, 402, 402, 402, 404, + 404, 341, 342, 406, 345, 343, 343, 408, 409, 346, + 411, 412, 344, 344, 344, 410, 410, 407, 407, 305, + 305, 305, 305, 413, 413, 415, 415, 417, 416, 418, + 416, 414, 414, 414, 414, 414, 422, 420, 423, 425, + 420, 424, 424, 419, 419, 426, 426, 426, 426, 426, + 431, 427, 432, 428, 433, 434, 435, 429, 437, 438, + 439, 429, 436, 436, 441, 430, 440, 444, 440, 443, + 446, 443, 442, 442, 442, 445, 445, 445, 421, 447, + 421, 3, 3, 448, 3, 3, 449, 449, 249, 249, + 244, 244, 5, 450, 450, 450, 450, 450, 454, 450, + 450, 450, 450, 451, 451, 452, 455, 452, 453, 453, + 456, 456, 457, }; static readonly short [] yyLen = { 2, 2, 0, 3, 1, 2, 4, 3, 1, 0, 1, @@ -10079,7 +10264,7 @@ void case_1035() 3, 0, 1, 1, 3, 3, 1, 1, 1, 0, 4, 4, 0, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 16, 5, 0, + 1, 1, 0, 0, 0, 0, 0, 17, 5, 0, 9, 5, 0, 1, 1, 2, 3, 0, 3, 1, 1, 1, 0, 8, 0, 9, 6, 0, 0, 3, 0, 1, 1, 2, 2, 0, 5, 0, 1, 1, @@ -10112,214 +10297,219 @@ void case_1035() 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 3, 4, 4, 4, 3, - 3, 4, 3, 4, 4, 4, 3, 0, 1, 3, - 4, 0, 1, 1, 3, 2, 3, 3, 1, 2, - 3, 2, 1, 1, 0, 1, 1, 3, 3, 3, - 2, 1, 1, 1, 1, 2, 2, 4, 3, 1, - 4, 4, 3, 1, 3, 1, 3, 1, 1, 1, - 4, 3, 2, 2, 6, 3, 7, 4, 3, 7, - 3, 0, 2, 4, 1, 2, 0, 1, 1, 3, - 3, 1, 1, 1, 0, 1, 1, 2, 2, 3, - 1, 2, 0, 1, 2, 4, 1, 3, 0, 5, - 1, 1, 1, 2, 3, 3, 4, 4, 1, 2, - 4, 4, 4, 2, 4, 2, 4, 0, 4, 0, - 5, 0, 1, 0, 4, 4, 1, 2, 2, 4, - 2, 2, 2, 4, 2, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, - 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, + 1, 1, 1, 1, 3, 3, 4, 4, 4, 4, + 3, 3, 4, 3, 4, 4, 4, 3, 0, 1, + 3, 4, 0, 1, 1, 3, 2, 3, 3, 1, + 2, 3, 2, 1, 1, 0, 1, 1, 3, 3, + 3, 2, 1, 1, 1, 1, 2, 2, 4, 3, + 1, 4, 4, 3, 1, 3, 1, 3, 1, 1, + 1, 4, 3, 2, 2, 6, 3, 7, 4, 3, + 7, 3, 0, 2, 4, 3, 1, 2, 0, 1, + 1, 3, 1, 2, 3, 1, 1, 1, 0, 1, + 1, 2, 2, 3, 1, 2, 0, 1, 2, 4, + 1, 3, 0, 5, 1, 1, 1, 2, 3, 3, + 4, 4, 1, 2, 4, 4, 4, 2, 4, 2, + 4, 0, 4, 0, 5, 0, 1, 0, 4, 4, + 1, 2, 2, 4, 2, 2, 2, 4, 2, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 3, 3, 3, 3, 3, 3, 1, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 1, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 1, - 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, - 3, 3, 3, 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, 3, - 1, 5, 4, 5, 5, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 1, 3, 3, 2, - 1, 1, 0, 1, 0, 2, 1, 1, 1, 1, - 0, 4, 0, 4, 0, 5, 0, 0, 7, 0, - 0, 8, 1, 1, 1, 1, 1, 1, 6, 4, - 4, 1, 1, 0, 0, 0, 0, 15, 0, 1, - 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 2, 3, 0, 1, 1, 2, 4, 3, 1, 3, - 1, 3, 1, 1, 0, 1, 1, 1, 0, 4, - 1, 1, 0, 4, 1, 0, 4, 0, 1, 1, - 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, + 3, 1, 3, 3, 1, 3, 1, 5, 4, 5, + 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 1, 3, 3, 2, 1, 1, 0, 1, + 0, 2, 1, 1, 1, 1, 0, 4, 0, 4, + 0, 5, 0, 0, 7, 0, 0, 8, 1, 1, + 1, 1, 1, 1, 6, 4, 4, 1, 1, 0, + 1, 3, 0, 1, 1, 0, 6, 0, 0, 0, + 0, 15, 0, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 1, 2, 3, 0, 1, 1, + 2, 4, 3, 1, 3, 1, 3, 1, 1, 0, + 1, 1, 1, 0, 4, 1, 1, 0, 4, 1, + 0, 4, 0, 1, 1, 2, 1, 1, 1, 2, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 4, 1, 2, 2, 2, 2, 2, - 2, 1, 1, 2, 1, 1, 1, 0, 6, 0, - 7, 1, 1, 0, 2, 1, 0, 1, 0, 1, - 1, 2, 2, 4, 0, 2, 0, 1, 1, 2, - 4, 1, 5, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 5, 7, 4, 0, 8, 4, - 0, 1, 1, 2, 1, 2, 1, 2, 3, 3, - 1, 1, 1, 1, 1, 5, 4, 7, 3, 6, - 0, 4, 0, 4, 2, 0, 4, 2, 3, 1, - 0, 1, 0, 5, 1, 0, 1, 0, 1, 1, - 1, 3, 4, 5, 0, 9, 5, 4, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 3, 4, 3, - 3, 3, 2, 3, 3, 2, 4, 4, 3, 0, - 1, 3, 4, 5, 3, 1, 2, 0, 1, 2, - 0, 7, 3, 6, 2, 2, 0, 3, 5, 4, - 0, 0, 10, 0, 0, 9, 5, 4, 2, 1, - 0, 2, 2, 2, 2, 2, 4, 5, 4, 5, - 0, 5, 0, 6, 3, 2, 2, 2, 1, 0, - 3, 0, 0, 5, 2, 1, 1, 2, 1, 1, - 1, 1, 1, 0, 5, 0, 3, 0, 0, 0, - 12, 0, 0, 0, 13, 0, 2, 0, 3, 1, - 0, 4, 1, 0, 4, 1, 2, 2, 1, 2, - 2, 0, 0, 4, 2, 3, 0, 4, 2, 2, - 3, 0, 1, 1, 1, 2, 2, 2, 4, 3, - 0, 7, 4, 4, 3, 1, 3, 0, 0, 4, - 0, 1, 1, 3, 2, + 1, 1, 1, 1, 1, 1, 1, 0, 4, 1, + 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, + 1, 1, 0, 6, 0, 7, 1, 1, 0, 2, + 1, 0, 1, 0, 1, 1, 2, 2, 4, 0, + 2, 0, 1, 1, 2, 4, 1, 5, 2, 2, + 2, 2, 2, 2, 1, 1, 1, 1, 1, 5, + 7, 4, 0, 8, 4, 0, 1, 1, 2, 1, + 2, 1, 2, 3, 3, 1, 1, 1, 1, 1, + 5, 4, 7, 3, 6, 0, 4, 0, 4, 2, + 0, 4, 2, 3, 1, 0, 1, 0, 5, 1, + 0, 1, 0, 1, 1, 1, 3, 4, 5, 0, + 9, 5, 4, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 3, 4, 3, 3, 3, 2, 3, 3, + 2, 4, 4, 3, 0, 1, 3, 4, 5, 3, + 1, 2, 0, 1, 3, 0, 8, 3, 6, 0, + 4, 2, 2, 0, 3, 5, 4, 0, 0, 10, + 0, 0, 9, 5, 4, 2, 1, 0, 2, 2, + 2, 2, 2, 4, 5, 4, 5, 0, 5, 0, + 6, 3, 2, 2, 2, 1, 0, 3, 0, 0, + 5, 2, 1, 1, 2, 1, 1, 1, 1, 1, + 0, 5, 0, 3, 0, 0, 0, 12, 0, 0, + 0, 13, 0, 2, 0, 3, 1, 0, 4, 1, + 0, 4, 1, 2, 2, 1, 2, 2, 0, 0, + 4, 2, 3, 0, 4, 2, 2, 3, 0, 1, + 1, 1, 2, 2, 2, 2, 4, 3, 0, 7, + 4, 4, 3, 1, 3, 0, 0, 4, 0, 1, + 1, 3, 2, }; static readonly short [] yyDefRed = { 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 4, - 0, 0, 11, 14, 0, 1005, 0, 0, 1009, 0, + 0, 0, 11, 14, 0, 1022, 0, 0, 1026, 0, 0, 15, 17, 389, 395, 402, 390, 392, 0, 391, 0, 398, 400, 387, 0, 394, 396, 388, 399, 401, - 397, 352, 1026, 0, 393, 1016, 0, 10, 1, 0, - 0, 0, 12, 0, 832, 0, 0, 0, 0, 0, - 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, - 0, 428, 0, 0, 0, 490, 0, 429, 0, 529, - 0, 927, 0, 0, 0, 678, 0, 0, 0, 0, - 0, 0, 0, 729, 0, 782, 0, 0, 0, 0, - 0, 0, 0, 0, 427, 0, 667, 0, 831, 0, - 765, 0, 0, 0, 0, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 425, 426, 674, 566, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 675, 673, 676, 677, 749, 751, 0, 747, 750, 766, - 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, - 767, 0, 0, 0, 833, 834, 852, 853, 854, 855, - 889, 890, 891, 892, 893, 894, 0, 0, 0, 20, - 0, 0, 342, 0, 344, 1013, 16, 1006, 0, 0, - 249, 248, 245, 250, 251, 244, 263, 262, 255, 256, - 252, 254, 253, 257, 246, 247, 258, 259, 265, 264, - 260, 261, 0, 0, 1029, 0, 1018, 0, 1017, 3, - 55, 0, 0, 0, 44, 41, 43, 46, 47, 48, - 49, 50, 53, 13, 0, 0, 0, 895, 544, 431, - 432, 925, 0, 0, 0, 0, 0, 0, 0, 897, - 896, 0, 554, 548, 553, 781, 830, 752, 779, 778, - 780, 753, 754, 755, 756, 757, 758, 759, 760, 761, - 762, 763, 764, 0, 0, 0, 861, 0, 0, 0, - 797, 796, 0, 0, 0, 0, 0, 0, 0, 0, - 903, 0, 0, 0, 0, 403, 0, 0, 0, 906, - 0, 0, 0, 0, 546, 926, 0, 0, 0, 795, - 791, 0, 0, 0, 0, 0, 0, 0, 371, 0, - 0, 0, 0, 0, 0, 0, 0, 670, 0, 565, - 663, 0, 561, 0, 0, 563, 559, 573, 567, 574, - 568, 562, 558, 578, 572, 577, 571, 575, 569, 576, - 570, 661, 540, 0, 424, 423, 0, 0, 0, 0, - 0, 783, 0, 341, 0, 789, 790, 0, 493, 494, - 0, 0, 0, 787, 788, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1008, 748, - 798, 786, 0, 828, 829, 959, 976, 0, 0, 960, - 962, 0, 988, 945, 943, 969, 0, 0, 967, 970, - 971, 972, 973, 946, 944, 0, 0, 0, 346, 0, - 18, 0, 0, 0, 1025, 0, 353, 0, 0, 0, - 1027, 0, 0, 42, 700, 706, 698, 0, 695, 705, - 699, 697, 696, 703, 701, 702, 708, 704, 707, 709, - 0, 0, 693, 45, 54, 492, 0, 488, 489, 0, - 0, 486, 0, 800, 0, 0, 0, 859, 0, 827, - 825, 826, 0, 0, 0, 682, 0, 900, 898, 683, - 0, 0, 514, 0, 0, 0, 0, 505, 0, 509, - 519, 521, 0, 501, 0, 0, 0, 0, 0, 496, - 0, 499, 0, 503, 373, 902, 901, 0, 0, 905, - 904, 915, 0, 0, 0, 916, 0, 0, 928, 0, - 0, 794, 0, 383, 379, 380, 0, 0, 378, 381, - 382, 0, 0, 0, 579, 0, 0, 550, 0, 665, - 0, 746, 0, 0, 0, 740, 742, 743, 744, 435, - 436, 0, 349, 350, 0, 187, 186, 188, 0, 652, - 0, 0, 0, 375, 0, 647, 0, 0, 909, 0, - 0, 0, 440, 0, 443, 0, 0, 441, 0, 0, - 483, 0, 447, 0, 0, 0, 0, 472, 475, 0, - 0, 467, 474, 473, 636, 637, 638, 639, 640, 641, - 642, 643, 644, 646, 645, 583, 580, 585, 582, 584, - 581, 593, 589, 594, 590, 591, 0, 592, 0, 598, - 0, 599, 0, 605, 0, 606, 0, 607, 0, 608, - 0, 612, 0, 613, 0, 616, 0, 619, 0, 622, - 0, 625, 0, 628, 0, 630, 0, 0, 518, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 958, 957, - 0, 968, 0, 956, 0, 0, 343, 1023, 1024, 367, - 0, 0, 0, 364, 0, 0, 184, 0, 0, 1033, - 1019, 1021, 61, 63, 64, 0, 0, 56, 0, 0, - 65, 67, 30, 28, 0, 0, 0, 690, 0, 694, - 439, 0, 491, 0, 543, 0, 556, 173, 195, 0, - 0, 0, 163, 0, 0, 0, 174, 549, 0, 931, - 0, 881, 862, 0, 872, 0, 883, 0, 899, 837, - 0, 930, 0, 0, 504, 0, 520, 522, 0, 0, - 0, 459, 0, 0, 454, 0, 0, 660, 659, 484, - 0, 524, 498, 0, 0, 148, 525, 146, 147, 527, - 0, 542, 541, 840, 0, 920, 0, 913, 0, 917, - 533, 0, 0, 0, 368, 0, 531, 0, 0, 545, - 938, 0, 934, 857, 0, 949, 0, 947, 0, 0, - 680, 681, 0, 0, 0, 658, 657, 664, 0, 745, - 731, 732, 730, 741, 662, 0, 348, 650, 0, 0, - 0, 564, 560, 908, 907, 784, 444, 438, 442, 437, - 547, 482, 481, 480, 477, 476, 0, 471, 433, 434, - 445, 446, 0, 633, 0, 806, 0, 0, 977, 951, - 0, 978, 0, 961, 963, 974, 0, 989, 0, 955, - 1003, 19, 345, 728, 727, 0, 726, 0, 363, 1035, - 185, 1030, 0, 0, 60, 57, 0, 0, 0, 0, - 0, 0, 370, 0, 684, 0, 0, 85, 84, 0, - 487, 0, 0, 0, 0, 0, 178, 555, 0, 0, - 0, 0, 0, 873, 865, 863, 0, 884, 0, 0, - 929, 511, 510, 0, 462, 0, 0, 1014, 1015, 450, - 456, 0, 460, 0, 0, 0, 0, 0, 0, 838, - 923, 0, 914, 0, 539, 534, 0, 0, 530, 0, - 937, 0, 856, 950, 948, 0, 551, 0, 666, 656, - 351, 649, 648, 668, 479, 0, 470, 469, 468, 634, - 635, 632, 0, 822, 805, 0, 0, 0, 811, 0, - 953, 0, 982, 0, 0, 997, 998, 991, 0, 366, - 365, 1034, 0, 0, 66, 59, 0, 68, 29, 22, - 0, 0, 319, 0, 221, 0, 109, 0, 82, 816, - 121, 122, 0, 0, 0, 819, 193, 194, 0, 0, - 0, 0, 166, 175, 167, 169, 860, 0, 0, 0, - 0, 0, 882, 0, 0, 463, 464, 458, 461, 457, - 451, 455, 0, 516, 0, 485, 495, 449, 528, 526, - 0, 919, 0, 0, 0, 535, 0, 940, 0, 0, - 679, 671, 0, 478, 0, 0, 803, 802, 799, 812, - 952, 0, 0, 0, 966, 0, 964, 975, 0, 1004, - 1022, 0, 79, 0, 0, 73, 74, 77, 78, 0, - 336, 325, 324, 0, 685, 217, 104, 0, 801, 820, - 179, 0, 191, 0, 0, 0, 858, 942, 0, 0, - 0, 0, 864, 0, 885, 836, 500, 497, 845, 0, - 851, 0, 0, 843, 0, 847, 0, 538, 537, 939, - 935, 0, 669, 0, 0, 954, 979, 0, 965, 0, - 0, 993, 0, 80, 71, 0, 0, 0, 320, 0, - 0, 0, 0, 0, 180, 0, 170, 168, 932, 874, - 868, 866, 0, 0, 839, 844, 0, 848, 924, 0, - 0, 672, 0, 814, 0, 983, 1000, 1001, 994, 58, + 397, 0, 352, 1044, 0, 393, 1033, 0, 10, 1, + 0, 0, 0, 12, 0, 847, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, + 0, 0, 428, 0, 0, 0, 491, 0, 429, 0, + 533, 0, 944, 0, 0, 0, 684, 0, 0, 0, + 0, 0, 0, 0, 744, 0, 797, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 673, 0, 846, + 0, 780, 0, 0, 0, 0, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 425, 426, 680, 570, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 681, 679, 682, 683, 764, 766, 0, 762, 765, + 781, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 782, 0, 0, 0, 848, 849, 867, 868, 869, + 870, 904, 905, 906, 907, 908, 909, 0, 0, 0, + 20, 0, 0, 342, 0, 344, 1030, 16, 1023, 0, + 0, 249, 248, 245, 250, 251, 244, 263, 262, 255, + 256, 252, 254, 253, 257, 246, 247, 258, 259, 265, + 264, 260, 261, 0, 1047, 1036, 0, 0, 1035, 0, + 1034, 3, 55, 0, 0, 0, 44, 41, 43, 46, + 47, 48, 49, 50, 53, 13, 0, 0, 0, 910, + 548, 431, 432, 942, 0, 0, 0, 0, 0, 0, + 0, 0, 912, 911, 0, 558, 552, 557, 796, 845, + 767, 794, 793, 795, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 0, 0, 0, 876, + 0, 0, 0, 812, 811, 0, 0, 0, 0, 0, + 0, 0, 0, 918, 0, 0, 0, 0, 403, 0, + 0, 0, 921, 0, 0, 0, 0, 550, 943, 0, + 0, 0, 810, 806, 0, 0, 0, 0, 0, 0, + 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, + 676, 0, 569, 0, 0, 669, 0, 0, 565, 0, + 0, 567, 563, 577, 571, 578, 572, 566, 562, 582, + 576, 581, 575, 579, 573, 580, 574, 667, 544, 0, + 424, 423, 0, 0, 0, 0, 0, 798, 0, 341, + 0, 804, 805, 0, 494, 495, 0, 0, 0, 802, + 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1025, 763, 813, 801, 0, 843, + 844, 976, 993, 0, 0, 977, 979, 0, 1005, 962, + 960, 986, 0, 0, 984, 987, 988, 989, 990, 963, + 961, 0, 0, 0, 346, 0, 18, 0, 0, 0, + 1043, 0, 0, 353, 0, 0, 1045, 0, 0, 42, + 714, 720, 712, 0, 709, 719, 713, 711, 710, 717, + 715, 716, 722, 718, 721, 723, 0, 0, 707, 45, + 54, 493, 0, 489, 490, 0, 0, 487, 0, 815, + 0, 0, 0, 874, 0, 842, 840, 841, 0, 0, + 0, 688, 0, 915, 913, 689, 0, 0, 518, 0, + 0, 506, 513, 0, 0, 0, 507, 0, 0, 523, + 525, 0, 502, 0, 0, 0, 0, 0, 497, 0, + 500, 0, 504, 373, 917, 916, 0, 0, 920, 919, + 930, 0, 0, 0, 931, 0, 0, 945, 0, 0, + 809, 0, 383, 379, 380, 0, 0, 378, 381, 382, + 0, 0, 0, 583, 0, 0, 554, 0, 671, 600, + 599, 0, 0, 761, 0, 0, 0, 755, 757, 758, + 759, 435, 436, 0, 349, 350, 0, 187, 186, 188, + 0, 658, 0, 0, 0, 375, 0, 653, 0, 0, + 924, 0, 0, 0, 441, 0, 444, 0, 0, 442, + 0, 0, 484, 0, 448, 0, 0, 0, 0, 473, + 476, 0, 0, 468, 475, 474, 642, 643, 644, 645, + 646, 647, 648, 649, 650, 652, 651, 587, 584, 589, + 586, 588, 585, 597, 593, 598, 594, 595, 0, 596, + 0, 604, 0, 0, 605, 0, 611, 0, 612, 0, + 613, 0, 614, 0, 618, 0, 619, 0, 622, 0, + 625, 0, 628, 0, 631, 0, 634, 0, 636, 0, + 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 975, 974, 0, 985, 0, 973, 0, 0, 343, + 1041, 1042, 0, 0, 184, 0, 0, 1051, 367, 0, + 0, 0, 364, 1037, 1039, 61, 63, 64, 0, 0, + 56, 0, 0, 65, 67, 30, 28, 0, 0, 0, + 704, 0, 708, 439, 0, 492, 0, 547, 0, 560, + 173, 195, 0, 0, 0, 163, 0, 0, 0, 174, + 553, 0, 948, 0, 896, 877, 0, 887, 0, 898, + 0, 914, 852, 0, 947, 0, 0, 505, 0, 514, + 524, 526, 0, 0, 0, 460, 0, 0, 455, 0, + 0, 666, 665, 485, 0, 528, 499, 0, 0, 148, + 529, 146, 147, 531, 0, 546, 545, 855, 0, 0, + 0, 0, 928, 0, 932, 537, 0, 0, 0, 368, + 0, 535, 0, 0, 549, 955, 0, 951, 872, 0, + 966, 0, 964, 0, 0, 686, 687, 0, 0, 0, + 664, 663, 670, 0, 440, 760, 746, 747, 745, 756, + 668, 0, 348, 656, 0, 0, 0, 568, 564, 923, + 922, 799, 445, 438, 443, 437, 551, 483, 482, 481, + 478, 477, 0, 472, 433, 434, 446, 447, 0, 639, + 0, 821, 0, 0, 994, 968, 0, 995, 0, 978, + 980, 991, 0, 1006, 0, 972, 1020, 19, 345, 1053, + 185, 1048, 0, 743, 742, 0, 741, 0, 363, 0, + 60, 57, 0, 0, 0, 0, 0, 0, 370, 0, + 698, 0, 0, 85, 84, 0, 488, 0, 0, 0, + 0, 0, 178, 559, 0, 0, 0, 0, 0, 888, + 880, 878, 0, 899, 0, 0, 946, 515, 512, 0, + 463, 0, 0, 1031, 1032, 451, 457, 0, 461, 0, + 0, 0, 0, 0, 0, 853, 0, 938, 0, 935, + 929, 0, 543, 538, 0, 0, 534, 0, 954, 0, + 871, 967, 965, 0, 555, 0, 672, 662, 351, 655, + 654, 674, 480, 0, 471, 470, 469, 640, 641, 638, + 0, 837, 820, 0, 0, 0, 826, 0, 970, 0, + 999, 0, 0, 1014, 1015, 1008, 0, 1052, 366, 365, + 0, 0, 66, 59, 0, 68, 29, 22, 0, 0, + 319, 0, 221, 0, 109, 0, 82, 831, 121, 122, + 0, 0, 0, 834, 193, 194, 0, 0, 0, 0, + 166, 175, 167, 169, 875, 0, 0, 0, 0, 0, + 897, 0, 0, 464, 465, 459, 462, 458, 452, 456, + 0, 520, 0, 486, 496, 450, 532, 530, 0, 0, + 934, 0, 0, 0, 539, 0, 957, 0, 0, 685, + 677, 0, 479, 0, 0, 818, 817, 814, 827, 969, + 0, 0, 0, 983, 0, 981, 992, 0, 1021, 1040, + 0, 79, 0, 0, 73, 74, 77, 78, 0, 336, + 325, 324, 0, 699, 217, 104, 0, 816, 835, 179, + 0, 191, 0, 0, 0, 873, 959, 0, 0, 0, + 0, 879, 0, 900, 851, 501, 498, 860, 0, 866, + 0, 0, 858, 0, 862, 941, 0, 542, 541, 956, + 952, 0, 675, 0, 0, 971, 996, 0, 982, 0, + 0, 1010, 0, 80, 71, 0, 0, 0, 320, 0, + 0, 0, 0, 0, 180, 0, 170, 168, 949, 889, + 883, 881, 0, 0, 854, 859, 0, 863, 939, 0, + 0, 678, 0, 829, 0, 1000, 1017, 1018, 1011, 58, 0, 75, 76, 0, 0, 0, 0, 0, 0, 0, - 821, 177, 0, 190, 0, 0, 886, 850, 849, 736, - 922, 936, 823, 0, 0, 0, 81, 0, 0, 337, - 0, 0, 335, 321, 0, 329, 386, 0, 384, 0, - 686, 0, 715, 218, 105, 181, 933, 870, 867, 0, - 0, 879, 0, 980, 0, 995, 0, 0, 0, 317, - 0, 0, 712, 0, 0, 0, 716, 0, 0, 0, - 0, 0, 984, 27, 26, 23, 338, 334, 0, 0, - 330, 385, 718, 0, 0, 0, 106, 869, 737, 0, - 0, 0, 0, 32, 322, 723, 0, 724, 721, 0, - 719, 102, 0, 99, 0, 0, 88, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 100, 101, 149, 0, - 0, 234, 226, 227, 228, 229, 230, 231, 232, 233, - 0, 0, 224, 0, 0, 981, 0, 339, 333, 0, - 0, 0, 687, 89, 0, 733, 735, 277, 272, 276, - 0, 219, 225, 0, 987, 985, 722, 720, 0, 0, - 0, 0, 0, 0, 0, 286, 0, 0, 235, 0, - 0, 243, 0, 161, 150, 160, 0, 0, 0, 107, - 0, 0, 271, 0, 0, 270, 0, 154, 0, 0, - 357, 318, 0, 355, 0, 0, 196, 0, 0, 0, - 0, 0, 688, 0, 220, 0, 112, 110, 293, 0, + 694, 0, 725, 0, 691, 836, 177, 0, 190, 0, + 0, 901, 865, 864, 0, 953, 838, 0, 0, 0, + 81, 0, 0, 337, 0, 0, 335, 321, 0, 329, + 0, 386, 0, 384, 0, 0, 700, 0, 730, 218, + 0, 181, 950, 885, 882, 0, 0, 894, 748, 750, + 937, 997, 0, 1012, 0, 0, 0, 317, 0, 0, + 692, 727, 0, 696, 0, 0, 731, 0, 105, 0, + 0, 0, 1001, 27, 26, 23, 338, 334, 0, 0, + 330, 385, 0, 733, 0, 0, 0, 0, 884, 0, + 0, 0, 0, 0, 32, 322, 0, 738, 0, 739, + 736, 0, 734, 102, 0, 99, 0, 0, 88, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 100, 101, + 149, 0, 0, 234, 226, 227, 228, 229, 230, 231, + 232, 233, 0, 0, 224, 106, 749, 0, 998, 0, + 339, 333, 697, 0, 0, 0, 701, 89, 0, 277, + 272, 276, 0, 219, 225, 0, 1004, 1002, 737, 735, + 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, + 235, 0, 0, 243, 0, 161, 150, 160, 0, 0, + 0, 0, 0, 271, 0, 0, 270, 0, 154, 0, + 0, 357, 318, 0, 355, 0, 0, 196, 0, 0, + 0, 0, 0, 702, 220, 107, 112, 110, 293, 0, 354, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 159, 151, 0, 0, 200, 0, 358, 0, - 238, 237, 236, 0, 734, 108, 0, 290, 0, 268, - 127, 0, 266, 0, 0, 0, 129, 0, 359, 0, - 0, 197, 0, 0, 0, 356, 241, 120, 118, 0, + 238, 237, 236, 0, 0, 0, 290, 0, 268, 127, + 0, 266, 0, 0, 0, 129, 0, 359, 0, 0, + 197, 0, 0, 0, 356, 241, 108, 120, 118, 0, 0, 295, 0, 0, 0, 0, 0, 155, 0, 274, 0, 0, 0, 0, 133, 0, 0, 0, 0, 360, 361, 0, 0, 0, 0, 0, 115, 310, 0, 291, @@ -10337,683 +10527,682 @@ void case_1035() 0, 203, 281, 283, }; protected static readonly short [] yyDgoto = { 7, - 8, 49, 9, 50, 10, 11, 51, 232, 740, 702, - 12, 13, 52, 22, 23, 326, 235, 725, 901, 1100, - 1219, 1266, 1576, 898, 236, 237, 238, 239, 240, 241, - 242, 243, 718, 462, 719, 720, 1004, 721, 722, 1008, - 899, 1095, 1096, 1097, 267, 619, 1191, 110, 910, 780, - 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, - 1305, 1306, 1307, 1308, 481, 729, 1384, 1018, 1198, 1162, - 1231, 1259, 1324, 1396, 1227, 1450, 1427, 1475, 1476, 1477, - 1020, 1473, 1021, 789, 902, 1438, 1411, 1463, 534, 1456, - 1432, 1492, 984, 1461, 1464, 1465, 1560, 1493, 1494, 1490, - 1309, 1365, 1335, 1385, 742, 1440, 1539, 1408, 1496, 1569, - 482, 268, 743, 744, 745, 746, 747, 705, 592, 1203, - 706, 707, 916, 1387, 1416, 1507, 1468, 1541, 1388, 1443, - 1544, 1589, 1508, 1509, 1587, 1573, 1574, 1016, 1161, 1258, - 1321, 1369, 1322, 1323, 1359, 1423, 1391, 1360, 329, 223, - 1472, 1362, 1457, 1454, 1310, 1339, 1380, 1536, 1498, 1340, - 1537, 620, 1582, 1583, 1379, 1453, 1429, 1485, 1480, 1451, - 1517, 1522, 1483, 1486, 1487, 1568, 1523, 1481, 1482, 1578, - 1566, 1567, 1013, 1104, 1224, 1196, 1251, 1225, 1226, 1269, - 1158, 1248, 1282, 555, 193, 112, 366, 195, 585, 457, - 224, 1403, 703, 704, 886, 903, 330, 422, 554, 305, - 1228, 1229, 45, 114, 306, 116, 117, 118, 119, 120, + 8, 50, 9, 51, 10, 11, 52, 234, 753, 754, + 12, 13, 53, 22, 23, 329, 237, 738, 917, 1119, + 1243, 1296, 1606, 914, 238, 239, 240, 241, 242, 243, + 244, 245, 731, 468, 732, 733, 1022, 734, 735, 1026, + 915, 1114, 1115, 1116, 270, 631, 1211, 111, 926, 794, + 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, + 1337, 1338, 1339, 1340, 487, 742, 1415, 1036, 1224, 1182, + 1222, 1257, 1308, 1376, 1455, 1252, 1480, 1456, 1505, 1506, + 1507, 1038, 1503, 1039, 803, 918, 1467, 1441, 1493, 543, + 1486, 1461, 1522, 1002, 1491, 1494, 1495, 1590, 1523, 1524, + 1520, 1341, 1397, 1369, 1416, 755, 1469, 1569, 1438, 1526, + 1599, 488, 271, 756, 757, 758, 759, 760, 713, 604, + 1228, 714, 715, 932, 1418, 1446, 1537, 1498, 1571, 1419, + 1472, 1574, 1619, 1538, 1539, 1617, 1603, 1604, 1034, 1181, + 1288, 1353, 1400, 1354, 1355, 1391, 1453, 1422, 1392, 332, + 224, 1502, 1394, 1487, 1484, 1342, 1371, 1411, 1566, 1528, + 1271, 1567, 632, 1612, 1613, 1410, 1483, 1458, 1515, 1510, + 1481, 1547, 1552, 1513, 1516, 1517, 1598, 1553, 1511, 1512, + 1608, 1596, 1597, 1031, 1123, 1248, 1216, 1279, 1249, 1250, + 1299, 1178, 1276, 1313, 564, 194, 113, 372, 196, 597, + 464, 227, 1433, 722, 723, 906, 919, 333, 428, 563, + 308, 1253, 1254, 46, 115, 309, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 253, 861, 785, 1057, - 1047, 773, 940, 774, 775, 1048, 137, 198, 781, 622, - 623, 624, 855, 491, 492, 298, 1055, 783, 423, 300, - 517, 518, 519, 520, 523, 791, 314, 808, 809, 956, - 264, 497, 823, 265, 496, 138, 139, 140, 141, 142, + 131, 132, 133, 134, 135, 136, 137, 255, 877, 799, + 1075, 1065, 787, 956, 788, 789, 1066, 138, 199, 795, + 634, 635, 636, 871, 497, 498, 301, 1073, 797, 429, + 303, 526, 527, 528, 529, 532, 805, 317, 823, 824, + 974, 267, 503, 838, 268, 502, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 595, 596, 597, 828, 829, 153, 582, 571, 825, 367, - 1073, 569, 1142, 154, 511, 1014, 1160, 1256, 1363, 483, - 1232, 1233, 1290, 1291, 887, 574, 344, 833, 1367, 1211, - 1243, 575, 576, 269, 270, 271, 157, 158, 159, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 171, 284, 602, 172, 173, 322, 868, 678, 987, - 1079, 913, 736, 1024, 985, 988, 1120, 989, 1025, 1026, - 285, 174, 175, 176, 1132, 1061, 1133, 1134, 1135, 1136, - 177, 178, 179, 180, 753, 504, 754, 1123, 1042, 1124, - 1239, 1206, 1240, 755, 1041, 756, 1242, 1173, 181, 182, - 183, 184, 185, 186, 307, 545, 546, 1063, 1180, 318, - 1040, 923, 1205, 1070, 962, 1181, 187, 435, 188, 436, - 990, 1082, 437, 438, 694, 685, 686, 1087, 994, 439, - 440, 441, 442, 443, 995, 680, 992, 1185, 1262, 1326, - 1084, 1215, 1281, 878, 688, 879, 1151, 1089, 1152, 1216, - 999, 17, 19, 46, 47, 227, 708, 894, 458, 709, - 710, + 153, 607, 608, 609, 843, 844, 154, 594, 582, 840, + 373, 1092, 578, 1162, 155, 517, 1219, 1220, 1223, 1303, + 1032, 1180, 1286, 1395, 489, 1258, 1259, 1322, 1323, 907, + 586, 350, 849, 1291, 0, 0, 587, 588, 272, 273, + 274, 158, 159, 160, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 172, 287, 614, 173, + 174, 325, 884, 691, 1005, 1098, 929, 749, 1042, 1003, + 1006, 1139, 1007, 1043, 1044, 288, 175, 176, 177, 1151, + 1079, 1152, 1153, 1154, 1155, 178, 179, 180, 181, 766, + 510, 767, 1142, 1060, 1143, 1265, 1231, 1266, 768, 1059, + 769, 1268, 1193, 182, 183, 184, 185, 186, 187, 310, + 554, 555, 1082, 812, 1200, 321, 1058, 939, 1230, 1089, + 980, 1201, 188, 441, 189, 442, 1008, 1101, 443, 444, + 707, 698, 699, 1106, 1012, 445, 446, 447, 448, 449, + 1013, 693, 1010, 1205, 1292, 1359, 1103, 1239, 1312, 894, + 701, 895, 1171, 1108, 1172, 1240, 1017, 17, 19, 47, + 48, 226, 716, 910, 462, 717, 718, }; - protected static readonly short [] yySindex = { -100, - 0, -179, -141, -43, 33,17069, 0, 162, 0, 0, - 33, -43, 0, 0, 19, 0, 7076, 33, 0, -164, - 63, 0, 0, 0, 0, 0, 0, 0, 180, 0, - 191, 0, 0, 0, 3956, 0, 0, 0, 0, 0, - 0, 0, 0, 700, 0, 0, 726, 0, 0, 162, - 224, 33, 0, 184, 0, 333, 251, -183,16498, -63, - -266, 288, 7233, 0, -266, -266, -266, -185, -266, -266, - 757, 0, 9077, -266, -266, 0, 9234, 0, 319, 0, - -163, 0, -266, 420, -266, 0,17088,17088, 450, -266, - -266, 17,10307, 0,15737, 0,10438,10569,10700,10831, -10962,11093,11224,11355, 0, 151, 0, 8035, 0, 205, - 0, 123, 434, 437, 337, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1080, 795, - 227, -258, 588, 389, 460, 478, 504, 523, -274, 564, - 0, 0, 0, 0, 0, 0, 3657, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 123, 612, -286, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 225, 272, 224, 0, - 445, 219, 0, 608, 0, 0, 0, 0, 8035, 8035, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 635, 596, 0, 617, 0, -236, 0, 0, - 0, 224, 1481, 487, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 790, 123,15873, 0, 0, 0, - 0, 0,15737, -197, -161, 778, 370, 437, 123, 0, - 0, 8035, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -180, 215,16498, 0, 8035,15737, 692, - 0, 0, 703,15737,15737,14106, 677, -201, 718, 8192, - 0,10307, 151, 835, 721, 0, 739, 8035,15737, 0, - 882, 769, 536, -266, 0, 0,15737, 319,15329, 0, - 0, 420,15737, 420, -276, 530, 863, 123, 0, 612, - 337, 868, 123,15737,15737,15737, 288, 0, 841, 0, - 0,11486, 0, 7390, -264, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1406, 0, 0,16895, -276, 817, 816, -15737, 0, 783, 0, 181, 0, 0, 254, 0, 0, - 784, 9391, 7704, 0, 0,15737,15737,15737,15737,15737, -15737,15737,15737,15737,15737,15737,11617,11748,11879, 4222, - 4540,12010,12141,12272,12403,12534,12665,12796,12927,13058, -13189,13320,13451,13582,13713,13844,16281,15737, 0, 0, - 0, 0, 612, 0, 0, 0, 0,17088,17088, 0, - 0, 123, 0, 0, 0, 0, 489, 856, 0, 0, - 0, 0, 0, 0, 0, 224, 487, 823, 0, 826, - 0, 783, 635, 635, 0, 129, 0, 539, 635, 881, - 0, -111, 1481, 0, 0, 0, 0, -158, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 289,17624, 0, 0, 0, 0, 783, 0, 0, 840, - 732, 0, 885, 0, 896, 198, 319, 0, -266, 0, - 0, 0, 123,15329, -176, 0, 878, 0, 0, 0, - 53, 100, 0, 370, 894, 0, 910, 0, 906, 0, - 0, 0, 742, 0, 8447, 744, 9548, 718,15193, 0, - 7861, 0, 420, 0, 0, 0, 0, 106, 125, 0, - 0, 0, 214, 319, 499, 0, 1129, 915, 0, 143, - 123, 0, 146, 0, 0, 0,15737, 988, 0, 0, - 0,15737, 994, 916, 0, 917, 919, 0,16895, 0, - 84, 0, -125, 127, 7390, 0, 0, 0, 0, 0, - 0, 84, 0, 0, -267, 0, 0, 0, 420, 0, - -276, 123, 8623, 0, 918, 0, 921,13975, 0, 1038, - 920, 7390, 0, 869, 0, 783, 875, 0, 783, 783, - 0, -168, 0,15737,15737, 928, 1046, 0, 0, 201, - -131, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 795, 0, 795, 0, - 227, 0, 227, 0, -258, 0, -258, 0, -258, 0, - -258, 0, 588, 0, 588, 0, 389, 0, 460, 0, - 478, 0, 504, 0, 523, 0, 54, -155, 0, 9548, - 1014, 123, 1017, 123, 9548, 9548, 931,15737, 0, 0, - 856, 0, 123, 0, 534, 783, 0, 0, 0, 0, - 223, 224, 322, 0, 8623, 539, 0, 941, 940, 0, - 0, 0, 0, 0, 0, -98, 942, 0, 945, 943, - 0, 0, 0, 0, 948, 8780, 898, 0, -162, 0, - 0, 631, 0,15873, 0, 949, 0, 0, 0, 577, - 131, 950, 0, 952, 958, 969, 0, 0,15737, 0, - 123, 0, 0, 764, 0, 971, 0, 372, 0, 0, - 7233, 0, 7233, 8606, 0,14106, 0, 0,10176, 8763, - 271, 0, 134, 102, 0, 895, 923, 0, 0, 0, - 767, 0, 0, 975, 976, 0, 0, 0, 0, 0, - 978, 0, 0, 0, 982, 0, 4699, 0, 319, 0, - 0, 420, 562, 932, 0, 150, 0, 983, 984, 0, - 0, 7233, 0, 0, 7233, 0,15737, 0,15737, 8035, - 0, 0, 319, 986, 84, 0, 0, 0,15737, 0, - 0, 0, 0, 0, 0, 8035, 0, 0, 123,16895, - 1020, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,15057, 0, 0, 0, - 0, 0, 8018, 0, 8920, 0, 8175, 992, 0, 0, - 1066, 0, 1073, 0, 0, 0, 797, 0, 996, 0, - 0, 0, 0, 0, 0, 953, 0, 129, 0, 0, - 0, 0, 539, 539, 0, 0, 823, 998, 1002, 956, - 1008, 898, 0, 1001, 0, 1121, 1122, 0, 0, 9548, - 0,15465, 1005, 577, 8623, 8035, 0, 0, -227, 1124, - 1126, 164, 1003, 0, 0, 0,15737, 0,15737, 1103, - 0, 0, 0,15601, 0, 451,15601, 0, 0, 0, - 0, 8311, 0, 1131, 612, 9548, 1021, 8606, 1022, 0, - 0, 123, 0, 266, 0, 0, 783, 932, 0, 123, - 0, 82, 0, 0, 0, 1019, 0, 1049, 0, 0, - 0, 0, 0, 0, 0, 801, 0, 0, 0, 0, - 0, 0, 8192, 0, 0, 123, 486, 992, 0, 9548, - 0, 9548, 0, 165, 9548, 0, 0, 0, 743, 0, - 0, 0, 1025, 823, 0, 0, 9705, 0, 0, 0, - 1018, 4864, 0, 898, 0, 898, 0, 898, 0, 0, - 0, 0, 123, 1024, 1005, 0, 0, 0, -174, -147, - 1023, 1027, 0, 0, 0, 0, 0, 1030, 8606, 992, - -155,15737, 0, 1026, 7233, 0, 0, 0, 0, 0, - 0, 0, 1041, 0, 718, 0, 0, 0, 0, 0, - -184, 0, 1040, 783, 932, 0, 932, 0, 992, 1042, - 0, 0, 84, 0, 990, 1037, 0, 0, 0, 0, - 0, 9548, 1074, 9548, 0, 9548, 0, 0,15737, 0, - 0, 943, 0, 302, 813, 0, 0, 0, 0, -43, - 0, 0, 0, 1053, 0, 0, 0, 1044, 0, 0, - 0, 383, 0, 1045, 1166, 1167, 0, 0, 992, 1056, - 992, 1058, 0, 1059, 0, 0, 0, 0, 0,15737, - 0, 1064, -138, 0, 6917, 0, 1180, 0, 0, 0, - 0, 84, 0,15737, 8175, 0, 0, 1090, 0, 811, - 1065, 0, 1068, 0, 0, 9705, 33, 198, 0, 1067, - 1067, 1067,15465, 1076, 0,15737, 0, 0, 0, 0, - 0, 0, 7233, 74, 0, 0, 7390, 0, 0, 1083, - 7233, 0, 1084, 0, 9548, 0, 0, 0, 0, 0, -15737, 0, 0, 224, 1071, 224, 8035, 1114, 1114, 1114, - 0, 0,15737, 0, 7233, 9862, 0, 0, 0, 0, - 0, 0, 0, 1107, 9548,15737, 0, 224, 1089, 0, - 1047, 574, 0, 0, 1088, 0, 0, 103, 0, 1051, - 0, 1114, 0, 0, 0, 0, 0, 0, 0, 1092, - 971, 0, 7390, 0, 1123, 0, 41, 1114, 1214, 0, - 1104, 224, 0, 8035, 78, 1108, 0, 1109, 1110, 7233, - 1111, 9548, 0, 0, 0, 0, 0, 0, 1097, 1105, - 0, 0, 0,16577, 137, 224, 0, 0, 0, 1137, - 9548, 1118,15737, 0, 0, 0, 1132, 0, 0, 1134, - 0, 0,17624, 0, 1127, 137, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, -17624, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1143, 224, 0, 137, 123, 0, 1137, 0, 0, 1125, -16577,16743, 0, 0, 515, 0, 0, 0, 0, 0, -16775, 0, 0, 1144, 0, 0, 0, 0, 8035, 8035, - 83, 8192, 419, 420, 1176, 0, -276,14925, 0, 1209, - 0, 0, 1105, 0, 0, 0, 7390,14963, 1105, 0, - -145, -144, 0, 8035, -137, 0, 8035, 0, 1099, 1148, - 0, 0, -276, 0, 55,14993, 0, 1146, 1112, 119, - 554, 3956, 0, 1153, 0, 1105, 0, 0, 0, -276, - 0, 1155, 1113, 1152, 1151, 0, 1157, 1115, 1158, 198, - 1154, 1159, 0, 0, 1163, 1171, 0, 783, 0, 604, - 0, 0, 0, 1168, 0, 0, 87, 0, 1160, 0, - 0, 1173, 0, 1174, 1172, 1178, 0, 1177, 0, 198, - 198, 0, 198, 1175, 1179, 0, 0, 0, 0, 1184, - 183, 0, 1185, 198, 1290, 1186, 198, 0, 515, 0, - 8606, 1135, 1191, 1177, 0, 1182, 1189, 189, 1192, 0, - 0, 198,15465, 1150, 1193, 1184, 0, 0,17624, 0, - 224, 224, 0, 1156, 1194, 1185, 0, 1199, 0,15737, - 1161, 1197, 1186, 0, 1203, 198, 0, 91, 0, 1195, - 0, 0, 0, 0, 0,17624, 0, 189, 189, 0, - 1205, 0, 87, 0, 0, 97, 1210,17624, 0,17624, - 0, 0, 8606, 1202, 0, 0, 0, 1215, 1173, 0, - 0, 0, 1212, 0, 287, 0, 0, 0, 1114, 814, - 1218, 0, 0, 1221, 0, 0, 0, 0, 0, 1286, - 1339, 0, 0, 0, 0, 0, 0, 1232, 1233, 8606, - 0, 0, 0, 0, 189, 580, 580, 0, 1114, 0, - 0, 0, 24, 24, 0, 0, 0, 0, 0, 0, - 0,15193,15193, 0, 0, 0, 0, 0, 1237, 1234, - 1235, 0, 0, 0, + protected static readonly short [] yySindex = { -98, + 0, -176, 55, -199, 34,17217, 0, 149, 0, 0, + 34, -199, 0, 0, 28, 0, 7035, 34, 0, -170, + -239, 0, 0, 0, 0, 0, 0, 0, 200, 0, + 297, 0, 0, 0, 1389, 0, 0, 0, 0, 0, + 0, 320, 0, 0, 678, 0, 0, 732, 0, 0, + 149, 366, 34, 0, 443, 0, 30, 529, -141,16646, + -77, 298, 548, 7192, 0, 298, 298, 298, 38, 298, + 298, 788, 0, 9169, 298, 298, 0, 9326, 0, 512, + 0, -118, 0, 298, 554, 298, 0, 777, 777, 587, + 298, 298, -73, 9485, 0,15885, 0,10665,10796,10927, +11058,11189,11320,11451,11582, 0, 226, 0, 9029, 0, + 230, 0, 212, 551, 744, -223, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1744, + 805, 96, 465, 640, 714, 617, 576, 654, 661, 164, + 679, 0, 0, 0, 0, 0, 0, 3587, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 212, 711, 319, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 158, 387, 366, + 0, 472, 626, 0, 700, 0, 0, 0, 0, 9029, + 9029, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 320, 0, 0, 681, 713, 0, 18, + 0, 0, 0, 366,17762, 802, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 818, 212,16021, 0, + 0, 0, 0, 0,15885, -180, -174, 857, 771, 409, + 744, 212, 0, 0, 9029, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 108, -279,16646, 0, + 9029,15885, 808, 0, 0, 811,15885,15885, 5423, 218, + -110, 793, 9186, 0, 9485, 226, 946, 837, 0, 842, + 9029,15885, 0, 957, 851, 549, 298, 0, 0,15885, + 512,15477, 0, 0, 554,15885, 554, 176, 557, 940, + 212, 0, 711, -223, 943, 212,15885,15885,15885, 548, + 0, 898, 0, 9029, 9029, 0,10534, 212, 0, 7349, + -240, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4470, + 0, 0,17043, 176, 872, 888,15885, 0, 854, 0, + 173, 0, 0, 217, 0, 0, 853, 9616, 7663, 0, + 0,15885,15885,15885,15885,15885,15885,15885,15885,15885, +15885,15885,11713,11844,11975, 4629, 4794,12106,12237,12368, +12499,12630,12761,12892,13023,13154,13285,13416,13547,13678, +13809,13940,16429,15885, 0, 0, 0, 0, 711, 0, + 0, 0, 0, 777, 777, 0, 0, 212, 0, 0, + 0, 0, 442, 932, 0, 0, 0, 0, 0, 0, + 0, 366, 802, 867, 0, 896, 0, 854, 320, 320, + 0, 643, 171, 0, 320, 935, 0, -131,17762, 0, + 0, 0, 0, -162, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 93,17794, 0, 0, + 0, 0, 854, 0, 0, 970, 503, 0, 950, 0, + 977, 157, 512, 0, 298, 0, 0, 0, 212,15477, + -185, 0, 974, 0, 0, 0, 110, 111, 0, 771, + 409, 0, 0, 975, 0, 985, 0, 981, 941, 0, + 0, 645, 0, 8406, 705, 9773, 793,15341, 0, 7820, + 0, 554, 0, 0, 0, 0, 117, 134, 0, 0, + 0, 70, 512, -151, 0, 4152, 991, 0, 152, 212, + 0, 161, 0, 0, 0,15885, 1070, 0, 0, 0, +15885, 1075, 997, 0, 1002, 1003, 0,17043, 0, 0, + 0, 170, 854, 0, -206, 133, 7349, 0, 0, 0, + 0, 0, 0, 170, 0, 0, -254, 0, 0, 0, + 554, 0, 176, 212, 9790, 0, 1004, 0, 1020,14071, + 0, 1137, 1021, 7349, 0, 968, 0, 854, 971, 0, + 854, 854, 0, 77, 0,15885,15885, 1027, 1144, 0, + 0, 189, -154, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 805, 0, + 805, 0,10403, 96, 0, 96, 0, 465, 0, 465, + 0, 465, 0, 465, 0, 640, 0, 640, 0, 714, + 0, 617, 0, 576, 0, 654, 0, 661, 0, -58, + -172, 0, 9773, 1108, 212, 1110, 212, 9773, 9773, 1029, +15885, 0, 0, 932, 0, 212, 0, 665, 854, 0, + 0, 0, 9790, 643, 0, 1039, 1040, 0, 0, 377, + 366, 390, 0, 0, 0, 0, 0, 0, -203, 1047, + 0, 1038, 1051, 0, 0, 0, 0, 1048, 9947, 1017, + 0, 424, 0, 0, 530, 0,16021, 0, 1055, 0, + 0, 0, 591, 177, 1065, 0, 1064, 1067, 1068, 0, + 0,15885, 0, 212, 0, 0, 754, 0, 1069, 0, + 327, 0, 0, 7192, 0, 7192, 8565, 0,14202, 0, + 0, 0, 8724, 8855, 242, 0, 166, -81, 0, 1010, + 1022, 0, 0, 0, 751, 0, 0, 1072, 1074, 0, + 0, 0, 0, 0, 1076, 0, 0, 0, 1082, 298, + 7680, 512, 0, 512, 0, 0, 554, 581, 1030, 0, + 274, 0, 1080, 1081, 0, 0, 7192, 0, 0, 7192, + 0,15885, 0,15885, 9029, 0, 0, 512, 1086, 170, + 0, 0, 0,15885, 0, 0, 0, 0, 0, 0, + 0, 9029, 0, 0, 212,17043, 1116, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,15205, 0, 0, 0, 0, 0, 7977, 0, + 9012, 0, 8134, 1079, 0, 0, 1166, 0, 1167, 0, + 0, 0, 923, 0, 1089, 0, 0, 0, 0, 0, + 0, 0, 643, 0, 0, 1049, 0, 171, 0, 643, + 0, 0, 867, 1096, 1097, 1054, 1102, 1017, 0, 1098, + 0, 1219, 1220, 0, 0, 9773, 0,15613, 1106, 591, + 9790, 9029, 0, 0, 386, 1225, 1226, 163, 1104, 0, + 0, 0,15885, 0,15885, 1203, 0, 0, 0,15749, + 0, 555,15749, 0, 0, 0, 0, 8270, 0, 1244, + 711, 9773, 1134, 8565, 1138, 0,15885, 0, 212, 0, + 0, 301, 0, 0, 854, 1030, 0, 212, 0, -168, + 0, 0, 0, 1130, 0, 1164, 0, 0, 0, 0, + 0, 0, 0, 804, 0, 0, 0, 0, 0, 0, + 9186, 0, 0, 212, 595, 1079, 0, 9773, 0, 9773, + 0, 141, 9773, 0, 0, 0, 789, 0, 0, 0, + 1139, 867, 0, 0, 9930, 0, 0, 0, 1140, 7837, + 0, 1017, 0, 1017, 0, 1017, 0, 0, 0, 0, + 212, 1132, 1106, 0, 0, 0, -171, -150, 1136, 1141, + 0, 0, 0, 0, 0, 1143, 8565, 1079, -172,15885, + 0, 1145, 7192, 0, 0, 0, 0, 0, 0, 0, + 1142, 0, 793, 0, 0, 0, 0, 0, -212, 1148, + 0, 1149, 854, 1030, 0, 1030, 0, 1079, 1153, 0, + 0, 170, 0, 1090, 1135, 0, 0, 0, 0, 0, + 9773, 1179, 9773, 0, 9773, 0, 0,15885, 0, 0, + 1051, 0, 368, 825, 0, 0, 0, 0, -199, 0, + 0, 0, 1160, 0, 0, 0, 1147, 0, 0, 0, + 509, 0, 1150, 1273, 1274, 0, 0, 1079, 1161, 1079, + 1165, 0, 1156, 0, 0, 0, 0, 0,15885, 0, + 1170, -167, 0, 6876, 0, 0, 1283, 0, 0, 0, + 0, 170, 0,15885, 8134, 0, 0, 1194, 0, 938, + 1168, 0, 1173, 0, 0, 9930, 34, 157, 0, 302, + 1169, 1175,15613, 1181, 0,15885, 0, 0, 0, 0, + 0, 0, 7192, 40, 0, 0, 7349, 0, 0, 1260, + 7192, 0, 1183, 0, 9773, 0, 0, 0, 0, 0, +15885, 0, 0, 366, 1184, 366, 157, 9029, 1169, 1218, + 0, 1218, 0, 1169, 0, 0, 0,15885, 0, 7192, +10087, 0, 0, 0, 884, 0, 0, 1210, 9773,15885, + 0, 366, 1195, 0, 1146, 931, 0, 0, 1188, 0, + 1196, 0, 97, 0, 1198, 1152, 0, 1218, 0, 0, + 1218, 0, 0, 0, 0, 1200, 1069, 0, 0, 0, + 0, 0, 1227, 0, 52, 1218, 1311, 0, 1209, 366, + 0, 0, 9029, 0, 63, 1211, 0, 1212, 0, 7192, + 7349, 9773, 0, 0, 0, 0, 0, 0, 1199, 1206, + 0, 0,15341, 0,16725, 183, 366, 1216, 0, 1217, + 1228, 9773, 1213,15885, 0, 0, 1232, 0, 1221, 0, + 0, 1214, 0, 0,17794, 0, 1222, 183, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 534,17794, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1223, 366, 0, 0, 0, 212, 0, 1228, + 0, 0, 0, 1233,16725,16891, 0, 0, -222, 0, + 0, 0,16923, 0, 0, 183, 0, 0, 0, 0, + 9029, 9029, -165, 9186, 460, 554, 1261, 0, 176,15059, + 0, 1292, 0, 0, 1206, 0, 0, 0,15097, 1206, + 1239, -147, -132, 0, 9029, -126, 0, 9029, 0, 1201, + 1249, 0, 0, 176, 0, 168,15135, 0, 1254, 1208, + 175, 453, 1389, 0, 0, 0, 0, 0, 0, 176, + 0, 1257, 1224, 1256, 1252, 0, 1264, 1231, 1268, 157, + 1250, 1270, 0, 0, 1279, 1286, 0, 854, 0, 911, + 0, 0, 0, 1284, 1206, -49, 0, 1285, 0, 0, + 1295, 0, 1294, 1282, 1296, 0, 1293, 0, 157, 157, + 0, 157, 1297, 1298, 0, 0, 0, 0, 0, 1299, + 184, 0, 1302, 157, 1413, 1303, 157, 0, -222, 0, + 8565, 1266, 1310, 1293, 0, 1300, 1307, 187, 1317, 0, + 0, 157,15613, 1272, 1312, 1299, 0, 0,17794, 0, + 366, 366, 0, 1275, 1316, 1302, 0, 1322, 0,15885, + 1278, 1323, 1303, 0, 1329, 157, 0, 95, 0, 1321, + 0, 0, 0, 0, 0,17794, 0, 187, 187, 0, + 1331, 0, -49, 0, 0, -146, 1336,17794, 0,17794, + 0, 0, 8565, 1324, 0, 0, 0, 1337, 1295, 0, + 0, 0, 1338, 0, -120, 0, 0, 0, 1218, 965, + 1340, 0, 0, 1342, 0, 0, 0, 0, 0, 1396, + 1449, 0, 0, 0, 0, 0, 0, 1343, 1346, 8565, + 0, 0, 0, 0, 187, 508, 508, 0, 1218, 0, + 0, 0, -60, -60, 0, 0, 0, 0, 0, 0, + 0,15341,15341, 0, 0, 0, 0, 0, 1345, 1350, + 1351, 0, 0, 0, }; - protected static readonly short [] yyRindex = { 3086, - 0, 0, 7547, 3086, 0, 0, 0, 1608, 0, 0, - 3272, 1804, 0, 0, 0, 0, 0, 3272, 0, 0, - 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1609, 0, 0, 1609, 0, 0, 1608, - 3315, 3155, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1245, 0, 0, 0, 0, 0, 0, 0, 0, - 8937, 0, 1240, 0, 0, 0, 1240, 0, 0, 0, - 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, - 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4857, 0, 0, 0, 0, - 0, 0, 311, 4950, 4292, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5106, 5174, - 5414, 5618, 5958, 1839, 6230, 6366, 6502, 6638, 1243, 524, - 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3378, 0, - 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1609, 67, 0, 0, 0, 0, 0, 0, - 0, 3425, 632, 3492, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3903, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1246, 0, 0, 0, 0, - 0, 0, 3903, 1244, 0, 0, 0, 0, 0, 0, - 1244, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2404, 0, 2768, 341, 2534, 0, 0, 0, 2664, - 2534, 0, 0, 0, 0, 0, 1245, 0, 0, 0, - 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1249, 1674, 0, 0, - 1240, 0, 3903, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1964, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4024, 0, 0, - 0, 0, 0, 0, 0, 3535, 3578, 0, 0, 0, - 0, 2258, 1609, 1609, 0, -207, 0, 7721, 1609, 1622, - 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 425,16430, 0, 0, 0, 0, 3903, 0, 0, 0, - 0, 0, 0, 0, 0,16819, 0, 0, 0, 0, - 0, 0, 0, 771, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 836, 682, 936, 0, 0, 1255, 0, - 0, 0, 0, 0, 226, 0, 0, 4380, 1252, 0, - 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1581, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1249, 0, -16009, 0, 6757, 0, 252, 0, 0, 0, 0, 0, - 0,16009, 0, 0, 0, 0, 0, 0, -28, 0, - 680, 0, 0, 0, 1253, 0, 0, 0, 0, 1244, - 0, 0, 0, 3744, 0, 3903, 3744, 0, 3903, 4539, - 0, 0, 0, 0, 0, -195, 0, 0, 0, 0, - 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5278, 0, 5346, 0, - 5482, 0, 5550, 0, 5686, 0, 5754, 0, 5822, 0, - 5890, 0, 6026, 0, 6094, 0, 6162, 0, 6298, 0, - 6434, 0, 6570, 0, 6694, 0, 0, 660, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4024, 0, 0, 0, 0, 2258, 0, 0, 0, 0, - 1208,14268, 0, 0, 0, 9094, 0, 0, 818, 0, - 0, 0, 0, 0, 0, 760, 687, 0, 0, 1257, - 0, 0, 0, 0, 3023, 0, 0, 0, 0, 0, - 0,10019, 0, 0, 0, 820, 0, 0, 0, 9251, -16966, 0, 0, 831, 846, 849, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 772, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1260, 0, 0, 0, 0, - 3810, 0, 0, 258, 0, 99, 4062, 0, 0, 0, - 0, 0, 0, 0, 1258, 0, 0, 0, 0, 0, - 1261, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 260, 626, 0, 0, 0, 0, 0, 1262, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,16009, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, - 0, 0, 0, 0, 0, 0, -177, 0, 613, 0, - 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, - 0, 0, 9251, 7878, 0, 0, 1268, 0, 780, 0, - 0, 0, 0, 1265, 0, 1241, 1242, 0, 0, 0, - 0, 0, 1263, 9408, 0, 0, 0, 0,16998, 0, - 0, 0, 834, 0, 0, 0, 0, 0, 0, 2132, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4221, 0, 4698, 1288, 0, 0, - 0, 950, 0, 0, 0, 0, -240, 0, 0, 0, - 0, 834, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 848, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1282, 0, 0, 0, 0, 0, - 866, 870, 0, 0, 0, 0, 0, 0, 0, 1289, - 512, 1287, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4380, 0, 0, 0, 0, 0, - 1296, 0, 0, -240, 0, 0, 853, 0, 1289, 0, - 0, 0,16009, 0, 735, 749, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1257, 0,14107, 0, 0, 0, 0, 0,17136, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 704, 0, 716, 0, 0, 0, 0, 915, 0, - 787, 1291, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1297, 0, 0, 0, 1302, 0, 0, 0, - 0,16009, 0, 0, 0, 0, 0, 0, 0, -154, - 671, 0, 0, 0, 0, 0,17212,16819, 0, 432, - 432, 432, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,17317, 0, -255, 0, 1303, 1303, 1303, - 0, 0, 0, 0, 0, 1306, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,17360, 0, 0, - 0,14571, 0, 0, 1307, 0, 0, 447, 0, 0, - 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, - 1308, 0, 1311, 0, 0, 0, 3229, 1310, 363, 0, - 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2937, - 0, 0, 0, 0,14373,14657, 0, 0, 0, 731, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, - 0, 0,16601, 0, 0,14472, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16669, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,14751, 0,14373, 0, 0, 731, 0, 0, 0, - 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, - 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5080, 443, 0,14793, 0, 0, 0, -14863, 0, 2937, 0, 0, 0, 1311, 0, 2937, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 275, 0, 1315, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2937, 0, 0, 0, 565, - 0, 664, 0, 0, 0, 0, 0, 0, 0,16819, - 877, 0, 0, 0, 0, 0, 0, 1314, 0, 402, - 0, 0, 0, 0, 0, 0, 0, 0, 886, 0, - 0, 0, 0, 0, 0, 0, 0, 1312, 0,16819, -16819, 0,16851, 0, 0, 0, 0, 0, 0, 1313, -17584, 0, 1316,16819,16145, 1319,16819, 0, 0, 0, - 0, 0, 0, 1320, 0, 0, 0,17554, 0, 0, - 0,16819, 0, 0, 0, 1321, 0, 0, 407, 0, -17478,17516, 0, 0, 0, 1322, 0, 0, 0, 0, - 0, 0, 1323, 0, 0,16819, 0, 665, 0, 887, - 0, 0, 0, 0, 0, 867, 0,17402,17440, 0, - 0, 0, 0, 0, 0, 0, 0, 1368, 0, 1421, - 0, 0, 0, 891, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,17554,16317,17254, 0, 593, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1252, 1252, 0, 0, 0, 0, 0, 0, 0, + protected static readonly short [] yyRindex = { 3016, + 0, 0, 7506, 3016, 0, 0, 0, 1718, 0, 0, + 3202, 1926, 0, 0, 0, 0, 0, 3202, 0, 0, + 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1725, 0, 0, 1725, 0, 0, 1725, 0, 0, + 1718, 3245, 3085, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1359, 0, 0, 0, 0, 0, 0, 0, + 0,10104, 0, 1352, 0, 0, 0, 1352, 0, 0, + 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, + 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4787, 0, 0, 0, + 0, 0, 0, 345, 4880, 4222, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5036, + 5104, 1033, 5577, 5917, 6121, 6257, 1476, 6461, 6597, 4967, + 3954, 0, 0, 0, 0, 0, 0, 43, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3308, + 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1725, 0, 0, 92, 0, 0, 0, + 0, 0, 0, 3355, 604, 3422, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3833, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1361, 0, + 0, 0, 0, 0, 0, 3833, 1354, 0, 0, 0, + 0, 0, 0, 1354, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2334, 0, 1262, 955, 2464, 0, + 0, 0, 2594, 2464, 0, 0, 0, 0, 0, 1359, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1362, 2698, 0, 0, 1352, 0, 3833, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1581, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, + 0, 3465, 3508, 0, 0, 0, 0, 2188, 1725, 1725, + 0, 7994, -184, 0, 1725, 1731, 0, 0, 180, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 511,16578, 0, 0, + 0, 0, 3833, 0, 0, 0, 0, 0, 0, 0, + 0,16967, 0, 0, 0, 0, 0, 0, 0, 773, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, + 1489, 0, 0, -235, 1792, 0, 0, 1367, 602, 0, + 0, 0, 0, 210, 0, 0, 4310, 1366, 0, 0, + 0, 934, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1373, 0, 1752, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1362, 0, 0, + 0,16157, 3833, 0, 6716, 0, 228, 0, 0, 0, + 0, 0, 0,16157, 0, 0, 0, 0, 0, 0, + 26, 0, 852, 0, 0, 0, 1369, 0, 0, 0, + 0, 1354, 0, 0, 0, 3674, 0, 3833, 3674, 0, + 3833, 4469, 0, 0, 0, 0, 0, -208, 0, 0, + 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5208, 0, + 5276, 0, 0, 5425, 0, 5509, 0, 5645, 0, 5713, + 0, 5781, 0, 5849, 0, 5985, 0, 6053, 0, 6189, + 0, 6325, 0, 6393, 0, 6529, 0, 6653, 0, 0, + 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 635, 0, 0, 0, 0, 2188, 0, + 0, 0, 0,17241, 0, 0, 844, 0, 0, 1325, +14364, 0, 0, 0, 0, 0, 0, 0, 749, 683, + 0, 0, 1372, 0, 0, 0, 0, 2953, 0, 0, + 0, 0, 0, 0,10244, 0, 0, 0, 843, 0, + 0, 0,17291,17114, 0, 0, 860, 863, 885, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 774, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1377, 0, + 0, 0, 0, 0, 3740, 0, 0, 236, 0, 112, + 3992, 0, 0, 0, 0, 0, 0, 0, 1374, 0, + 0, 0, 0, 0, 1379, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 369, 608, 0, 0, + 0, 0, 0, 1376, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,16157, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, + 0, 0, -179, 0, 505, 0, 0, 0, 0, 0, + 0, 0,17291, 0, 0, 0, 0, -184, 0, 8151, + 0, 0, 1380, 0, 784, 0, 0, 0, 0, 1382, + 0, 1333, 1335, 0, 0, 0, 0, 0, 1381,17315, + 0, 0, 0, 0,17146, 0, 0, 0, 886, 0, + 0, 0, 0, 0, 0, 2062, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4151, 0, 4628, 1387, 0, 0, 0, 0, 1384, 0, + 0, 0, 0, 0, 321, 0, 0, 0, 0, 886, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 659, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 889, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1383, 0, 0, 0, 0, 0, 897, 904, + 0, 0, 0, 0, 0, 0, 0, 1386, 730, 1388, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4310, 0, 0, 0, 0, 0, 1392, 0, + 0, 0, 321, 0, 0, 959, 0, 1386, 0, 0, + 0,16157, 0, 656, 694, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1372, 0,14203, 0, 0, 0, 0, 0,17366, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 791, 0, 809, 0, 0, 0, 0, 991, 0, 813, + 1394, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1395, 0, 0, 0, 0, 196, 0, 0, 0, + 0,16157, 0, 0, 0, 0, 0, 0, 0, 360, + 543, 0, 0, 0, 0, 0,17409,16967, 0, 232, + 473, 513, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -152, 0, 0, 966, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,17495, 0, -215,16967, 0, 531, 1412, + 0, 1412, 0, 473, 0, 0, 0, 0, 0, 0, + 1408, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,17538, 0, 0, 0,14667, 0, 0, 1421, 0, + 0, 0, 494, 0, 0, 0, 0, 536, 0, 0, + 1412, 0, 0, 0, 0, 0, 1418, 0, 0, 0, + 0, 0, 0, 0, 3159, 1415, 539, 0, 0, -16, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1424, 0, 0, 0, 0, 0, 0, 0, 0, 2867, + 0, 0, 1366, 0, 0,14469,14753, 0, 0, 0, + 748, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 446, 0, 0,16749, 0, 0,14568, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,16817, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,14847, 0, 0, 0, 0, 0, 748, + 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, + 0, 0, 511, 0, 0,14469, 0, 0, 0, 0, + 0, 0, 0, 0, 0,14959, 518, 0,14889, 0, + 0, 0,15021, 0, 2867, 0, 0, 0, 0, 2867, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 395, 0, 1429, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 869, + 0, 697, 0, 0, 0, 0, 0, 0, 0,16967, + 907, 0, 0, 0, 0, 0, 0, 1441, 0, 174, + 0, 0, 0, 0, 2867, 0, 0, 922, 0, 0, + 0, 0, 0, 0, 0, 0, 1440, 0,16967,16967, + 0,16999, 0, 0, 0, 0, 0, 0, 0, 1442, +17732, 0, 1443,16967,16293, 1445,16967, 0, 0, 0, + 0, 0, 0, 1457, 0, 0, 0, 1238, 0, 0, + 0,16967, 0, 0, 0, 1458, 0, 0, 179, 0, +17656,17694, 0, 0, 0, 1459, 0, 0, 0, 0, + 0, 0, 1460, 0, 0,16967, 0, 585, 0, 933, + 0, 0, 0, 0, 0, 972, 0,17580,17618, 0, + 0, 0, 0, 0, 0, 0, 0, 1447, 0, 1534, + 0, 0, 0, 947, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1238,16465,17452, 0, 568, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1366, 1366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; protected static readonly short [] yyGindex = { 0, - 0, 1641, 0, 0, 0, 1, -15, -178, -41, -38, - 0, 1688, 1698, 342, 0, 8, 0, 0, 0, 0, - 0, 0, -974, -741, -214, -550, 0, 0, 0, 0, - 0, -220, 0, 0, 0, 701, 0, 807, 0, 0, - 0, 0, 551, 552, -17, -230, 0, -46, 0, -562, - 385, 0, 415, -615, -587, -568, -567, -540, -527, -526, - -525, 0,-1102, 0,-1230, 0, 13, 0, 85, 0, --1142, 0, 0, 0, -79, 199, 0, 0, 0, 237, --1120, 0, -269, -297, -350, 0, 0, 0, -945, 185, - 0, 0, -516, 0, 0, 255, 0, 0, 222, 0, - 0, 257, 0, -607, -853, 0, 0, 0, 0, 0, - -534, -10, 0, 0, 799, 802, 804, 987, -548, 0, - 0, -314, 812, 357, 0,-1412, 0, 0, 0, 0, - 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, - 0, 0, 0, 409, 0, 0, 0, 0, -302, 340, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -523, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 170, 0, 0, 253, 0, 0, 264, 267, 187, - 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, - 0, 0, 0, -45, 0, 403, -56, 0, 0, 330, - 0, -515, 0, 876, 0, 1204, -288, -268, -61, 905, - 0, 502, 0, -33, 188, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -257, 0, 1435, 0, -349, 0, - -271, 0, 0, 0, 815, 821, -301, -126, 989, 0, - 897, 0, 1147, 1384, 1033, 0, 0, 713, 1699, 0, - 0, 0, 0, 1006, 0, 0, 0, 0, 0, -483, - 1432, 0, 0, 0, 0, 0, 1238, 871, 872, 763, - 874, 1361, 1363, 1360, 1364, 1365, 0, 1367, 0, 0, - 0, 946, 1216, -546, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -299, 0, 0, 0, 0, -461, - 0, 555, 0, 463, 0,-1121, 0, 0, 0, 0, - 0, 661, -538, -16, -319, -13, 0, 1638, 0, 57, - 0, 58, 68, 111, 142, 147, 163, 195, 200, 204, - 247, 0, -712, 0, -24, 0, 0, 756, 0, 678, - 0, 0, 0, 0, 655, -246, 734, -884, 0, 776, - -472, 0, 0, 0, 0, 0, 0, 672, 0, 673, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, - 0, 0, 0, 0, -30, 0, 1264, 0, 0, 0, - 845, 0, 0, 0, 0, 0, 0, -172, 0, 0, - 0, 0, 0, 1373, 1136, 0, 0, 0, 0, 1375, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, - 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, - 0, 0, 0, 0, 0, -7, 922, 0, 0, 0, - 925, + 0, 1766, 0, 0, 0, -3, -15, -181, -41, -34, + 0, 1826, 1834, 342, 0, 4, 0, 0, 0, 0, + 0, 0,-1219, -767, -229, -675, 0, 0, 0, 0, + 0, -226, 0, 0, 0, 823, 0, 936, 0, 0, + 0, 0, 671, 677, -17, -216, 0, -47, 0, -481, + 478, 0, 527, -699, -582, -579, -561, -530, -509, -506, + -504, 0,-1153, 0,-1274, 0, 14, 0, 0, 0, + 632,-1183, 0, 0, 0, -14, 315, 0, 0, 0, + 353,-1146, 0, -280, -300, -527, 0, 0, 0, -972, + 305, 0, 0, -532, 0, 0, 373, 0, 0, 346, + 0, 0, 379, 0, -660, -858, 0, 0, 0, 0, + 0, -435, -10, 0, 0, 937, 945, 949, 1118, -570, + 0, 0, -305, 964, 470, 0, -892, 0, 0, 0, + 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, + 0, 0, 0, 0, 521, 0, 0, 0, 0, -290, + 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 545, 0, -523, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 299, 0, 0, 380, 0, 0, 383, 388, + 306, 0, 0, 0, 0, 0, 0, 0, 0, 620, + 0, 0, 0, 0, -69, 0, 316, -24, 0, 0, + 454, 0, -424, 0, 999, 0, 1355, -299, -274, -62, + 909, 0, 625, 0, -35, 165, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -259, 0, 37, 0, -355, + 0, -275, 0, 0, 0, 958, 960, -306, -128, 1131, + 0, 1042, 0, 1313, 1535, 1191, 0, 0, 849, 1869, + 0, 0, 0, 0, 1163, 0, 0, 0, 0, 0, + -516, 1605, 0, 0, 0, 0, 0, 1390, 939, 929, + 792, 944, 1528, 1531, 1527, 1537, 1539, 0, 1572, 0, + 0, 0, 1151, 1420, -562, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -307, 814, 0, -681, 0, + 0, 0, 0, 0, -475, 0, 745, 0, 637, 0, + 715, 0, 0, 0, 0, 0, 858, -559, -11, -329, + -1, 0, 1847, 0, 48, 0, 56, 73, 81, 83, + 125, 160, 167, 182, 207, 252, 0, -716, 0, 2, + 0, 0, 952, 0, 873, 0, 0, 0, 0, 850, + -927, 926, -919, 0, 978, -493, 0, 0, 0, 0, + 0, 0, 881, 0, 870, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 803, 0, 0, 0, 0, 0, 0, 0, 0, -42, + 0, 1481, 0, 836, 0, 0, 1058, 0, 0, 0, + 0, 0, 0, -175, 0, 0, 0, 0, 0, 1602, + 1344, 0, 0, 0, 0, 1603, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, + 0, 0, 0, 0, 810, 0, 0, 0, 0, 0, + 0, 19, 1154, 0, 0, 0, 1155, }; - protected static readonly short [] yyTable = { 109, - 155, 532, 189, 156, 18, 784, 111, 328, 333, 233, - 446, 535, 234, 485, 790, 445, 489, 464, 43, 507, - 730, 293, 321, 553, 578, 258, 530, 192, 369, 528, - 419, 752, 564, 621, 259, 835, 834, 1075, 516, 229, - 327, 332, 1201, 1012, 839, 339, 312, 252, 930, 949, - 931, 377, 593, 385, 524, 304, 1234, 1235, 249, 311, - 678, 559, 1332, 846, 594, 373, 362, 376, 313, 384, - 316, 1129, 249, 160, 161, 498, 14, 345, 996, 757, - 1341, 1111, 289, 1130, 162, 846, 51, 852, 460, 424, - 290, 190, 315, 1223, 315, 1542, 1543, 723, 51, 961, - 866, 999, 963, 1080, 250, 1267, 836, 580, 1113, 905, - 1397, 1399, 326, 1031, 363, 16, 347, 869, 1405, 453, - 454, 1261, 874, 875, 862, 421, 416, 163, 347, 1130, - 830, 347, 347, 906, 449, 404, 405, 364, 417, 109, - 155, 231, 425, 156, 713, 347, 111, 233, 837, 1223, - 447, 489, 1575, 251, 679, 1, 890, 895, 164, 499, - 907, 996, 51, 165, 581, 525, 996, 526, 996, 250, - 714, 996, 996, 250, 996, 996, 678, 291, 678, 166, - 796, 42, 495, 94, 999, 846, 291, 250, 291, 999, - 463, 999, 260, 447, 999, 999, 996, 999, 999, 487, - 490, 853, 715, 94, 115, 734, 6, 250, 505, 250, - 51, 167, 494, 160, 161, 455, 168, 362, 251, 999, - 169, 527, 251, 776, 162, 867, 485, 376, 538, 488, - 782, 464, 292, 678, 1080, 493, 251, 1131, 15, 846, - 461, 292, 863, 292, 805, 1394, 115, 932, 1516, 515, - 115, 996, 258, 191, 593, 578, 251, 2, 251, 724, - 552, 503, 258, 170, 556, 363, 594, 163, 449, 561, - 1114, 506, 1398, 1400, 999, 1540, 510, 512, 969, 1584, - 1406, 558, 578, 1131, 584, 560, 563, 1550, 364, 1551, - 594, 539, 363, 337, 551, 1285, 1264, 374, 164, 548, - 1012, 550, 365, 165, 1195, 510, 716, 549, 760, 864, - 1413, 449, 261, 328, 2, 364, 603, 566, 567, 166, - 643, 645, 362, 3, 4, 5, 6, 577, 606, 1208, - 579, 609, 1126, 1273, 376, 490, 490, 1068, 1373, 826, - 601, 376, 1448, 376, 115, 376, 1534, 1019, 682, 684, - 1153, 167, 1512, 600, 1012, 762, 168, 941, 1253, 1547, - 169, 792, 197, 51, 488, 618, 1029, 20, 625, 626, - 627, 628, 629, 630, 631, 632, 633, 634, 635, 291, - 794, 681, 683, 1056, 700, 687, 917, 1374, 1393, 376, - 94, 891, 1292, 197, 1395, 697, 1561, 20, 811, 1585, - 677, 814, 594, 170, 233, 362, 1375, 447, 374, 374, - 374, 1548, 374, 374, 701, 374, 1265, 374, 48, 1037, - 1085, 1426, 194, 805, 761, 1414, 1581, 1081, 865, 1083, - 731, 1059, 1088, 362, 292, 338, 54, 362, 1478, 362, - 362, 362, 362, 1419, 1505, 698, 699, 362, 1209, 922, - 94, 711, 1274, 738, 1043, 695, 750, 741, 758, 374, - 1207, 374, 1039, 6, 374, 1535, 1012, 1449, 1212, 717, - 370, 763, 1012, 115, 1066, 942, 1254, 793, 691, 751, - 426, 485, 490, 691, 199, 291, 748, 691, 400, 194, - 194, 196, 1237, 362, 831, 200, 795, 231, 797, 231, - 804, 938, 691, 489, 813, 231, 115, 976, 516, 779, - 194, 618, 291, 788, 812, 1086, 884, 815, 371, 1146, - 485, 1148, 1118, 1149, 401, 593, 1143, 426, 885, 691, - 352, 115, 796, 798, 449, 1038, 1420, 594, 739, 816, - 292, 363, 1557, 291, 818, 838, 797, 1278, 691, 848, - 1558, 231, 850, 851, 803, 832, 1436, 231, 577, 244, - 827, 579, 939, 427, 364, 726, 231, 957, 428, 727, - 429, 827, 859, 430, 431, 738, 432, 433, 365, 372, - 94, 1138, 500, 1139, 250, 577, 1466, 1467, 579, 1469, - 501, 450, 231, 452, 451, 1182, 854, 854, 604, 1027, - 1488, 194, 194, 1495, 402, 403, 465, 797, 605, 466, - 427, 1559, 594, 362, 1022, 428, 291, 429, 1511, 739, - 430, 431, 1214, 432, 433, 453, 248, 928, 291, 860, - 728, 369, 978, 251, 796, 871, 738, 873, 834, 883, - 776, 352, 1533, 502, 362, 352, 881, 347, 123, 943, - 123, 937, 1245, 434, 452, 123, 785, 362, 263, 449, - 1313, 363, 779, 465, 194, 929, 466, 779, 779, 691, - 877, 607, 792, 340, 1376, 1058, 1054, 369, 792, 340, - 739, 608, 1154, 1064, 364, 94, 453, 490, 1314, 352, - 194, 115, 363, 374, 535, 888, 689, 347, 365, 1280, - 444, 245, 194, 347, 924, 246, 1313, 1315, 1316, 347, - 194, 785, 347, 347, 690, 364, 488, 952, 1327, 515, - 689, 691, 320, 1377, 1294, 1312, 347, 792, 340, 365, - 331, 510, 258, 752, 1314, 1317, 331, 889, 690, 904, - 966, 556, 1122, 332, 689, 1294, 788, 689, 1318, 1319, - 1320, 1164, 779, 1315, 1316, 247, 971, 782, 347, 958, - 363, 796, 115, 1165, 1401, 690, 194, 543, 362, 194, - 710, 1312, 362, 1294, 347, 362, 1099, 362, 1415, 631, - 717, 1317, 362, 364, 799, 711, 410, 411, 953, 115, - 374, 542, 972, 1119, 1318, 1319, 1320, 365, 710, 964, - 1434, 965, 194, 194, 543, 320, 375, 250, 717, 378, - 490, 970, 967, 711, 827, 578, 490, 717, 1049, 320, - 334, 544, 1119, 1386, 946, 448, 1090, 427, 379, 380, - 194, 194, 428, 1386, 429, 363, 1030, 430, 431, 618, - 432, 433, 1390, 412, 586, 618, 701, 982, 381, 788, - 194, 587, 1390, 1077, 484, 231, 251, 578, 364, 382, - 1174, 1078, 631, 588, 194, 1022, 413, 631, 990, 631, - 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, - 741, 94, 586, 804, 914, 804, 374, 804, 414, 587, - 1364, 631, 779, 631, 506, 631, 1204, 631, 631, 631, - 697, 588, 450, 691, 717, 1062, 450, 1065, 691, 882, - 44, 1044, 691, 1067, 1011, 320, 1046, 690, 374, 1046, - 94, 113, 415, 578, 730, 1099, 992, 691, 779, 1421, - 788, 352, 1103, 1236, 954, 352, 908, 347, 352, 1076, - 352, 1250, 231, 909, 1499, 352, 94, 320, 115, 806, - 115, 990, 631, 418, 691, 1284, 990, 714, 990, 713, - 490, 990, 990, 113, 990, 990, 714, 113, 713, 406, - 407, 194, 779, 691, 779, 347, 1108, 779, 347, 352, - 297, 1358, 1112, 408, 409, 807, 986, 1336, 1337, 1098, - 1368, 331, 331, 807, 340, 194, 1338, 340, 426, 115, - 808, 485, 115, 464, 808, 225, 1552, 883, 808, 992, - 456, 717, 331, 1329, 992, 1218, 992, 364, 456, 992, - 992, 788, 992, 992, 510, 452, 1105, 804, 1106, 1361, - 1107, 278, 278, 804, 459, 804, 347, 288, 1361, 288, - 278, 990, 347, 1572, 288, 486, 521, 578, 347, 512, - 522, 651, 347, 651, 337, 512, 69, 69, 1590, 1591, - 69, 113, 827, 535, 779, 347, 779, 508, 779, 986, - 225, 1150, 226, 176, 986, 176, 986, 176, 509, 986, - 986, 427, 986, 986, 531, 189, 428, 189, 429, 189, - 536, 430, 431, 375, 432, 433, 225, 347, 228, 992, - 1157, 733, 824, 331, 331, 734, 824, 194, 824, 490, - 824, 767, 506, 777, 537, 768, 813, 522, 577, 741, - 813, 579, 813, 296, 813, 297, 1183, 788, 194, 347, - 347, 827, 347, 347, 62, 925, 945, 540, 1098, 926, - 946, 1194, 871, 875, 541, 506, 871, 875, 506, 70, - 996, 997, 233, 70, 1221, 447, 557, 1222, 807, 986, - 577, 562, 807, 579, 1187, 1188, 331, 779, 655, 657, - 659, 661, 1074, 1217, 863, 1022, 233, 1562, 1563, 447, - 397, 398, 399, 570, 1155, 506, 1156, 1032, 598, 1032, - 113, 599, 331, 815, 1289, 815, 364, 779, 1150, 194, - 164, 610, 164, 796, 331, 941, 347, 941, 347, 796, - 1221, 693, 331, 1222, 732, 171, 796, 171, 172, 72, - 172, 72, 194, 113, 536, 536, 577, 347, 347, 579, - 691, 691, 115, 1293, 1311, 195, 1222, 195, 194, 165, - 368, 165, 194, 696, 779, 1199, 1200, 347, 113, 712, - 128, 1289, 128, 759, 1293, 347, 735, 1222, 347, 294, - 135, 294, 135, 779, 301, 506, 301, 737, 331, 1371, - 1372, 331, 647, 649, 764, 651, 653, 765, 1345, 766, - 1311, 817, 1293, 663, 665, 1222, 810, 819, 821, 820, - 822, 840, 841, 844, 1404, 845, 847, 1407, 857, 194, - 449, 858, 849, 513, 331, 331, 425, 870, 425, 513, - 872, 876, 892, 893, 450, 42, 897, 194, 194, 896, - 900, 918, 115, 196, 1366, 919, 1412, 425, 425, 912, - 343, 920, 331, 331, 347, 349, 351, 353, 355, 357, - 359, 361, 921, 1412, 927, 944, 947, 425, 950, 863, - 577, 948, 955, 579, 959, 425, 960, 968, 425, 991, - 115, 1444, 974, 1445, 115, 986, 993, 1006, 115, 998, - 1000, 741, 1007, 1009, 1010, 1012, 1015, 1017, 1023, 1035, - 1422, 1036, 1045, 1039, 801, 194, 1053, 525, 1101, 1060, - 1071, 1072, 115, 24, 1091, 25, 1115, 1125, 26, 1109, - 1116, 741, 741, 27, 741, 1117, 194, 28, 113, 1479, - 1127, 1137, 1144, 1141, 194, 741, 30, 1145, 741, 1159, - 1147, 1167, 1168, 32, 1163, 1166, 1506, 1169, 33, 1171, - 115, 1175, 34, 741, 1172, 1179, 1186, 1190, 1189, 1518, - 1520, 1197, 1220, 788, 36, 1202, 37, 115, 1366, 1210, - 38, 331, 1230, 1213, 1244, 506, 1247, 741, 39, 40, - 386, 1252, 41, 1260, 1249, 802, 1506, 1506, 1255, 1268, - 1263, 1270, 1528, 331, 1275, 1276, 1277, 1283, 1279, 113, - 1284, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 291, 1325, 1328, 1333, 262, 1347, 331, 629, 286, - 287, 288, 1330, 294, 295, 788, 113, 1331, 308, 309, - 1342, 1370, 1378, 1392, 1417, 317, 1409, 319, 1410, 323, - 1425, 1428, 1430, 1506, 335, 336, 1431, 1433, 1435, 1418, - 1420, 1439, 1400, 1441, 1437, 490, 490, 1442, 1447, 343, - 1452, 1455, 788, 1459, 1458, 1489, 325, 1470, 383, 1460, - 1462, 1471, 1500, 1503, 115, 1577, 1577, 1474, 1484, 1491, - 1504, 1510, 1586, 1586, 618, 618, 1501, 1513, 1514, 1525, - 1527, 565, 1530, 1524, 1532, 1538, 1545, 1549, 1529, 343, - 912, 629, 1553, 1556, 1554, 1564, 629, 1565, 629, 629, - 629, 629, 629, 629, 629, 629, 629, 629, 629, 194, - 1548, 1547, 1570, 1571, 1592, 1593, 1594, 9, 1028, 331, - 629, 552, 629, 507, 629, 910, 629, 629, 629, 911, - 653, 1020, 508, 465, 654, 725, 33, 506, 33, 466, - 331, 323, 629, 532, 637, 639, 641, 34, 817, 565, - 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, - 565, 565, 565, 565, 565, 34, 194, 818, 216, 103, - 809, 583, 876, 841, 842, 113, 877, 113, 921, 713, - 24, 629, 25, 347, 327, 26, 194, 878, 738, 880, - 27, 354, 691, 691, 28, 713, 347, 131, 113, 317, - 230, 297, 383, 30, 138, 132, 114, 298, 139, 53, - 32, 331, 21, 1005, 1092, 33, 1192, 1193, 1344, 34, - 1334, 1546, 1515, 1555, 1531, 1497, 113, 1032, 1502, 113, - 1033, 36, 1034, 37, 331, 1028, 915, 38, 1402, 1588, - 1343, 1424, 529, 194, 194, 39, 40, 1580, 1526, 41, - 331, 465, 324, 194, 331, 1521, 1271, 1519, 547, 1446, - 807, 194, 194, 1579, 194, 1272, 1052, 1050, 936, 979, - 1389, 856, 565, 1001, 466, 612, 911, 1128, 568, 299, - 1389, 933, 667, 671, 1389, 669, 194, 467, 673, 194, - 675, 468, 469, 676, 824, 973, 1257, 470, 1389, 471, - 472, 473, 474, 1348, 420, 1177, 1121, 475, 1170, 1184, - 1110, 476, 1140, 38, 1176, 1241, 1069, 1178, 800, 691, - 1389, 692, 1246, 477, 1346, 1003, 478, 1002, 479, 331, - 331, 0, 0, 368, 0, 0, 880, 0, 0, 0, - 0, 0, 0, 0, 0, 843, 912, 912, 0, 0, - 0, 0, 480, 0, 912, 912, 912, 912, 912, 0, - 912, 912, 0, 912, 912, 912, 912, 912, 912, 912, - 912, 0, 0, 0, 0, 912, 0, 912, 912, 912, - 912, 912, 912, 0, 0, 912, 0, 0, 0, 912, - 912, 0, 912, 912, 912, 0, 0, 331, 0, 0, - 0, 0, 0, 0, 912, 0, 912, 0, 912, 912, - 0, 0, 912, 0, 912, 912, 912, 912, 912, 912, - 912, 912, 912, 912, 912, 912, 331, 912, 0, 0, - 912, 912, 0, 0, 912, 912, 0, 0, 0, 347, - 0, 0, 0, 749, 0, 347, 0, 0, 0, 912, - 912, 912, 912, 912, 0, 0, 0, 912, 912, 113, - 0, 912, 0, 0, 0, 0, 912, 912, 912, 912, - 912, 0, 0, 517, 912, 0, 912, 0, 0, 0, - 0, 347, 912, 912, 0, 0, 0, 797, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 912, 912, 912, - 912, 0, 912, 0, 0, 0, 343, 0, 0, 912, - 0, 0, 347, 0, 0, 0, 0, 347, 0, 347, - 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, - 347, 0, 0, 0, 0, 0, 347, 0, 0, 113, - 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, - 0, 347, 347, 0, 0, 347, 347, 347, 347, 347, - 38, 0, 347, 347, 38, 0, 0, 347, 347, 347, - 347, 347, 347, 347, 347, 38, 0, 113, 0, 0, - 38, 113, 0, 0, 38, 113, 347, 38, 0, 347, - 0, 347, 0, 347, 614, 0, 347, 0, 0, 38, - 38, 331, 347, 0, 38, 38, 0, 0, 0, 113, - 38, 0, 38, 38, 38, 38, 0, 0, 0, 0, - 38, 0, 0, 0, 38, 0, 38, 0, 0, 0, - 0, 835, 0, 0, 0, 0, 38, 0, 38, 38, - 0, 38, 0, 0, 0, 38, 0, 113, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, - 0, 0, 0, 0, 113, 38, 0, 0, 0, 0, - 0, 38, 38, 0, 0, 0, 0, 614, 331, 565, - 0, 0, 614, 0, 614, 614, 614, 614, 614, 614, - 614, 614, 614, 614, 614, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 614, 0, 614, 0, - 614, 0, 614, 614, 614, 0, 0, 0, 0, 517, - 0, 0, 614, 614, 517, 517, 0, 614, 614, 0, - 0, 0, 0, 0, 0, 331, 331, 0, 614, 614, - 0, 0, 0, 0, 0, 331, 0, 517, 0, 0, - 0, 614, 0, 331, 331, 0, 331, 347, 0, 0, - 517, 517, 0, 0, 0, 517, 0, 614, 517, 0, - 517, 113, 517, 517, 517, 517, 0, 0, 331, 0, - 517, 331, 0, 0, 517, 0, 0, 0, 517, 0, - 0, 0, 0, 0, 0, 0, 517, 0, 0, 517, - 0, 517, 517, 0, 0, 0, 0, 517, 0, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 0, 0, 0, 0, 0, 517, 517, 0, 0, 0, - 517, 517, 0, 517, 517, 517, 517, 517, 517, 517, - 0, 517, 517, 0, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 0, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, 0, 0, 517, - 0, 517, 0, 517, 0, 0, 517, 835, 835, 0, - 0, 0, 517, 0, 0, 835, 835, 835, 835, 835, - 0, 835, 835, 793, 835, 835, 835, 835, 835, 835, - 835, 0, 0, 0, 0, 0, 835, 0, 835, 835, - 835, 835, 835, 835, 0, 0, 835, 0, 0, 0, - 835, 835, 0, 835, 835, 835, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 835, 0, 835, 0, 835, - 835, 0, 0, 835, 0, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 0, 835, 0, - 0, 835, 835, 0, 0, 835, 835, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 835, 835, 835, 835, 835, 0, 0, 0, 835, 835, - 0, 0, 835, 0, 0, 0, 0, 835, 835, 835, - 835, 835, 0, 347, 0, 835, 0, 835, 347, 347, - 0, 0, 0, 835, 835, 0, 0, 0, 0, 0, + protected static readonly short [] yyTable = { 110, + 18, 541, 190, 544, 470, 156, 112, 804, 452, 491, + 235, 513, 743, 451, 798, 157, 765, 236, 562, 44, + 590, 296, 324, 193, 261, 539, 537, 850, 1094, 425, + 573, 851, 495, 633, 855, 315, 1226, 965, 1260, 525, + 330, 335, 1029, 1148, 382, 342, 390, 684, 254, 846, + 1366, 383, 911, 391, 862, 1149, 307, 946, 568, 947, + 314, 262, 1247, 229, 161, 379, 231, 605, 1373, 316, + 770, 319, 162, 331, 336, 251, 1013, 1289, 351, 14, + 1316, 318, 606, 882, 1130, 191, 1099, 1087, 506, 163, + 1404, 362, 1297, 736, 375, 20, 507, 164, 265, 165, + 1149, 878, 289, 290, 291, 1132, 297, 298, 1427, 51, + 979, 311, 312, 981, 251, 861, 1577, 552, 320, 852, + 322, 51, 326, 1429, 726, 427, 1247, 338, 339, 1435, + 1138, 592, 516, 380, 814, 1587, 368, 318, 516, 1405, + 110, 166, 900, 1588, 95, 533, 156, 112, 235, 508, + 727, 389, 326, 1396, 692, 453, 157, 1, 2, 1013, + 1138, 853, 323, 684, 1013, 684, 1013, 455, 1578, 1013, + 1013, 495, 1013, 1013, 957, 1424, 167, 294, 263, 6, + 1425, 116, 728, 168, 369, 459, 460, 369, 593, 197, + 252, 294, 469, 516, 1013, 1614, 252, 880, 169, 453, + 493, 496, 51, 340, 1589, 161, 1478, 370, 883, 1150, + 370, 885, 1057, 162, 500, 861, 890, 891, 1099, 879, + 684, 371, 470, 170, 116, 95, 491, 790, 116, 252, + 163, 494, 295, 51, 1546, 1477, 796, 499, 164, 253, + 165, 15, 461, 467, 948, 253, 295, 192, 95, 1013, + 501, 524, 252, 261, 1150, 737, 534, 590, 535, 2, + 252, 1570, 561, 261, 569, 820, 565, 1133, 171, 861, + 1428, 570, 605, 1580, 512, 1581, 511, 987, 253, 516, + 518, 376, 166, 567, 590, 1430, 729, 606, 572, 294, + 509, 1436, 958, 320, 548, 1233, 547, 389, 264, 1029, + 583, 253, 557, 455, 559, 292, 95, 1294, 516, 253, + 558, 16, 536, 293, 606, 1615, 881, 167, 1304, 1215, + 575, 576, 116, 560, 168, 3, 4, 5, 6, 580, + 581, 1479, 868, 618, 613, 195, 621, 538, 589, 169, + 496, 496, 466, 1173, 295, 341, 1145, 362, 591, 455, + 1564, 328, 1282, 556, 615, 596, 1542, 406, 1251, 612, + 1047, 810, 198, 504, 170, 773, 775, 1029, 20, 739, + 494, 630, 806, 740, 637, 638, 639, 640, 641, 642, + 643, 644, 645, 646, 647, 1591, 694, 696, 376, 808, + 700, 655, 657, 407, 198, 376, 1104, 376, 247, 376, + 294, 51, 248, 195, 195, 49, 690, 826, 901, 171, + 235, 1406, 751, 432, 1234, 1611, 829, 453, 1055, 695, + 697, 720, 606, 1443, 195, 841, 719, 1295, 721, 362, + 362, 1077, 933, 710, 741, 43, 6, 1305, 1324, 1508, + 252, 705, 1535, 376, 1037, 55, 869, 505, 820, 1061, + 747, 705, 249, 116, 938, 295, 705, 708, 362, 1085, + 705, 763, 362, 771, 362, 362, 362, 362, 744, 1565, + 1283, 730, 362, 408, 409, 705, 1232, 711, 712, 1029, + 1074, 774, 776, 724, 1236, 1029, 116, 936, 807, 253, + 496, 1105, 761, 705, 491, 376, 433, 752, 1221, 1449, + 847, 434, 705, 435, 200, 809, 436, 437, 819, 438, + 439, 764, 828, 1263, 116, 195, 195, 994, 793, 525, + 630, 705, 802, 827, 1137, 233, 1100, 491, 1102, 1163, + 495, 1107, 830, 954, 1056, 294, 95, 1255, 1444, 233, + 362, 762, 813, 377, 362, 233, 347, 362, 831, 362, + 605, 233, 233, 833, 362, 233, 854, 812, 845, 818, + 875, 848, 936, 936, 422, 606, 369, 1158, 368, 1159, + 693, 842, 753, 1309, 294, 589, 423, 453, 455, 294, + 195, 1465, 944, 842, 368, 591, 440, 530, 811, 370, + 616, 531, 1450, 864, 955, 754, 866, 867, 693, 1202, + 617, 201, 589, 454, 378, 812, 195, 1345, 870, 870, + 1496, 1497, 591, 1499, 466, 1016, 369, 876, 195, 1166, + 945, 1168, 953, 1169, 1045, 1518, 195, 1040, 1525, 295, + 1326, 1344, 369, 753, 619, 812, 294, 850, 453, 370, + 606, 812, 432, 1541, 620, 1572, 1573, 887, 812, 889, + 352, 790, 1326, 371, 1345, 370, 754, 467, 897, 195, + 195, 959, 996, 294, 454, 800, 812, 1563, 252, 371, + 904, 466, 1217, 807, 116, 793, 1218, 347, 1344, 807, + 793, 793, 905, 893, 899, 195, 1072, 1076, 195, 347, + 225, 975, 347, 347, 430, 921, 812, 702, 1016, 496, + 1326, 544, 1605, 1016, 455, 1016, 347, 340, 1016, 1016, + 368, 1016, 1016, 340, 467, 1407, 940, 253, 1083, 922, + 800, 195, 195, 1238, 1346, 433, 1049, 1347, 807, 494, + 434, 524, 435, 1016, 233, 436, 437, 765, 438, 439, + 369, 811, 1431, 261, 516, 1348, 923, 431, 1174, 195, + 195, 116, 1141, 920, 233, 565, 1445, 1273, 369, 802, + 1007, 352, 340, 908, 1408, 352, 793, 347, 123, 195, + 123, 1346, 796, 976, 1347, 123, 1349, 1463, 116, 1317, + 433, 370, 703, 195, 732, 434, 369, 435, 1016, 704, + 436, 437, 1348, 438, 439, 371, 969, 1350, 1009, 369, + 1351, 970, 1352, 971, 551, 909, 703, 990, 1118, 352, + 1311, 724, 732, 704, 982, 450, 983, 552, 246, 95, + 984, 732, 370, 1349, 590, 496, 988, 985, 1451, 842, + 1360, 496, 726, 703, 553, 924, 371, 989, 1390, 724, + 704, 1109, 925, 1007, 1350, 1399, 967, 1351, 1007, 1352, + 1007, 690, 454, 1007, 1007, 630, 1007, 1007, 410, 411, + 726, 630, 369, 1000, 726, 802, 720, 590, 1194, 695, + 703, 821, 746, 721, 95, 705, 747, 1184, 95, 690, + 705, 1009, 1040, 1315, 705, 370, 1009, 690, 1009, 1185, + 1019, 1009, 1009, 195, 1009, 1009, 598, 695, 930, 705, + 1269, 1270, 729, 599, 250, 1229, 331, 380, 793, 1370, + 512, 729, 331, 380, 45, 600, 730, 1048, 266, 332, + 195, 1081, 1067, 381, 1084, 114, 705, 1062, 962, 456, + 1086, 1029, 1064, 1007, 728, 1064, 323, 380, 116, 323, + 116, 743, 323, 728, 793, 705, 802, 1262, 598, 1080, + 710, 278, 278, 972, 1417, 599, 1095, 337, 1529, 1118, + 278, 590, 1096, 1417, 419, 1421, 323, 600, 114, 511, + 1097, 1009, 114, 1019, 1421, 511, 340, 496, 1019, 340, + 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, + 793, 116, 793, 1127, 116, 793, 334, 334, 456, 1131, + 418, 457, 1019, 1003, 1019, 819, 1019, 1117, 1019, 1019, + 1019, 819, 470, 819, 781, 1122, 822, 334, 782, 491, + 1582, 412, 413, 839, 822, 730, 823, 839, 195, 839, + 823, 839, 1242, 1362, 823, 414, 415, 456, 420, 802, + 898, 24, 516, 25, 432, 1124, 26, 1125, 225, 1126, + 228, 27, 69, 69, 195, 28, 69, 1602, 899, 347, + 421, 828, 347, 1019, 30, 828, 114, 828, 424, 828, + 288, 32, 288, 492, 791, 1393, 33, 288, 531, 300, + 34, 842, 1393, 793, 544, 793, 1003, 793, 1620, 1621, + 1170, 1003, 36, 1003, 37, 463, 1003, 1003, 38, 1003, + 1003, 819, 225, 819, 230, 819, 39, 40, 334, 334, + 41, 416, 417, 327, 252, 1177, 384, 458, 347, 347, + 961, 347, 347, 62, 962, 941, 195, 433, 496, 942, + 465, 512, 434, 340, 435, 385, 386, 436, 437, 294, + 438, 439, 589, 348, 886, 890, 1203, 802, 886, 890, + 195, 842, 591, 70, 299, 387, 300, 70, 1117, 540, + 176, 1214, 176, 253, 176, 512, 388, 195, 512, 490, + 233, 195, 235, 334, 1245, 1093, 1003, 879, 189, 453, + 189, 1246, 189, 514, 822, 589, 515, 793, 822, 374, + 403, 404, 405, 1241, 328, 591, 1175, 114, 1176, 334, + 235, 545, 1040, 668, 670, 672, 674, 453, 347, 381, + 512, 334, 549, 1050, 347, 1050, 830, 546, 830, 334, + 347, 793, 1170, 657, 347, 657, 550, 116, 195, 164, + 114, 164, 171, 566, 171, 352, 571, 347, 1245, 352, + 579, 347, 352, 610, 352, 1246, 195, 195, 811, 352, + 1269, 1270, 334, 334, 172, 496, 172, 958, 114, 958, + 72, 372, 72, 611, 1325, 1343, 195, 370, 195, 347, + 622, 1246, 721, 165, 793, 165, 1014, 1015, 334, 589, + 128, 334, 128, 352, 374, 630, 1325, 706, 601, 591, + 1321, 1207, 1208, 1246, 793, 294, 512, 294, 1278, 233, + 374, 374, 374, 725, 374, 374, 135, 374, 135, 374, + 1377, 347, 1343, 709, 334, 334, 195, 347, 116, 721, + 301, 748, 301, 347, 370, 463, 347, 347, 1592, 1593, + 540, 540, 940, 940, 1325, 705, 705, 195, 664, 666, + 347, 1246, 334, 334, 745, 195, 659, 661, 750, 772, + 1321, 374, 778, 374, 779, 777, 374, 116, 1398, 676, + 678, 116, 825, 832, 455, 116, 1402, 1403, 834, 780, + 835, 601, 347, 836, 837, 811, 601, 856, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 1442, + 1434, 857, 860, 1437, 116, 863, 861, 873, 865, 874, + 601, 886, 601, 888, 601, 1442, 601, 601, 601, 892, + 902, 1452, 912, 903, 601, 601, 601, 601, 114, 456, + 916, 601, 601, 1473, 913, 1474, 601, 601, 601, 601, + 601, 601, 601, 601, 43, 928, 934, 935, 197, 1509, + 936, 937, 943, 963, 960, 601, 721, 879, 966, 964, + 973, 977, 1004, 978, 116, 116, 1536, 986, 992, 1009, + 1011, 601, 1016, 721, 334, 1024, 1019, 1025, 1028, 1548, + 1550, 1027, 1030, 802, 1033, 1035, 721, 721, 1398, 1041, + 1053, 1054, 1063, 349, 1057, 512, 334, 353, 355, 357, + 359, 361, 363, 365, 367, 114, 1536, 1536, 51, 1071, + 534, 1090, 1558, 721, 721, 1078, 1091, 1128, 1110, 1134, + 1120, 1146, 1164, 334, 1135, 1165, 1144, 372, 1136, 1156, + 1157, 51, 114, 372, 1161, 1167, 1179, 1183, 1187, 1188, + 1186, 1192, 1189, 195, 51, 802, 1191, 1195, 1199, 51, + 1206, 1209, 1210, 1218, 51, 1217, 51, 51, 51, 51, + 1227, 810, 1237, 1536, 51, 1244, 1256, 1272, 51, 372, + 721, 1280, 1275, 1277, 496, 496, 1298, 1281, 1284, 1285, + 51, 1290, 802, 51, 1293, 51, 1300, 1306, 1307, 1314, + 521, 1315, 1356, 1358, 1357, 1607, 1607, 1365, 1361, 1367, + 1374, 1364, 1616, 1616, 630, 630, 1423, 1409, 195, 51, + 372, 51, 51, 1363, 1379, 372, 1426, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, 1439, 1440, + 195, 334, 1447, 1457, 372, 1448, 1459, 1460, 372, 372, + 1466, 372, 372, 372, 1462, 372, 372, 372, 1464, 372, + 372, 1450, 1468, 372, 372, 372, 372, 334, 1430, 1470, + 372, 372, 1471, 1489, 1476, 372, 372, 372, 372, 372, + 372, 372, 372, 1485, 1488, 1482, 1492, 1490, 1519, 1500, + 1501, 1533, 1504, 202, 372, 1514, 1521, 372, 1534, 372, + 195, 195, 114, 1530, 114, 1531, 1540, 1544, 195, 1543, + 372, 1555, 1554, 1557, 349, 1559, 195, 195, 1560, 195, + 1562, 1568, 1575, 1579, 1583, 1420, 1584, 1594, 1595, 1586, + 1578, 1577, 1622, 1600, 1420, 203, 1601, 9, 1420, 334, + 195, 1623, 1624, 195, 1046, 556, 574, 925, 509, 926, + 1038, 626, 1420, 659, 510, 114, 349, 466, 114, 940, + 660, 33, 740, 334, 508, 467, 33, 536, 323, 34, + 216, 927, 103, 1420, 34, 933, 832, 824, 833, 856, + 334, 705, 857, 891, 334, 204, 205, 206, 207, 892, + 208, 209, 210, 211, 212, 213, 214, 215, 728, 893, + 216, 217, 218, 219, 220, 221, 222, 223, 327, 895, + 728, 753, 649, 651, 653, 354, 705, 574, 574, 574, + 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, + 574, 574, 574, 347, 626, 131, 232, 113, 297, 626, + 138, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 626, 626, 132, 114, 298, 139, 521, 54, 21, 334, + 334, 521, 521, 626, 1111, 626, 1212, 626, 1023, 626, + 626, 626, 1213, 1401, 1368, 1261, 811, 1576, 1545, 347, + 626, 347, 811, 1585, 521, 626, 1532, 1527, 1561, 811, + 931, 1050, 1432, 1618, 1375, 626, 626, 521, 521, 1051, + 347, 347, 521, 1052, 1454, 521, 1372, 521, 626, 521, + 521, 521, 521, 1046, 1551, 1556, 1610, 521, 1549, 1301, + 347, 521, 1609, 1475, 626, 521, 1020, 1302, 347, 334, + 822, 347, 1068, 521, 952, 1070, 521, 811, 521, 521, + 997, 1147, 624, 574, 521, 38, 521, 521, 521, 521, + 521, 521, 521, 521, 521, 521, 521, 927, 334, 872, + 302, 949, 521, 521, 577, 680, 684, 521, 521, 682, + 521, 521, 521, 521, 521, 521, 521, 686, 521, 521, + 688, 521, 521, 521, 521, 521, 521, 521, 521, 521, + 521, 114, 521, 521, 521, 521, 521, 521, 521, 521, + 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, + 521, 521, 521, 521, 689, 1225, 521, 839, 521, 859, + 521, 1380, 1287, 521, 426, 1310, 991, 927, 927, 521, + 1140, 1197, 1190, 1160, 1204, 927, 927, 927, 927, 927, + 1129, 927, 927, 1198, 927, 927, 927, 927, 927, 927, + 927, 927, 1196, 1267, 815, 1235, 927, 1088, 927, 927, + 927, 927, 927, 927, 704, 705, 927, 896, 1378, 1274, + 927, 927, 349, 927, 927, 927, 0, 1018, 0, 0, + 0, 850, 114, 1021, 0, 927, 0, 927, 0, 927, + 927, 0, 0, 927, 0, 927, 927, 927, 927, 927, + 927, 927, 927, 927, 927, 927, 927, 0, 927, 0, + 0, 927, 927, 0, 0, 927, 927, 0, 0, 0, + 0, 114, 0, 0, 0, 114, 0, 0, 0, 114, + 927, 927, 927, 927, 927, 0, 0, 0, 927, 927, + 0, 0, 927, 0, 392, 0, 334, 927, 927, 927, + 927, 927, 0, 0, 0, 927, 0, 927, 114, 0, + 0, 0, 0, 927, 927, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 0, 0, 0, 0, 517, + 0, 0, 425, 0, 425, 517, 0, 0, 927, 927, + 927, 927, 349, 927, 0, 0, 0, 0, 0, 0, + 927, 0, 38, 425, 425, 0, 38, 347, 0, 0, + 0, 334, 0, 0, 0, 0, 0, 38, 114, 114, + 0, 0, 38, 425, 0, 0, 38, 0, 0, 38, + 0, 425, 0, 334, 425, 0, 0, 0, 0, 0, + 517, 38, 38, 0, 0, 0, 38, 38, 0, 0, + 0, 0, 38, 0, 38, 38, 38, 38, 0, 0, + 0, 0, 38, 0, 0, 0, 38, 0, 38, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, + 38, 38, 0, 38, 0, 0, 0, 38, 0, 0, + 0, 0, 0, 334, 334, 0, 0, 0, 0, 0, + 0, 334, 0, 0, 0, 0, 0, 38, 0, 334, + 334, 0, 334, 38, 38, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 334, 0, 0, 334, 850, 850, 0, + 0, 0, 0, 0, 0, 850, 850, 850, 850, 850, + 0, 850, 850, 808, 850, 850, 850, 850, 850, 850, + 850, 0, 0, 0, 0, 0, 850, 574, 850, 850, + 850, 850, 850, 850, 0, 0, 850, 0, 0, 0, + 850, 850, 0, 850, 850, 850, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 850, 0, 850, 0, 850, + 850, 0, 0, 850, 0, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 0, 850, 0, + 0, 850, 850, 0, 0, 850, 850, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 850, 850, 850, 850, 850, 0, 0, 0, 850, 850, + 0, 0, 850, 0, 0, 0, 0, 850, 850, 850, + 850, 850, 0, 347, 0, 850, 0, 850, 347, 347, + 0, 0, 0, 850, 850, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, - 0, 347, 0, 0, 0, 0, 0, 0, 835, 835, - 835, 835, 0, 835, 347, 347, 0, 0, 0, 347, - 835, 0, 347, 0, 347, 0, 347, 347, 347, 347, + 0, 347, 0, 0, 0, 0, 0, 0, 850, 850, + 850, 850, 0, 850, 347, 347, 0, 0, 0, 347, + 850, 0, 347, 0, 347, 0, 347, 347, 347, 347, 0, 0, 0, 0, 347, 0, 0, 0, 347, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 347, 0, 347, 347, 0, 0, 0, @@ -11022,25 +11211,25 @@ void case_1035() 347, 0, 0, 0, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 0, 347, 347, 0, 0, 347, 347, 347, 347, 347, 0, 0, 347, 347, 0, 0, - 0, 347, 347, 347, 347, 347, 347, 347, 347, 793, - 0, 0, 0, 377, 793, 793, 0, 0, 0, 0, + 0, 347, 347, 347, 347, 347, 347, 347, 347, 808, + 0, 0, 0, 377, 808, 808, 0, 0, 0, 0, 347, 0, 0, 347, 0, 347, 0, 347, 0, 0, - 347, 0, 0, 0, 0, 0, 347, 793, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 793, 793, 0, 0, 0, 793, 0, 0, 793, 0, - 793, 0, 793, 793, 793, 793, 0, 0, 0, 0, - 793, 0, 0, 0, 793, 0, 0, 0, 793, 0, - 0, 0, 0, 0, 0, 0, 793, 0, 0, 793, - 0, 793, 793, 0, 0, 0, 0, 793, 0, 793, - 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, - 0, 0, 0, 0, 0, 793, 793, 372, 0, 0, - 793, 793, 793, 793, 793, 793, 0, 793, 793, 793, - 0, 793, 793, 0, 0, 793, 793, 793, 793, 340, - 0, 0, 793, 793, 340, 340, 0, 793, 793, 793, - 793, 793, 793, 793, 793, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 793, 340, 0, 793, - 0, 793, 0, 793, 0, 0, 793, 0, 0, 0, - 340, 340, 793, 0, 0, 340, 0, 0, 340, 0, + 347, 0, 0, 0, 0, 0, 347, 808, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 808, 808, 0, 0, 0, 808, 0, 0, 808, 0, + 808, 0, 808, 808, 808, 808, 0, 0, 0, 0, + 808, 0, 0, 0, 808, 0, 0, 0, 808, 0, + 0, 0, 0, 0, 0, 0, 808, 0, 0, 808, + 0, 808, 808, 0, 0, 0, 0, 808, 0, 808, + 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, + 0, 0, 0, 0, 0, 808, 808, 347, 0, 0, + 808, 808, 808, 808, 808, 808, 0, 808, 808, 808, + 0, 808, 808, 0, 0, 808, 808, 808, 808, 340, + 0, 0, 808, 808, 340, 340, 0, 808, 808, 808, + 808, 808, 808, 808, 808, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 808, 340, 0, 808, + 0, 808, 0, 808, 0, 0, 808, 0, 0, 0, + 340, 340, 808, 0, 0, 340, 0, 0, 340, 0, 340, 0, 340, 340, 340, 340, 0, 0, 0, 0, 340, 0, 0, 0, 340, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 340, @@ -11059,24 +11248,24 @@ void case_1035() 0, 0, 0, 0, 0, 0, 377, 0, 0, 377, 0, 377, 377, 0, 0, 0, 0, 377, 0, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, - 0, 0, 24, 372, 0, 377, 377, 0, 0, 372, + 0, 0, 24, 347, 0, 377, 377, 0, 0, 347, 377, 377, 0, 377, 377, 377, 0, 377, 377, 377, 0, 377, 377, 0, 0, 377, 377, 377, 377, 0, 0, 0, 377, 377, 0, 0, 0, 377, 377, 377, - 377, 377, 377, 377, 377, 372, 0, 0, 0, 0, + 377, 377, 377, 377, 377, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 377, 0, 377, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, - 0, 372, 0, 372, 372, 372, 372, 372, 372, 372, - 372, 372, 372, 372, 0, 0, 0, 0, 0, 0, - 372, 0, 0, 0, 372, 372, 0, 372, 372, 372, - 0, 372, 372, 372, 0, 372, 372, 0, 0, 372, - 372, 372, 372, 0, 36, 0, 372, 372, 0, 0, - 0, 372, 372, 372, 372, 372, 372, 372, 372, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 372, 0, 0, 372, 0, 372, 0, 0, 0, 0, - 0, 0, 31, 31, 0, 0, 372, 31, 0, 0, + 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, + 0, 347, 0, 347, 347, 347, 347, 347, 347, 347, + 347, 347, 347, 347, 347, 0, 0, 0, 0, 0, + 347, 0, 0, 0, 347, 347, 347, 347, 347, 347, + 347, 347, 347, 347, 0, 347, 347, 0, 0, 347, + 347, 347, 347, 347, 36, 0, 347, 347, 0, 0, + 0, 347, 347, 347, 347, 347, 347, 347, 347, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 347, 0, 0, 347, 0, 347, 0, 347, 0, 0, + 347, 0, 31, 31, 0, 0, 347, 31, 0, 0, 0, 31, 0, 31, 0, 0, 31, 0, 31, 31, 0, 31, 0, 31, 0, 31, 0, 31, 31, 31, 31, 0, 0, 31, 31, 0, 0, 0, 25, 31, @@ -11094,7 +11283,7 @@ void case_1035() 0, 0, 37, 24, 0, 24, 37, 0, 0, 0, 0, 0, 0, 0, 31, 24, 0, 37, 24, 0, 24, 0, 37, 0, 24, 0, 37, 0, 0, 37, - 0, 0, 0, 0, 0, 0, 0, 1010, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1027, 0, 0, 0, 37, 37, 0, 24, 0, 37, 37, 0, 21, 24, 24, 37, 0, 37, 37, 37, 37, 0, 0, 0, 0, 37, 0, 0, 0, 37, 0, 37, 0, @@ -11110,7 +11299,7 @@ void case_1035() 25, 0, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 25, 0, 0, 0, 36, 0, 0, 0, 0, 0, 36, 36, 25, 25, 0, 0, 35, 25, - 25, 0, 35, 0, 1011, 25, 0, 25, 25, 25, + 25, 0, 35, 0, 1028, 25, 0, 25, 25, 25, 25, 0, 0, 35, 0, 25, 0, 0, 35, 25, 0, 25, 35, 0, 0, 35, 0, 0, 0, 0, 0, 25, 0, 0, 25, 0, 25, 35, 35, 0, @@ -11120,7 +11309,7 @@ void case_1035() 0, 0, 0, 0, 35, 0, 0, 35, 0, 35, 51, 51, 0, 35, 0, 51, 51, 0, 0, 0, 0, 51, 0, 51, 51, 51, 51, 0, 0, 0, - 0, 51, 0, 35, 1010, 51, 0, 51, 51, 0, + 0, 51, 0, 35, 1027, 51, 0, 51, 51, 0, 35, 0, 0, 0, 0, 0, 0, 51, 0, 51, 51, 0, 51, 0, 51, 0, 51, 0, 51, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11136,7 +11325,7 @@ void case_1035() 51, 0, 51, 52, 0, 0, 51, 0, 52, 0, 0, 0, 52, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 52, 52, 0, - 0, 1011, 52, 52, 0, 51, 0, 0, 52, 0, + 0, 1028, 52, 52, 0, 51, 0, 0, 52, 0, 52, 52, 52, 52, 0, 0, 51, 0, 52, 0, 0, 51, 52, 0, 52, 51, 0, 0, 51, 0, 0, 0, 0, 0, 52, 0, 0, 52, 0, 52, @@ -11148,103 +11337,103 @@ void case_1035() 0, 0, 0, 0, 52, 0, 52, 52, 52, 52, 0, 0, 0, 0, 52, 0, 51, 0, 52, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 52, 0, 55, 52, 0, 52, 0, 0, 0, 52, - 56, 24, 57, 25, 0, 0, 26, 58, 0, 59, - 60, 27, 61, 62, 63, 28, 0, 0, 0, 52, - 0, 64, 0, 65, 30, 66, 67, 68, 69, 0, - 0, 32, 0, 0, 0, 70, 33, 0, 71, 72, + 52, 0, 56, 52, 0, 52, 0, 0, 0, 52, + 57, 24, 58, 25, 0, 0, 26, 59, 0, 60, + 61, 27, 62, 63, 64, 28, 0, 0, 0, 52, + 0, 65, 0, 66, 30, 67, 68, 69, 70, 0, + 0, 32, 0, 0, 0, 71, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 73, 0, 36, 0, 37, 74, 0, 0, 38, 0, - 75, 76, 77, 78, 79, 80, 39, 40, 81, 82, - 41, 83, 0, 84, 0, 0, 85, 86, 0, 796, - 87, 88, 0, 0, 0, 796, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 89, 90, 91, 92, 93, - 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, - 0, 0, 96, 97, 98, 99, 100, 0, 0, 0, - 101, 796, 102, 0, 0, 0, 0, 0, 103, 104, + 74, 0, 36, 0, 37, 75, 0, 0, 38, 0, + 76, 77, 78, 79, 80, 81, 39, 40, 82, 83, + 41, 84, 0, 85, 0, 0, 86, 87, 0, 811, + 88, 89, 0, 0, 0, 811, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 90, 91, 92, 93, 94, + 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, + 0, 0, 97, 98, 99, 100, 101, 0, 0, 0, + 102, 811, 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, - 0, 347, 0, 105, 106, 107, 108, 0, 0, 0, - 0, 0, 796, 0, 0, 196, 0, 796, 0, 796, - 796, 796, 796, 796, 796, 796, 796, 796, 796, 796, - 796, 0, 0, 0, 0, 0, 796, 347, 0, 0, - 0, 796, 796, 796, 796, 796, 796, 796, 796, 796, - 0, 796, 796, 0, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 0, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 796, 347, 0, - 0, 796, 0, 796, 347, 0, 796, 0, 0, 0, - 0, 0, 796, 0, 0, 0, 0, 347, 0, 0, + 0, 347, 0, 106, 107, 108, 109, 0, 0, 0, + 0, 0, 811, 0, 0, 197, 0, 811, 0, 811, + 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, + 811, 0, 0, 0, 0, 0, 811, 347, 0, 0, + 0, 811, 811, 811, 811, 811, 811, 811, 811, 811, + 0, 811, 811, 0, 811, 811, 811, 811, 811, 811, + 811, 811, 811, 811, 0, 811, 811, 811, 811, 811, + 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, + 811, 811, 811, 811, 811, 811, 811, 811, 347, 0, + 0, 811, 0, 811, 347, 0, 811, 0, 0, 0, + 0, 0, 811, 0, 0, 0, 0, 347, 0, 0, 347, 0, 347, 347, 0, 0, 0, 347, 347, 0, 0, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 347, 0, 0, 0, 0, 0, 0, 347, 0, 0, 347, 0, 0, 0, 0, 0, 347, 0, - 201, 347, 0, 0, 0, 0, 347, 0, 347, 347, + 0, 347, 0, 0, 0, 0, 347, 0, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, - 347, 347, 347, 347, 347, 347, 347, 347, 347, 1002, - 347, 347, 202, 347, 347, 347, 347, 347, 347, 347, + 347, 347, 347, 347, 347, 347, 347, 347, 347, 637, + 347, 347, 0, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 0, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, - 347, 347, 347, 347, 347, 347, 0, 519, 0, 0, - 347, 0, 347, 519, 0, 347, 0, 0, 0, 0, - 0, 347, 203, 204, 205, 206, 0, 207, 208, 209, - 210, 211, 212, 213, 214, 0, 0, 215, 216, 217, - 218, 219, 220, 221, 222, 0, 0, 0, 0, 519, - 0, 0, 1002, 0, 0, 0, 0, 1002, 0, 1002, - 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1002, 0, 1002, 0, 1002, 0, 1002, 1002, 1002, - 519, 0, 0, 0, 0, 519, 0, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, 0, 519, - 519, 0, 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 1002, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 0, 515, 642, 0, 0, - 0, 519, 515, 0, 0, 0, 24, 0, 25, 0, - 519, 26, 0, 0, 0, 0, 27, 0, 0, 0, + 347, 347, 347, 347, 347, 347, 0, 523, 0, 0, + 347, 0, 347, 523, 0, 347, 0, 0, 0, 0, + 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, + 0, 0, 637, 0, 0, 0, 0, 637, 0, 637, + 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 637, 0, 637, 0, 637, 0, 637, 637, 637, + 523, 0, 0, 0, 0, 523, 0, 523, 523, 523, + 523, 523, 523, 523, 523, 523, 523, 523, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 523, 523, + 523, 523, 523, 523, 523, 523, 523, 523, 0, 523, + 523, 0, 523, 523, 523, 523, 523, 523, 523, 523, + 523, 523, 637, 523, 523, 523, 523, 523, 523, 523, + 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, + 523, 523, 523, 523, 523, 0, 519, 816, 0, 0, + 0, 523, 519, 0, 0, 0, 24, 0, 25, 0, + 523, 26, 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 515, 0, + 0, 0, 0, 0, 0, 0, 32, 0, 519, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, 0, 0, 38, 0, 0, 0, 403, 0, 0, - 0, 39, 40, 403, 0, 41, 0, 0, 324, 515, - 0, 0, 0, 0, 515, 0, 515, 515, 515, 515, - 515, 515, 515, 515, 515, 515, 515, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 515, 515, 403, - 515, 515, 515, 515, 515, 515, 515, 0, 515, 515, - 0, 515, 515, 515, 515, 515, 515, 515, 515, 515, - 515, 0, 515, 515, 515, 515, 515, 515, 515, 515, - 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, - 515, 515, 515, 515, 0, 523, 0, 0, 0, 368, - 515, 523, 0, 515, 0, 0, 0, 0, 0, 515, + 0, 39, 40, 403, 0, 41, 0, 0, 817, 519, + 0, 0, 0, 0, 519, 0, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 0, 0, 0, + 0, 0, 0, 0, 294, 0, 0, 519, 519, 403, + 519, 519, 519, 519, 519, 519, 519, 0, 519, 519, + 0, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 0, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 0, 527, 0, 0, 0, 328, + 519, 527, 0, 519, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 340, 0, 0, 0, 0, 403, 340, 0, 403, 403, 403, 403, 0, 403, 0, 403, - 403, 0, 403, 403, 403, 403, 403, 523, 403, 403, + 403, 0, 403, 403, 403, 403, 403, 527, 403, 403, 403, 403, 0, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 0, 0, 0, 0, 340, - 0, 403, 0, 0, 403, 0, 0, 0, 523, 0, - 403, 0, 0, 523, 0, 523, 523, 523, 523, 523, - 523, 523, 523, 523, 523, 523, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 523, 0, 523, - 523, 523, 523, 523, 523, 523, 0, 523, 523, 0, - 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, - 0, 523, 523, 523, 523, 523, 523, 523, 523, 523, - 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, - 523, 523, 523, 0, 347, 644, 0, 0, 0, 523, - 347, 0, 523, 0, 24, 0, 25, 0, 523, 26, + 0, 403, 0, 0, 403, 0, 0, 0, 527, 0, + 403, 0, 0, 527, 0, 527, 527, 527, 527, 527, + 527, 527, 527, 527, 527, 527, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 527, 0, 527, + 527, 527, 527, 527, 527, 527, 0, 527, 527, 0, + 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, + 0, 527, 527, 527, 527, 527, 527, 527, 527, 527, + 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, + 527, 527, 527, 0, 347, 595, 0, 0, 0, 527, + 347, 0, 527, 0, 24, 0, 25, 0, 527, 26, 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, 347, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, - 40, 0, 0, 41, 0, 0, 324, 347, 0, 0, + 40, 0, 0, 41, 0, 0, 327, 347, 0, 0, 0, 0, 347, 0, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 347, 347, @@ -11252,1554 +11441,1571 @@ void case_1035() 347, 347, 347, 347, 347, 347, 347, 347, 347, 0, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, - 347, 347, 0, 448, 951, 0, 0, 368, 347, 448, + 347, 347, 0, 449, 654, 0, 0, 374, 347, 449, 0, 347, 0, 24, 0, 25, 0, 347, 26, 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 0, 0, 0, 32, 0, 448, 0, 0, 33, 0, + 0, 0, 0, 32, 0, 449, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, 40, - 0, 0, 41, 0, 0, 324, 448, 0, 0, 0, - 0, 448, 0, 448, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 448, 0, 448, 448, 448, - 448, 448, 448, 448, 0, 448, 448, 0, 448, 448, - 448, 448, 448, 448, 448, 448, 448, 448, 0, 448, - 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, - 448, 0, 347, 0, 0, 0, 368, 448, 347, 1102, - 448, 0, 796, 0, 0, 0, 448, 0, 24, 0, + 0, 0, 41, 0, 0, 327, 449, 0, 0, 0, + 0, 449, 0, 449, 449, 449, 449, 449, 449, 449, + 449, 449, 449, 449, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 449, 0, 449, 449, 449, + 449, 449, 449, 449, 0, 449, 449, 0, 449, 449, + 449, 449, 449, 449, 449, 449, 449, 449, 0, 449, + 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, + 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, + 449, 0, 347, 0, 0, 0, 374, 449, 347, 656, + 449, 0, 811, 0, 0, 0, 449, 0, 24, 0, 25, 0, 0, 26, 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 347, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, - 796, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 811, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, 40, 0, 0, 41, 0, 0, - 324, 0, 0, 0, 0, 557, 0, 0, 0, 0, - 0, 557, 0, 347, 0, 0, 0, 0, 0, 347, + 327, 0, 0, 0, 0, 561, 0, 0, 0, 0, + 0, 561, 0, 347, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 347, 347, 347, 347, 347, 347, - 347, 796, 347, 0, 347, 347, 0, 347, 347, 347, - 347, 347, 347, 347, 347, 347, 347, 557, 347, 347, + 347, 811, 347, 0, 347, 347, 0, 347, 347, 347, + 347, 347, 347, 347, 347, 347, 347, 561, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 0, 0, 0, 0, 347, 0, 347, 0, 0, 347, - 0, 368, 0, 0, 0, 347, 0, 0, 557, 0, - 0, 0, 0, 557, 0, 557, 557, 557, 557, 557, - 557, 557, 557, 557, 557, 557, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 557, 0, 557, - 0, 557, 0, 557, 557, 557, 0, 557, 557, 0, - 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, - 369, 0, 0, 557, 557, 557, 557, 557, 557, 557, - 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, - 557, 579, 557, 369, 0, 0, 0, 579, 0, 0, - 0, 0, 0, 0, 0, 0, 369, 0, 557, 0, - 0, 369, 0, 0, 240, 0, 369, 0, 369, 369, - 369, 369, 0, 0, 0, 0, 369, 0, 0, 0, - 369, 0, 0, 579, 369, 0, 0, 0, 0, 0, - 0, 0, 369, 0, 0, 369, 0, 369, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, - 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, - 0, 369, 0, 0, 579, 0, 0, 369, 0, 579, - 0, 579, 579, 579, 579, 579, 579, 579, 579, 579, - 579, 579, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 586, 0, 579, 0, 579, 0, 579, 0, 579, - 579, 579, 0, 579, 579, 0, 0, 579, 579, 579, - 579, 579, 579, 579, 579, 579, 0, 369, 0, 579, - 579, 579, 579, 579, 579, 579, 579, 0, 0, 0, - 0, 0, 586, 0, 0, 0, 0, 586, 579, 586, - 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, - 0, 0, 0, 587, 579, 0, 0, 0, 0, 587, - 0, 586, 0, 586, 0, 586, 0, 586, 586, 586, - 0, 586, 586, 0, 0, 586, 586, 586, 586, 0, - 0, 0, 586, 586, 0, 0, 0, 586, 586, 586, - 586, 586, 586, 586, 586, 587, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 588, 586, 0, 0, 0, 0, 588, 0, 0, - 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, - 0, 587, 0, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 588, 0, 587, 0, 587, 0, 587, - 0, 587, 587, 587, 0, 587, 587, 0, 0, 587, - 587, 587, 587, 0, 0, 0, 587, 587, 0, 595, - 0, 587, 587, 587, 587, 587, 587, 587, 587, 0, - 0, 0, 0, 0, 588, 0, 0, 0, 0, 588, - 587, 588, 588, 588, 588, 588, 588, 588, 588, 588, - 588, 588, 0, 0, 0, 0, 587, 0, 0, 0, - 0, 0, 0, 588, 0, 588, 0, 588, 0, 588, - 588, 588, 0, 588, 588, 0, 0, 588, 588, 588, - 588, 0, 0, 0, 588, 588, 0, 596, 0, 588, - 588, 588, 588, 588, 588, 588, 588, 0, 0, 0, - 0, 0, 595, 0, 0, 0, 0, 595, 588, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, - 0, 595, 0, 595, 0, 595, 0, 595, 595, 595, - 0, 0, 0, 0, 0, 595, 595, 595, 595, 0, - 0, 0, 595, 595, 0, 597, 0, 595, 595, 595, - 595, 595, 595, 595, 595, 0, 0, 0, 0, 0, - 596, 0, 0, 0, 0, 596, 595, 596, 596, 596, - 596, 596, 596, 596, 596, 596, 596, 596, 0, 0, - 0, 0, 595, 0, 0, 0, 0, 0, 0, 596, - 0, 596, 0, 596, 0, 596, 596, 596, 0, 0, - 0, 0, 0, 596, 596, 596, 596, 0, 0, 0, - 596, 596, 0, 600, 0, 596, 596, 596, 596, 596, - 596, 596, 596, 0, 0, 0, 0, 0, 597, 0, - 0, 0, 0, 597, 596, 597, 597, 597, 597, 597, - 597, 597, 597, 597, 597, 597, 0, 0, 0, 0, - 596, 0, 0, 0, 0, 0, 0, 597, 0, 597, - 0, 597, 0, 597, 597, 597, 0, 0, 0, 0, - 0, 597, 597, 597, 597, 0, 0, 0, 597, 597, - 0, 601, 0, 597, 597, 597, 597, 597, 597, 597, - 597, 0, 0, 0, 0, 0, 600, 0, 0, 0, - 0, 600, 597, 600, 600, 600, 600, 600, 600, 600, - 600, 600, 600, 600, 0, 0, 0, 0, 597, 0, - 0, 0, 0, 0, 0, 600, 0, 600, 0, 600, - 0, 600, 600, 600, 0, 0, 0, 0, 0, 600, - 600, 600, 600, 0, 0, 0, 600, 600, 0, 602, - 0, 0, 0, 600, 600, 600, 600, 600, 600, 0, - 0, 0, 0, 0, 601, 0, 0, 0, 0, 601, - 600, 601, 601, 601, 601, 601, 601, 601, 601, 601, - 601, 601, 0, 0, 0, 0, 600, 0, 0, 0, - 0, 0, 0, 601, 0, 601, 0, 601, 0, 601, - 601, 601, 0, 0, 0, 0, 0, 601, 601, 601, - 601, 0, 0, 0, 601, 601, 0, 603, 0, 0, - 0, 601, 601, 601, 601, 601, 601, 0, 0, 0, - 0, 0, 602, 0, 0, 0, 0, 602, 601, 602, + 0, 374, 0, 0, 0, 347, 0, 0, 561, 0, + 0, 0, 635, 561, 0, 561, 561, 561, 561, 561, + 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 561, 0, 561, + 0, 561, 0, 561, 561, 561, 0, 561, 561, 0, + 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, + 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, + 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, + 561, 583, 561, 0, 0, 0, 0, 583, 0, 0, + 0, 0, 0, 0, 0, 635, 0, 0, 561, 0, + 635, 0, 635, 635, 635, 635, 635, 635, 635, 635, + 635, 635, 635, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 583, 635, 0, 635, 0, 635, 0, + 635, 635, 635, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 635, 0, 0, 590, + 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, + 0, 0, 0, 0, 583, 0, 0, 0, 0, 583, + 0, 583, 583, 583, 583, 583, 583, 583, 583, 583, + 583, 583, 0, 0, 0, 635, 0, 0, 0, 0, + 0, 590, 0, 583, 0, 583, 0, 583, 0, 583, + 583, 583, 0, 583, 583, 0, 0, 583, 583, 583, + 583, 583, 583, 583, 583, 583, 0, 0, 0, 583, + 583, 583, 583, 583, 583, 583, 583, 0, 0, 0, + 0, 0, 590, 0, 0, 0, 0, 590, 583, 590, + 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, + 0, 0, 0, 591, 583, 0, 0, 0, 0, 591, + 0, 590, 0, 590, 0, 590, 0, 590, 590, 590, + 0, 590, 590, 0, 0, 590, 590, 590, 590, 0, + 0, 0, 590, 590, 0, 0, 0, 590, 590, 590, + 590, 590, 590, 590, 590, 591, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 592, 590, 0, 0, 0, 0, 592, 0, 0, + 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, + 0, 591, 0, 591, 591, 591, 591, 591, 591, 591, + 591, 591, 591, 591, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 592, 0, 591, 0, 591, 0, 591, + 0, 591, 591, 591, 0, 591, 591, 0, 0, 591, + 591, 591, 591, 0, 0, 0, 591, 591, 0, 0, + 0, 591, 591, 591, 591, 591, 591, 591, 591, 0, + 0, 0, 0, 0, 592, 0, 0, 0, 0, 592, + 591, 592, 592, 592, 592, 592, 592, 592, 592, 592, + 592, 592, 0, 0, 0, 0, 591, 0, 0, 0, + 0, 0, 0, 592, 0, 592, 0, 592, 0, 592, + 592, 592, 0, 592, 592, 0, 0, 592, 592, 592, + 592, 0, 0, 0, 592, 592, 0, 0, 0, 592, + 592, 592, 592, 592, 592, 592, 592, 0, 519, 0, + 602, 0, 0, 0, 0, 0, 57, 24, 592, 25, + 0, 0, 26, 256, 0, 0, 0, 27, 62, 63, + 0, 28, 0, 0, 592, 0, 0, 65, 0, 0, + 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, + 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, + 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, + 0, 81, 39, 40, 257, 0, 41, 0, 0, 0, + 0, 0, 0, 602, 603, 0, 0, 0, 602, 0, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, - 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, - 0, 602, 0, 602, 0, 602, 0, 602, 602, 602, - 0, 0, 0, 0, 0, 602, 602, 602, 602, 0, - 0, 0, 602, 602, 0, 604, 0, 0, 0, 602, - 602, 602, 602, 602, 602, 0, 0, 0, 0, 0, - 603, 0, 0, 0, 0, 603, 602, 603, 603, 603, - 603, 603, 603, 603, 603, 603, 603, 603, 0, 0, - 0, 0, 602, 0, 0, 0, 0, 0, 0, 603, - 0, 603, 0, 603, 0, 603, 603, 603, 0, 0, - 0, 0, 0, 603, 603, 603, 603, 0, 0, 0, - 603, 603, 0, 609, 0, 0, 0, 603, 603, 603, - 603, 603, 603, 0, 0, 0, 0, 0, 604, 0, - 0, 0, 0, 604, 603, 604, 604, 604, 604, 604, - 604, 604, 604, 604, 604, 604, 0, 0, 0, 0, - 603, 0, 0, 0, 0, 0, 0, 604, 0, 604, - 0, 604, 0, 604, 604, 604, 0, 0, 0, 0, - 0, 604, 604, 604, 604, 0, 0, 0, 604, 604, - 0, 610, 0, 0, 0, 604, 604, 604, 604, 604, - 604, 0, 0, 0, 0, 0, 609, 0, 0, 0, - 0, 609, 604, 609, 609, 609, 609, 609, 609, 609, - 609, 609, 609, 609, 0, 0, 0, 0, 604, 0, - 0, 0, 0, 0, 0, 609, 0, 609, 0, 609, - 0, 609, 609, 609, 0, 0, 0, 0, 0, 0, - 0, 609, 609, 0, 0, 0, 609, 609, 0, 611, - 0, 0, 0, 0, 0, 609, 609, 609, 609, 0, - 0, 0, 0, 0, 610, 0, 0, 0, 0, 610, - 609, 610, 610, 610, 610, 610, 610, 610, 610, 610, - 610, 610, 0, 0, 0, 0, 609, 0, 0, 0, - 0, 0, 0, 610, 0, 610, 0, 610, 0, 610, - 610, 610, 0, 0, 0, 0, 0, 0, 0, 610, - 610, 0, 0, 0, 610, 610, 0, 615, 0, 0, - 0, 0, 0, 610, 610, 610, 610, 0, 0, 0, - 0, 0, 611, 0, 0, 0, 0, 611, 610, 611, - 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, - 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, - 0, 611, 0, 611, 0, 611, 0, 611, 611, 611, - 0, 0, 0, 0, 0, 0, 0, 611, 611, 0, - 0, 0, 611, 611, 0, 617, 0, 0, 0, 0, - 0, 611, 611, 611, 611, 0, 0, 0, 0, 0, - 615, 0, 0, 0, 0, 615, 611, 615, 615, 615, - 615, 615, 615, 615, 615, 615, 615, 615, 0, 0, - 0, 0, 611, 0, 0, 0, 0, 0, 0, 615, - 0, 615, 0, 615, 0, 615, 615, 615, 0, 0, - 0, 0, 0, 0, 0, 615, 615, 0, 0, 0, - 615, 615, 0, 618, 0, 0, 0, 0, 0, 0, - 0, 615, 615, 0, 0, 0, 0, 0, 617, 0, - 0, 0, 0, 617, 615, 617, 617, 617, 617, 617, - 617, 617, 617, 617, 617, 617, 0, 0, 0, 0, - 615, 0, 0, 0, 0, 0, 0, 617, 0, 617, - 0, 617, 0, 617, 617, 617, 0, 0, 0, 0, - 0, 0, 0, 0, 617, 0, 0, 0, 617, 617, - 0, 620, 0, 0, 0, 0, 0, 0, 0, 617, - 617, 0, 0, 0, 0, 0, 618, 0, 0, 0, - 0, 618, 617, 618, 618, 618, 618, 618, 618, 618, - 618, 618, 618, 618, 0, 0, 0, 0, 617, 0, - 0, 0, 0, 0, 0, 618, 0, 618, 0, 618, - 0, 618, 618, 618, 0, 0, 0, 0, 0, 0, - 0, 0, 618, 0, 0, 0, 618, 618, 0, 621, - 0, 0, 0, 0, 0, 0, 0, 618, 618, 0, - 0, 0, 0, 0, 620, 0, 0, 0, 0, 620, - 618, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 0, 0, 0, 0, 618, 0, 0, 0, - 0, 0, 0, 620, 0, 620, 0, 620, 0, 620, - 620, 620, 0, 0, 0, 0, 0, 0, 0, 0, - 620, 0, 0, 0, 0, 620, 0, 623, 0, 0, - 0, 0, 0, 0, 0, 620, 620, 0, 0, 0, - 0, 0, 621, 0, 0, 0, 0, 621, 620, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, - 0, 621, 0, 621, 0, 621, 0, 621, 621, 621, - 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, - 0, 0, 0, 621, 0, 624, 0, 0, 0, 0, - 0, 0, 0, 621, 621, 0, 0, 0, 0, 0, - 623, 0, 0, 0, 0, 623, 621, 623, 623, 623, - 623, 623, 623, 623, 623, 623, 623, 623, 0, 0, - 0, 0, 621, 0, 0, 0, 0, 0, 0, 623, - 0, 623, 0, 623, 0, 623, 623, 623, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 623, 0, 626, 0, 0, 0, 0, 0, 0, - 0, 623, 623, 0, 0, 0, 0, 0, 624, 0, - 0, 0, 0, 624, 623, 624, 624, 624, 624, 624, - 624, 624, 624, 624, 624, 624, 0, 0, 0, 0, - 623, 0, 0, 0, 0, 0, 0, 624, 0, 624, - 0, 624, 0, 624, 624, 624, 0, 0, 0, 627, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, - 624, 0, 0, 0, 0, 0, 626, 0, 0, 0, - 0, 626, 624, 626, 626, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 0, 0, 0, 0, 624, 0, - 0, 0, 0, 0, 0, 626, 0, 626, 0, 626, - 0, 626, 626, 626, 0, 0, 0, 0, 347, 0, - 0, 0, 796, 0, 0, 0, 0, 626, 0, 0, - 0, 0, 627, 0, 0, 0, 0, 627, 626, 627, - 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, - 626, 0, 0, 0, 347, 0, 0, 0, 0, 0, - 0, 627, 0, 627, 0, 627, 626, 627, 627, 627, - 796, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, - 0, 0, 0, 347, 0, 0, 0, 0, 0, 347, - 0, 0, 627, 0, 347, 347, 0, 347, 0, 347, - 0, 796, 347, 0, 347, 347, 0, 347, 347, 347, - 347, 347, 347, 347, 347, 347, 347, 0, 347, 347, - 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, + 602, 90, 91, 92, 258, 520, 0, 0, 0, 0, + 0, 0, 602, 96, 602, 0, 602, 0, 602, 602, + 602, 0, 0, 0, 0, 0, 602, 602, 602, 602, + 0, 0, 0, 602, 602, 0, 0, 0, 602, 602, + 602, 602, 602, 602, 602, 602, 0, 0, 0, 0, + 0, 0, 606, 0, 0, 0, 0, 602, 0, 106, + 521, 0, 0, 0, 0, 0, 0, 603, 0, 0, + 522, 523, 603, 602, 603, 603, 603, 603, 603, 603, + 603, 603, 603, 603, 603, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 603, 0, 603, 0, + 603, 0, 603, 603, 603, 0, 0, 0, 0, 0, + 603, 603, 603, 603, 0, 0, 0, 603, 603, 0, + 607, 0, 603, 603, 603, 603, 603, 603, 603, 603, + 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, + 606, 603, 606, 606, 606, 606, 606, 606, 606, 606, + 606, 606, 606, 0, 0, 0, 0, 603, 0, 0, + 0, 0, 0, 0, 606, 0, 606, 0, 606, 0, + 606, 606, 606, 0, 0, 0, 0, 0, 606, 606, + 606, 606, 0, 0, 0, 606, 606, 0, 608, 0, + 0, 0, 606, 606, 606, 606, 606, 606, 0, 0, + 0, 0, 0, 607, 0, 0, 0, 0, 607, 606, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 0, 0, 0, 0, 606, 0, 0, 0, 0, + 0, 0, 607, 0, 607, 0, 607, 0, 607, 607, + 607, 0, 0, 0, 0, 0, 607, 607, 607, 607, + 0, 0, 0, 607, 607, 0, 609, 0, 0, 0, + 607, 607, 607, 607, 607, 607, 0, 0, 0, 0, + 0, 608, 0, 0, 0, 0, 608, 607, 608, 608, + 608, 608, 608, 608, 608, 608, 608, 608, 608, 0, + 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, + 608, 0, 608, 0, 608, 0, 608, 608, 608, 0, + 0, 0, 0, 0, 608, 608, 608, 608, 0, 0, + 0, 608, 608, 0, 610, 0, 0, 0, 608, 608, + 608, 608, 608, 608, 0, 0, 0, 0, 0, 609, + 0, 0, 0, 0, 609, 608, 609, 609, 609, 609, + 609, 609, 609, 609, 609, 609, 609, 0, 0, 0, + 0, 608, 0, 0, 0, 0, 0, 0, 609, 0, + 609, 0, 609, 0, 609, 609, 609, 0, 0, 0, + 0, 0, 609, 609, 609, 609, 0, 0, 0, 609, + 609, 0, 615, 0, 0, 0, 609, 609, 609, 609, + 609, 609, 0, 0, 0, 0, 0, 610, 0, 0, + 0, 0, 610, 609, 610, 610, 610, 610, 610, 610, + 610, 610, 610, 610, 610, 0, 0, 0, 0, 609, + 0, 0, 0, 0, 0, 0, 610, 0, 610, 0, + 610, 0, 610, 610, 610, 0, 0, 0, 0, 0, + 610, 610, 610, 610, 0, 0, 0, 610, 610, 0, + 616, 0, 0, 0, 610, 610, 610, 610, 610, 610, + 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, + 615, 610, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 0, 0, 0, 0, 610, 0, 0, + 0, 0, 0, 0, 615, 0, 615, 0, 615, 0, + 615, 615, 615, 0, 0, 0, 0, 0, 0, 0, + 615, 615, 0, 0, 0, 615, 615, 0, 617, 0, + 0, 0, 0, 0, 615, 615, 615, 615, 0, 0, + 0, 0, 0, 616, 0, 0, 0, 0, 616, 615, + 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, + 616, 0, 0, 0, 0, 615, 0, 0, 0, 0, + 0, 0, 616, 0, 616, 0, 616, 0, 616, 616, + 616, 0, 0, 0, 0, 0, 0, 0, 616, 616, + 0, 0, 0, 616, 616, 0, 620, 0, 0, 0, + 0, 0, 616, 616, 616, 616, 0, 0, 0, 0, + 0, 617, 0, 0, 0, 0, 617, 616, 617, 617, + 617, 617, 617, 617, 617, 617, 617, 617, 617, 0, + 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, + 617, 0, 617, 0, 617, 0, 617, 617, 617, 0, + 0, 0, 0, 0, 0, 0, 617, 617, 0, 0, + 0, 617, 617, 0, 621, 0, 0, 0, 0, 0, + 617, 617, 617, 617, 0, 0, 0, 0, 0, 620, + 0, 0, 0, 0, 620, 617, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 0, 0, 0, + 0, 617, 0, 0, 0, 0, 0, 0, 620, 0, + 620, 0, 620, 0, 620, 620, 620, 0, 0, 0, + 0, 0, 0, 0, 620, 620, 0, 0, 0, 620, + 620, 0, 623, 0, 0, 0, 0, 0, 0, 0, + 620, 620, 0, 0, 0, 0, 0, 621, 0, 0, + 0, 0, 621, 620, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 0, 0, 0, 0, 620, + 0, 0, 0, 0, 0, 0, 621, 0, 621, 0, + 621, 0, 621, 621, 621, 0, 0, 0, 0, 0, + 0, 0, 621, 621, 0, 0, 0, 621, 621, 0, + 624, 0, 0, 0, 0, 0, 0, 0, 621, 621, + 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, + 623, 621, 623, 623, 623, 623, 623, 623, 623, 623, + 623, 623, 623, 0, 0, 0, 0, 621, 0, 0, + 0, 0, 0, 0, 623, 0, 623, 0, 623, 0, + 623, 623, 623, 0, 0, 0, 0, 0, 0, 0, + 0, 623, 0, 0, 0, 623, 623, 0, 627, 0, + 0, 0, 0, 0, 0, 0, 623, 623, 0, 0, + 0, 0, 0, 624, 0, 0, 0, 0, 624, 623, + 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, + 624, 0, 0, 0, 0, 623, 0, 0, 0, 0, + 0, 0, 624, 0, 624, 0, 624, 0, 624, 624, + 624, 0, 0, 0, 0, 0, 0, 0, 0, 624, + 0, 0, 0, 624, 624, 0, 629, 0, 0, 0, + 0, 0, 0, 0, 624, 624, 0, 0, 0, 0, + 0, 627, 0, 0, 0, 0, 627, 624, 627, 627, + 627, 627, 627, 627, 627, 627, 627, 627, 627, 0, + 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, + 627, 0, 627, 0, 627, 0, 627, 627, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, + 0, 0, 627, 0, 630, 0, 0, 0, 0, 0, + 0, 0, 627, 627, 0, 0, 0, 0, 0, 629, + 0, 0, 0, 0, 629, 627, 629, 629, 629, 629, + 629, 629, 629, 629, 629, 629, 629, 0, 0, 0, + 0, 627, 0, 0, 0, 0, 0, 0, 629, 0, + 629, 0, 629, 0, 629, 629, 629, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 629, 0, 632, 0, 0, 0, 0, 0, 0, 0, + 629, 629, 0, 0, 0, 0, 0, 630, 0, 0, + 0, 0, 630, 629, 630, 630, 630, 630, 630, 630, + 630, 630, 630, 630, 630, 0, 0, 0, 0, 629, + 0, 0, 0, 0, 0, 0, 630, 0, 630, 0, + 630, 0, 630, 630, 630, 0, 0, 0, 633, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 630, 630, + 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, + 632, 630, 632, 632, 632, 632, 632, 632, 632, 632, + 632, 632, 632, 0, 0, 0, 0, 630, 0, 0, + 0, 0, 0, 0, 632, 0, 632, 0, 632, 0, + 632, 632, 632, 0, 0, 0, 0, 347, 0, 0, + 0, 811, 0, 0, 0, 0, 632, 0, 0, 0, + 0, 633, 0, 0, 0, 0, 633, 632, 633, 633, + 633, 633, 633, 633, 633, 633, 633, 633, 633, 632, + 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, + 633, 0, 633, 0, 633, 632, 633, 633, 633, 811, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, + 0, 0, 347, 0, 0, 0, 0, 0, 347, 0, + 0, 633, 0, 347, 347, 0, 347, 0, 347, 0, + 811, 347, 0, 347, 347, 0, 347, 347, 347, 347, + 347, 347, 347, 347, 347, 347, 0, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, - 0, 0, 572, 0, 347, 0, 347, 0, 0, 347, - 56, 24, 57, 25, 1130, 347, 26, 58, 0, 59, - 60, 27, 61, 62, 63, 28, 0, 0, 0, 0, - 0, 64, 0, 65, 30, 66, 67, 68, 69, 0, - 0, 32, 0, 0, 0, 70, 33, 0, 71, 72, - 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 73, 0, 36, 0, 37, 74, 0, 0, 38, 0, - 75, 76, 77, 78, 79, 80, 39, 40, 81, 82, - 41, 83, 0, 84, 0, 0, 85, 86, 0, 0, - 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 89, 90, 91, 92, 93, - 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, - 0, 0, 96, 97, 98, 99, 100, 0, 0, 0, - 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 55, 0, 105, 573, 107, 108, 0, 1131, 56, - 24, 57, 25, 0, 0, 26, 58, 0, 59, 60, - 27, 61, 62, 63, 28, 0, 0, 0, 0, 0, - 64, 0, 65, 30, 66, 67, 68, 69, 0, 0, - 32, 0, 0, 0, 70, 33, 0, 71, 72, 34, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, - 0, 36, 0, 37, 74, 0, 0, 38, 0, 75, - 76, 77, 78, 79, 80, 39, 40, 81, 82, 41, - 83, 0, 84, 0, 0, 85, 86, 0, 0, 87, - 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 89, 90, 91, 92, 93, 0, - 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, - 0, 96, 97, 98, 99, 100, 0, 0, 0, 101, - 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, - 0, 0, 105, 106, 107, 108, 56, 24, 57, 25, - 0, 0, 26, 58, 0, 59, 60, 27, 61, 62, - 63, 28, 0, 0, 0, 0, 0, 64, 0, 65, - 30, 66, 67, 68, 69, 0, 0, 32, 0, 0, - 0, 70, 33, 0, 71, 72, 34, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 73, 0, 36, 0, - 37, 74, 0, 0, 38, 0, 75, 76, 77, 78, - 79, 80, 39, 40, 81, 82, 41, 83, 0, 84, - 0, 0, 85, 86, 0, 0, 87, 88, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 89, 90, 91, 92, 93, 0, 0, 0, 94, - 0, 0, 0, 95, 0, 0, 0, 0, 96, 97, - 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, - 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 572, 0, 0, 0, 105, - 106, 107, 108, 56, 24, 57, 25, 0, 0, 26, - 58, 0, 59, 60, 27, 61, 62, 63, 28, 0, - 0, 0, 0, 0, 64, 0, 65, 30, 66, 67, - 68, 69, 0, 0, 32, 0, 0, 0, 70, 33, - 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 73, 0, 36, 0, 37, 74, 0, - 0, 38, 0, 75, 76, 77, 78, 79, 80, 39, - 40, 81, 82, 41, 83, 0, 84, 0, 0, 85, - 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, - 91, 92, 93, 0, 0, 0, 94, 0, 0, 0, - 95, 0, 0, 0, 0, 96, 97, 98, 99, 100, - 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, - 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1007, 0, 0, 0, 105, 573, 107, 108, - 1007, 1007, 1007, 1007, 0, 0, 1007, 1007, 0, 1007, - 1007, 1007, 1007, 1007, 1007, 1007, 0, 0, 0, 0, - 0, 1007, 0, 1007, 1007, 1007, 1007, 1007, 1007, 0, - 0, 1007, 0, 0, 0, 1007, 1007, 0, 1007, 1007, - 1007, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1007, 0, 1007, 0, 1007, 1007, 0, 0, 1007, 0, - 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, - 1007, 1007, 0, 1007, 0, 0, 1007, 1007, 0, 0, - 1007, 1007, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1007, 1007, 1007, 1007, 1007, - 0, 0, 0, 1007, 0, 0, 0, 1007, 0, 0, - 0, 0, 1007, 1007, 1007, 1007, 1007, 0, 0, 0, - 1007, 0, 1007, 0, 0, 0, 0, 0, 1007, 1007, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, - 0, 0, 0, 1007, 1007, 1007, 1007, 56, 24, 0, - 25, 0, 0, 26, 254, 0, 0, 0, 27, 61, - 62, 0, 28, 0, 0, 182, 0, 182, 64, 0, - 182, 30, 0, 0, 0, 182, 0, 0, 32, 182, - 0, 0, 0, 33, 0, 71, 72, 34, 182, 614, - 0, 0, 0, 0, 0, 182, 615, 0, 0, 36, - 182, 37, 74, 0, 182, 38, 0, 0, 76, 0, - 78, 0, 80, 39, 40, 255, 182, 41, 182, 0, - 0, 0, 182, 0, 616, 0, 0, 87, 88, 0, - 182, 182, 0, 0, 182, 0, 0, 182, 0, 0, - 0, 0, 89, 90, 91, 92, 93, 0, 0, 0, - 0, 0, 0, 0, 95, 0, 0, 617, 0, 0, - 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, - 0, 0, 1031, 0, 0, 103, 104, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 786, 0, 0, 0, - 105, 106, 107, 108, 56, 24, 0, 25, 0, 0, - 26, 254, 0, 0, 0, 27, 61, 62, 182, 28, - 0, 0, 182, 0, 182, 64, 0, 182, 30, 0, - 0, 0, 182, 0, 0, 32, 182, 0, 0, 0, - 33, 0, 71, 72, 34, 182, 0, 0, 0, 0, - 0, 0, 182, 0, 0, 0, 36, 182, 37, 74, - 0, 182, 38, 0, 0, 76, 0, 78, 0, 80, - 39, 40, 255, 182, 41, 182, 0, 0, 0, 182, - 0, 86, 0, 0, 87, 88, 0, 182, 182, 0, - 0, 182, 0, 0, 182, 0, 0, 0, 0, 89, - 90, 91, 92, 302, 0, 0, 0, 531, 787, 0, - 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, - 100, 0, 0, 0, 101, 0, 102, 1031, 0, 0, - 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 977, 0, 0, 0, 105, 303, 107, - 108, 56, 24, 0, 25, 0, 0, 26, 254, 0, - 0, 0, 27, 61, 62, 182, 28, 0, 0, 24, - 0, 25, 64, 0, 26, 30, 0, 0, 0, 27, - 0, 0, 32, 28, 0, 0, 0, 33, 0, 71, - 72, 34, 30, 614, 0, 0, 0, 0, 0, 32, - 615, 0, 0, 36, 33, 37, 74, 0, 34, 38, - 0, 0, 76, 0, 78, 0, 80, 39, 40, 255, - 36, 41, 37, 0, 0, 0, 38, 0, 616, 0, - 0, 87, 88, 0, 39, 40, 0, 0, 41, 0, - 0, 324, 0, 0, 0, 0, 89, 90, 91, 92, - 93, 0, 0, 0, 0, 0, 0, 0, 95, 0, - 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, - 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, - 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 786, 0, 0, 0, 105, 106, 107, 108, 56, 24, - 0, 25, 0, 0, 26, 254, 0, 0, 0, 27, - 61, 62, 368, 28, 0, 0, 24, 0, 25, 64, - 0, 26, 30, 0, 0, 0, 27, 0, 0, 32, - 28, 0, 0, 0, 33, 0, 71, 72, 34, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 36, 33, 37, 74, 983, 34, 38, 0, 0, 76, - 0, 78, 0, 80, 39, 40, 255, 36, 41, 37, - 0, 0, 0, 38, 0, 86, 0, 0, 87, 88, - 0, 39, 40, 0, 0, 41, 0, 0, 533, 0, - 0, 0, 0, 89, 90, 91, 92, 302, 0, 0, - 0, 531, 0, 0, 0, 95, 0, 0, 0, 0, - 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, - 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, - 0, 0, 0, 0, 56, 24, 0, 25, 0, 0, - 26, 254, 0, 0, 0, 27, 61, 62, 0, 28, - 0, 105, 303, 107, 108, 64, 0, 0, 30, 0, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 368, - 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 74, - 0, 0, 38, 0, 0, 76, 0, 78, 0, 80, - 39, 40, 255, 0, 41, 0, 0, 0, 0, 0, - 0, 86, 0, 0, 87, 88, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, - 90, 91, 92, 769, 0, 0, 0, 770, 1051, 0, - 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, - 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, - 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, - 56, 24, 0, 25, 0, 0, 26, 254, 0, 0, - 0, 27, 61, 62, 0, 28, 0, 105, 771, 107, - 108, 64, 0, 0, 30, 0, 0, 0, 772, 0, - 0, 32, 0, 0, 0, 0, 33, 0, 71, 72, - 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36, 0, 37, 74, 0, 0, 38, 0, - 0, 76, 0, 78, 0, 80, 39, 40, 255, 0, - 41, 0, 0, 0, 0, 0, 0, 86, 0, 0, - 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 89, 90, 91, 92, 769, - 0, 0, 0, 770, 0, 0, 0, 95, 0, 0, - 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, - 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 786, 0, 105, 771, 107, 108, 0, 0, 56, - 24, 0, 25, 0, 772, 26, 254, 0, 0, 0, - 27, 61, 62, 0, 28, 0, 0, 24, 0, 25, - 64, 0, 26, 30, 0, 0, 0, 27, 0, 0, - 32, 28, 0, 0, 0, 33, 0, 71, 72, 34, - 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, - 0, 36, 33, 37, 74, 0, 34, 38, 0, 0, - 76, 0, 78, 0, 80, 39, 40, 255, 36, 41, - 37, 0, 0, 0, 38, 0, 86, 0, 0, 87, - 88, 0, 39, 40, 0, 0, 41, 0, 0, 589, - 0, 0, 0, 0, 89, 90, 91, 92, 302, 0, - 0, 0, 531, 0, 0, 0, 95, 0, 0, 0, - 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, - 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 778, 0, - 0, 0, 105, 303, 107, 108, 56, 24, 0, 25, - 0, 0, 26, 254, 0, 0, 0, 27, 61, 62, - 368, 28, 0, 0, 24, 0, 25, 64, 0, 26, + 347, 347, 347, 347, 347, 347, 347, 347, 347, 0, + 0, 584, 0, 347, 0, 347, 0, 0, 347, 57, + 24, 58, 25, 1149, 347, 26, 59, 0, 60, 61, + 27, 62, 63, 64, 28, 0, 0, 0, 0, 0, + 65, 0, 66, 30, 67, 68, 69, 70, 0, 0, + 32, 0, 0, 0, 71, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 76, + 77, 78, 79, 80, 81, 39, 40, 82, 83, 41, + 84, 0, 85, 0, 0, 86, 87, 0, 0, 88, + 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 93, 94, 0, + 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, + 0, 97, 98, 99, 100, 101, 0, 0, 0, 102, + 0, 103, 0, 0, 0, 0, 0, 104, 105, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 56, 0, 106, 585, 108, 109, 0, 1150, 57, 24, + 58, 25, 0, 0, 26, 59, 0, 60, 61, 27, + 62, 63, 64, 28, 0, 0, 0, 0, 0, 65, + 0, 66, 30, 67, 68, 69, 70, 0, 0, 32, + 0, 0, 0, 71, 33, 0, 72, 73, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, + 36, 0, 37, 75, 0, 0, 38, 0, 76, 77, + 78, 79, 80, 81, 39, 40, 82, 83, 41, 84, + 0, 85, 0, 0, 86, 87, 0, 0, 88, 89, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 91, 92, 93, 94, 0, 0, + 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, + 97, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 0, 106, 107, 108, 109, 57, 24, 58, 25, 0, + 0, 26, 59, 0, 60, 61, 27, 62, 63, 64, + 28, 0, 0, 0, 0, 0, 65, 0, 66, 30, + 67, 68, 69, 70, 0, 0, 32, 0, 0, 0, + 71, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 74, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 76, 77, 78, 79, 80, + 81, 39, 40, 82, 83, 41, 84, 0, 85, 0, + 0, 86, 87, 0, 0, 88, 89, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90, 91, 92, 93, 94, 0, 0, 0, 95, 0, + 0, 0, 96, 0, 0, 0, 0, 97, 98, 99, + 100, 101, 0, 0, 0, 102, 0, 103, 0, 0, + 0, 0, 0, 104, 105, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 584, 0, 0, 0, 106, 107, + 108, 109, 57, 24, 58, 25, 0, 0, 26, 59, + 0, 60, 61, 27, 62, 63, 64, 28, 0, 0, + 0, 0, 0, 65, 0, 66, 30, 67, 68, 69, + 70, 0, 0, 32, 0, 0, 0, 71, 33, 0, + 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 74, 0, 36, 0, 37, 75, 0, 0, + 38, 0, 76, 77, 78, 79, 80, 81, 39, 40, + 82, 83, 41, 84, 0, 85, 0, 0, 86, 87, + 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, + 93, 94, 0, 0, 0, 95, 0, 0, 0, 96, + 0, 0, 0, 0, 97, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, + 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1024, 0, 0, 0, 106, 585, 108, 109, 1024, + 1024, 1024, 1024, 0, 0, 1024, 1024, 0, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0, + 1024, 0, 1024, 1024, 1024, 1024, 1024, 1024, 0, 0, + 1024, 0, 0, 0, 1024, 1024, 0, 1024, 1024, 1024, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1024, + 0, 1024, 0, 1024, 1024, 0, 0, 1024, 0, 1024, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, + 1024, 0, 1024, 0, 0, 1024, 1024, 0, 0, 1024, + 1024, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1024, 1024, 1024, 1024, 1024, 0, + 0, 0, 1024, 0, 0, 0, 1024, 0, 0, 0, + 0, 1024, 1024, 1024, 1024, 1024, 0, 0, 0, 1024, + 0, 1024, 0, 0, 0, 0, 0, 1024, 1024, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, + 0, 0, 1024, 1024, 1024, 1024, 57, 24, 0, 25, + 0, 0, 26, 256, 0, 968, 0, 27, 62, 63, + 0, 28, 0, 0, 24, 0, 25, 65, 0, 26, 30, 0, 0, 0, 27, 0, 0, 32, 28, 0, - 0, 0, 33, 0, 71, 72, 34, 30, 0, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 36, 33, - 37, 74, 0, 34, 38, 0, 0, 76, 0, 78, - 0, 80, 39, 40, 255, 36, 41, 37, 0, 0, - 0, 38, 0, 86, 0, 0, 87, 88, 0, 39, - 40, 0, 0, 41, 0, 0, 802, 0, 0, 0, - 0, 89, 90, 91, 92, 302, 0, 0, 0, 0, - 935, 0, 0, 95, 0, 0, 0, 0, 0, 97, - 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, - 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 980, 0, 0, 0, 105, - 303, 107, 108, 56, 24, 0, 25, 0, 0, 26, - 254, 0, 0, 0, 27, 61, 62, 368, 28, 0, - 0, 502, 0, 502, 64, 0, 502, 30, 0, 0, - 0, 502, 0, 0, 32, 502, 0, 0, 0, 33, - 0, 71, 72, 34, 502, 0, 0, 0, 0, 0, - 0, 502, 0, 0, 0, 36, 502, 37, 74, 0, - 502, 38, 0, 0, 76, 0, 78, 0, 80, 39, - 40, 255, 502, 41, 502, 0, 0, 0, 502, 0, - 86, 0, 0, 87, 88, 0, 502, 502, 0, 0, - 502, 0, 0, 502, 0, 0, 0, 0, 89, 90, - 91, 92, 302, 0, 0, 0, 0, 981, 0, 0, - 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, - 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, - 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 301, 0, 0, 0, 105, 303, 107, 108, - 56, 24, 0, 25, 0, 0, 26, 254, 0, 0, - 0, 27, 61, 62, 502, 28, 0, 0, 183, 0, - 183, 64, 0, 183, 30, 0, 0, 0, 183, 0, - 0, 32, 183, 0, 0, 0, 33, 0, 71, 72, - 34, 183, 0, 0, 0, 0, 0, 0, 183, 0, - 0, 0, 36, 183, 37, 74, 0, 183, 38, 0, - 0, 76, 0, 78, 0, 80, 39, 40, 255, 183, - 41, 183, 0, 0, 0, 183, 0, 86, 0, 0, - 87, 88, 0, 183, 183, 0, 0, 183, 0, 0, - 183, 0, 0, 0, 0, 89, 90, 91, 92, 302, - 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, - 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, - 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 105, 303, 107, 108, 56, 24, 0, - 25, 0, 0, 26, 254, 0, 0, 0, 27, 61, - 62, 183, 28, 0, 0, 182, 0, 182, 64, 0, + 0, 0, 33, 0, 72, 73, 34, 30, 626, 0, + 0, 0, 0, 0, 32, 627, 0, 0, 36, 33, + 37, 75, 0, 34, 38, 0, 0, 77, 0, 79, + 0, 81, 39, 40, 257, 36, 41, 37, 0, 0, + 0, 38, 0, 628, 0, 0, 88, 89, 0, 39, + 40, 0, 0, 41, 0, 0, 327, 0, 0, 0, + 0, 90, 91, 92, 93, 94, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 629, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 0, + 0, 0, 0, 0, 104, 105, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 800, 0, 0, 0, 106, + 107, 108, 109, 57, 24, 0, 25, 0, 0, 26, + 256, 0, 1121, 0, 27, 62, 63, 374, 28, 0, + 0, 24, 0, 25, 65, 0, 26, 30, 0, 0, + 0, 27, 0, 0, 32, 28, 0, 0, 0, 33, + 0, 72, 73, 34, 30, 0, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 36, 33, 37, 75, 0, + 34, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 257, 36, 41, 37, 0, 0, 0, 38, 0, + 87, 0, 0, 88, 89, 0, 39, 40, 0, 0, + 41, 0, 0, 327, 0, 0, 0, 0, 90, 91, + 92, 93, 305, 0, 0, 0, 540, 801, 0, 0, + 96, 0, 0, 0, 0, 0, 98, 99, 100, 101, + 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, + 0, 104, 105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 995, 0, 0, 0, 106, 306, 108, 109, + 57, 24, 0, 25, 0, 0, 26, 256, 0, 0, + 0, 27, 62, 63, 374, 28, 0, 0, 182, 0, + 182, 65, 0, 182, 30, 0, 0, 0, 182, 0, + 0, 32, 182, 0, 0, 0, 33, 0, 72, 73, + 34, 182, 626, 0, 0, 0, 0, 0, 182, 627, + 0, 0, 36, 182, 37, 75, 0, 182, 38, 0, + 0, 77, 0, 79, 0, 81, 39, 40, 257, 182, + 41, 182, 0, 0, 0, 182, 0, 628, 0, 0, + 88, 89, 0, 182, 182, 0, 0, 182, 0, 0, + 182, 0, 0, 0, 0, 90, 91, 92, 93, 94, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 0, 0, 1049, 0, 0, 104, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 800, + 0, 0, 0, 106, 107, 108, 109, 57, 24, 0, + 25, 0, 0, 26, 256, 0, 0, 0, 27, 62, + 63, 182, 28, 0, 0, 182, 0, 182, 65, 0, 182, 30, 0, 0, 0, 182, 0, 0, 32, 182, - 0, 0, 0, 33, 0, 71, 72, 34, 182, 0, + 0, 0, 0, 33, 0, 72, 73, 34, 182, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 36, - 182, 37, 74, 0, 182, 38, 0, 0, 76, 0, - 78, 0, 80, 39, 40, 255, 182, 41, 182, 0, - 0, 0, 182, 0, 86, 0, 0, 87, 88, 0, + 182, 37, 75, 1001, 182, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 257, 182, 41, 182, 0, + 0, 0, 182, 0, 87, 0, 0, 88, 89, 0, 182, 182, 0, 0, 182, 0, 0, 182, 0, 0, - 0, 0, 89, 90, 91, 92, 302, 0, 0, 0, - 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, - 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, - 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, - 105, 303, 107, 108, 56, 24, 0, 25, 0, 0, - 26, 254, 0, 0, 0, 27, 61, 62, 182, 28, - 0, 0, 192, 0, 192, 64, 0, 192, 30, 0, - 0, 0, 192, 0, 0, 32, 192, 0, 0, 0, - 33, 0, 71, 72, 34, 192, 0, 0, 0, 0, - 0, 0, 192, 0, 0, 0, 36, 192, 37, 74, - 0, 192, 38, 0, 0, 76, 0, 78, 0, 80, - 39, 40, 255, 192, 41, 192, 0, 0, 0, 192, - 0, 86, 0, 0, 87, 88, 0, 192, 192, 0, - 0, 192, 0, 0, 192, 0, 0, 0, 0, 89, - 90, 91, 92, 93, 0, 0, 0, 0, 0, 0, - 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, - 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, - 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 778, 0, 0, 0, 105, 106, 107, - 108, 56, 24, 0, 25, 0, 0, 26, 254, 0, - 0, 0, 27, 61, 62, 192, 28, 0, 0, 0, - 0, 0, 64, 0, 0, 30, 0, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 33, 0, 71, - 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 37, 74, 0, 0, 38, - 0, 0, 76, 0, 78, 0, 80, 39, 40, 255, - 0, 41, 0, 0, 0, 0, 0, 0, 86, 0, - 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, - 302, 0, 0, 0, 0, 0, 0, 0, 95, 0, - 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, - 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, - 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1093, 0, 0, 0, 105, 303, 107, 108, 56, 24, - 0, 25, 0, 0, 26, 254, 0, 0, 0, 27, - 61, 62, 0, 28, 0, 0, 0, 0, 0, 64, + 0, 0, 90, 91, 92, 93, 305, 0, 0, 0, + 540, 0, 0, 0, 96, 0, 0, 0, 0, 0, + 98, 99, 100, 101, 0, 0, 0, 102, 0, 103, + 1049, 0, 0, 0, 0, 104, 105, 0, 0, 0, + 0, 0, 0, 57, 24, 0, 25, 0, 0, 26, + 256, 0, 0, 0, 27, 62, 63, 0, 28, 0, + 106, 306, 108, 109, 65, 0, 0, 30, 0, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 182, 33, + 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, + 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 257, 0, 41, 0, 0, 0, 0, 0, 0, + 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, + 92, 93, 783, 0, 0, 0, 784, 1069, 0, 0, + 96, 0, 0, 0, 0, 0, 98, 99, 100, 101, + 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, + 0, 104, 105, 0, 0, 0, 0, 0, 0, 57, + 24, 0, 25, 0, 0, 26, 256, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 106, 785, 108, 109, + 65, 0, 0, 30, 0, 0, 0, 786, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 257, 0, 41, + 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, + 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 93, 783, 0, + 0, 0, 784, 0, 0, 0, 96, 0, 0, 0, + 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, + 0, 103, 0, 0, 0, 0, 0, 104, 105, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 800, 0, 106, 785, 108, 109, 0, 0, 57, 24, + 0, 25, 0, 786, 26, 256, 0, 0, 0, 27, + 62, 63, 0, 28, 0, 0, 0, 0, 0, 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, - 0, 0, 0, 0, 33, 0, 71, 72, 34, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 36, 0, 37, 74, 0, 0, 38, 0, 0, 76, - 0, 78, 0, 80, 39, 40, 255, 0, 41, 0, - 0, 0, 0, 0, 0, 86, 0, 0, 87, 88, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 89, 90, 91, 92, 93, 0, 0, - 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, - 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, - 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1238, 0, 0, - 0, 105, 1094, 107, 108, 56, 24, 0, 25, 0, - 0, 26, 254, 0, 0, 0, 27, 61, 62, 0, - 28, 0, 0, 0, 0, 0, 64, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 71, 72, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 74, 0, 0, 38, 0, 0, 76, 0, 78, 0, - 80, 39, 40, 255, 0, 41, 0, 0, 0, 0, - 0, 0, 86, 0, 0, 87, 88, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 90, 91, 92, 302, 0, 0, 0, 0, 0, - 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, - 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, - 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 0, 0, 0, 105, 303, - 107, 108, 83, 83, 0, 83, 0, 0, 83, 83, - 0, 0, 0, 83, 83, 83, 0, 83, 0, 0, - 0, 0, 0, 83, 0, 0, 83, 0, 0, 0, - 0, 0, 0, 83, 0, 0, 0, 0, 83, 0, - 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 0, 83, 83, 0, 0, - 83, 0, 0, 83, 0, 83, 0, 83, 83, 83, - 83, 0, 83, 0, 0, 0, 0, 0, 0, 83, - 0, 0, 83, 83, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 83, 83, 83, - 83, 83, 0, 0, 0, 0, 0, 0, 0, 83, - 0, 0, 0, 0, 0, 83, 83, 83, 83, 0, - 0, 0, 83, 0, 83, 0, 0, 0, 0, 0, - 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 340, 0, 0, 0, 83, 83, 83, 83, 56, - 24, 0, 25, 0, 0, 26, 254, 0, 0, 0, - 27, 61, 62, 0, 28, 0, 0, 0, 0, 0, - 64, 0, 0, 30, 0, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 0, 33, 0, 71, 72, 34, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 74, 0, 0, 38, 0, 0, - 76, 0, 78, 0, 80, 39, 40, 255, 0, 41, - 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 89, 90, 91, 256, 342, 0, - 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, - 0, 0, 97, 98, 99, 100, 934, 0, 0, 101, - 0, 102, 340, 0, 0, 0, 0, 103, 104, 0, - 56, 24, 0, 25, 0, 0, 26, 254, 0, 0, - 0, 27, 61, 62, 0, 28, 0, 0, 0, 0, - 0, 64, 105, 257, 30, 108, 0, 0, 0, 0, - 0, 32, 0, 0, 0, 0, 33, 0, 71, 72, + 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, + 0, 79, 0, 81, 39, 40, 257, 0, 41, 0, + 0, 0, 0, 0, 0, 87, 0, 0, 88, 89, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 91, 92, 93, 305, 0, 0, + 0, 540, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, + 0, 106, 306, 108, 109, 344, 0, 57, 24, 0, + 25, 0, 0, 26, 256, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 0, 0, 0, 0, 65, 0, + 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, + 0, 345, 0, 33, 0, 72, 73, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 257, 0, 41, 0, 0, + 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90, 91, 92, 258, 347, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 348, 0, 0, 0, + 98, 99, 100, 101, 950, 0, 0, 102, 0, 103, + 792, 0, 0, 0, 0, 104, 105, 0, 57, 24, + 0, 25, 0, 0, 26, 256, 0, 0, 0, 27, + 62, 63, 0, 28, 0, 0, 0, 0, 0, 65, + 106, 260, 30, 109, 0, 0, 0, 0, 0, 32, + 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, + 0, 79, 0, 81, 39, 40, 257, 0, 41, 0, + 0, 0, 0, 0, 0, 87, 0, 0, 88, 89, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 91, 92, 93, 305, 0, 0, + 0, 0, 951, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 998, 0, 0, + 0, 106, 306, 108, 109, 57, 24, 0, 25, 0, + 0, 26, 256, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 0, 24, 0, 25, 65, 0, 26, 30, + 0, 0, 0, 27, 0, 0, 32, 28, 0, 0, + 0, 33, 0, 72, 73, 34, 30, 0, 0, 0, + 0, 0, 0, 32, 0, 0, 0, 36, 33, 37, + 75, 0, 34, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 257, 36, 41, 37, 0, 0, 0, + 38, 0, 87, 0, 0, 88, 89, 0, 39, 40, + 0, 0, 41, 0, 0, 327, 0, 0, 0, 0, + 90, 91, 92, 93, 305, 0, 0, 0, 0, 999, + 0, 0, 96, 0, 0, 0, 0, 0, 98, 99, + 100, 101, 0, 0, 0, 102, 0, 103, 0, 0, + 0, 0, 0, 104, 105, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 304, 0, 0, 0, 106, 306, + 108, 109, 57, 24, 0, 25, 0, 0, 26, 256, + 0, 0, 0, 27, 62, 63, 374, 28, 0, 0, + 24, 0, 25, 65, 0, 26, 30, 0, 0, 0, + 27, 0, 0, 32, 28, 0, 0, 0, 33, 0, + 72, 73, 34, 30, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 36, 33, 37, 75, 0, 34, + 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, + 257, 36, 41, 37, 0, 0, 0, 38, 0, 87, + 0, 0, 88, 89, 0, 39, 40, 0, 0, 41, + 0, 0, 542, 0, 0, 0, 0, 90, 91, 92, + 93, 305, 0, 0, 0, 0, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, + 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 313, 0, 0, 0, 106, 306, 108, 109, 57, + 24, 0, 25, 0, 0, 26, 256, 0, 0, 0, + 27, 62, 63, 374, 28, 0, 0, 0, 0, 0, + 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 257, 0, 41, + 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, + 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 93, 305, 0, + 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, + 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, + 0, 103, 0, 0, 0, 0, 0, 104, 105, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 343, 0, 106, 306, 108, 109, 344, 0, 57, 24, + 0, 25, 0, 0, 26, 256, 0, 0, 0, 27, + 62, 63, 0, 28, 0, 0, 0, 0, 0, 65, + 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, + 0, 0, 345, 0, 33, 0, 72, 73, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, + 0, 79, 0, 81, 39, 40, 257, 0, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 91, 92, 258, 347, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 348, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 623, 0, 0, 0, 0, 104, 105, 0, 57, + 24, 0, 25, 0, 0, 26, 256, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, + 65, 106, 260, 30, 109, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 257, 0, 41, + 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, + 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 93, 94, 0, + 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, + 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, + 0, 103, 0, 0, 0, 0, 0, 104, 105, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 792, 0, + 0, 0, 106, 107, 108, 109, 57, 24, 0, 25, + 0, 0, 26, 256, 0, 0, 0, 27, 62, 63, + 0, 28, 0, 0, 24, 0, 25, 65, 0, 26, + 30, 0, 0, 0, 27, 0, 0, 32, 28, 0, + 0, 0, 33, 0, 72, 73, 34, 30, 0, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 36, 33, + 37, 75, 0, 34, 38, 0, 0, 77, 0, 79, + 0, 81, 39, 40, 257, 36, 41, 37, 0, 0, + 0, 38, 0, 87, 0, 0, 88, 89, 0, 39, + 40, 0, 0, 41, 0, 0, 601, 0, 0, 0, + 0, 90, 91, 92, 93, 305, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 0, + 0, 0, 0, 0, 104, 105, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1112, 0, 0, 0, 106, + 306, 108, 109, 57, 24, 0, 25, 0, 0, 26, + 256, 0, 0, 0, 27, 62, 63, 374, 28, 0, + 0, 24, 0, 25, 65, 0, 26, 30, 0, 0, + 0, 27, 0, 0, 32, 28, 0, 0, 0, 33, + 0, 72, 73, 34, 30, 0, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 36, 33, 37, 75, 0, + 34, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 257, 36, 41, 37, 0, 0, 0, 38, 0, + 87, 0, 0, 88, 89, 0, 39, 40, 0, 0, + 41, 0, 0, 817, 0, 0, 0, 0, 90, 91, + 92, 93, 94, 0, 0, 0, 0, 0, 0, 0, + 96, 0, 0, 0, 0, 0, 98, 99, 100, 101, + 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, + 0, 104, 105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1264, 0, 0, 0, 106, 1113, 108, 109, + 57, 24, 0, 25, 0, 0, 26, 256, 0, 0, + 0, 27, 62, 63, 374, 28, 0, 0, 503, 0, + 503, 65, 0, 503, 30, 0, 0, 0, 503, 0, + 0, 32, 503, 0, 0, 0, 33, 0, 72, 73, + 34, 503, 0, 0, 0, 0, 0, 0, 503, 0, + 0, 0, 36, 503, 37, 75, 0, 503, 38, 0, + 0, 77, 0, 79, 0, 81, 39, 40, 257, 503, + 41, 503, 0, 0, 0, 503, 0, 87, 0, 0, + 88, 89, 0, 503, 503, 0, 0, 503, 0, 0, + 503, 0, 0, 0, 0, 90, 91, 92, 93, 305, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 0, 0, 0, 0, 0, 104, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, + 0, 0, 0, 106, 306, 108, 109, 83, 83, 0, + 83, 0, 0, 83, 83, 0, 0, 0, 83, 83, + 83, 503, 83, 0, 0, 0, 0, 0, 83, 0, + 0, 83, 0, 0, 0, 0, 0, 0, 83, 0, + 0, 0, 0, 83, 0, 83, 83, 83, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, + 0, 83, 83, 0, 0, 83, 0, 0, 83, 0, + 83, 0, 83, 83, 83, 83, 0, 83, 0, 0, + 0, 0, 0, 0, 83, 0, 0, 83, 83, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83, 83, 83, 83, 83, 0, 0, 0, + 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, + 83, 83, 83, 83, 0, 0, 0, 83, 0, 83, + 0, 0, 0, 0, 0, 83, 83, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, + 83, 83, 83, 83, 344, 0, 57, 24, 0, 25, + 0, 0, 26, 256, 0, 0, 0, 27, 62, 63, + 0, 28, 0, 0, 0, 0, 0, 65, 0, 0, + 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, + 345, 0, 33, 0, 72, 73, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, + 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, + 0, 81, 39, 40, 257, 0, 41, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 90, 91, 92, 258, 347, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 348, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 343, + 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, + 25, 0, 0, 26, 256, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, + 260, 30, 109, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 257, 0, 41, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90, 91, 92, 258, 347, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 348, 0, 0, 0, + 98, 99, 100, 101, 0, 0, 0, 102, 0, 103, + 352, 0, 0, 0, 0, 104, 105, 0, 57, 24, + 0, 25, 0, 0, 26, 256, 0, 0, 0, 27, + 62, 63, 0, 28, 0, 0, 0, 0, 0, 65, + 106, 260, 30, 109, 0, 0, 0, 0, 0, 32, + 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, + 0, 79, 0, 81, 39, 40, 257, 0, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 91, 92, 258, 347, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 354, 0, 0, 0, 0, 104, 105, 0, 57, + 24, 0, 25, 0, 0, 26, 256, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, + 65, 106, 260, 30, 109, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 257, 0, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 258, 347, 0, + 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, + 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, + 0, 103, 356, 0, 0, 0, 0, 104, 105, 0, + 57, 24, 0, 25, 0, 0, 26, 256, 0, 0, + 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, + 0, 65, 106, 260, 30, 109, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36, 0, 37, 74, 0, 0, 38, 0, - 0, 76, 0, 78, 0, 80, 39, 40, 255, 0, - 41, 0, 0, 0, 0, 0, 0, 0, 0, 341, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 89, 90, 91, 256, 342, - 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, - 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, - 101, 0, 102, 346, 0, 0, 0, 0, 103, 104, - 0, 56, 24, 0, 25, 0, 0, 26, 254, 0, - 0, 0, 27, 61, 62, 0, 28, 0, 0, 0, - 0, 0, 64, 105, 257, 30, 108, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 33, 0, 71, - 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 37, 74, 0, 0, 38, - 0, 0, 76, 0, 78, 0, 80, 39, 40, 255, + 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, + 0, 77, 0, 79, 0, 81, 39, 40, 257, 0, + 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 90, 91, 92, 258, 347, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 358, 0, 0, 0, 0, 104, 105, + 0, 57, 24, 0, 25, 0, 0, 26, 256, 0, + 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, + 0, 0, 65, 106, 260, 30, 109, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, + 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 257, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 89, 90, 91, 256, - 342, 0, 0, 0, 0, 0, 0, 0, 95, 0, - 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, - 0, 101, 0, 102, 348, 0, 0, 0, 0, 103, - 104, 0, 56, 24, 0, 25, 0, 0, 26, 254, - 0, 0, 0, 27, 61, 62, 0, 28, 0, 0, - 0, 0, 0, 64, 105, 257, 30, 108, 0, 0, + 0, 0, 0, 0, 0, 0, 90, 91, 92, 258, + 347, 0, 0, 0, 0, 0, 0, 0, 96, 0, + 0, 0, 0, 0, 98, 99, 100, 101, 0, 0, + 0, 102, 0, 103, 360, 0, 0, 0, 0, 104, + 105, 0, 57, 24, 0, 25, 0, 0, 26, 256, + 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, + 0, 0, 0, 65, 106, 260, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, - 71, 72, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 37, 74, 0, 0, - 38, 0, 0, 76, 0, 78, 0, 80, 39, 40, - 255, 0, 41, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, - 256, 342, 0, 0, 0, 0, 0, 0, 0, 95, - 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, - 0, 0, 101, 0, 102, 350, 0, 0, 0, 0, - 103, 104, 0, 56, 24, 0, 25, 0, 0, 26, - 254, 0, 0, 0, 27, 61, 62, 0, 28, 0, - 0, 0, 0, 0, 64, 105, 257, 30, 108, 0, + 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, + 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, + 257, 0, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, + 258, 347, 0, 0, 0, 0, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 362, 0, 0, 0, 0, + 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, + 256, 0, 0, 0, 27, 62, 63, 0, 28, 0, + 0, 0, 0, 0, 65, 106, 260, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, - 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 37, 74, 0, - 0, 38, 0, 0, 76, 0, 78, 0, 80, 39, - 40, 255, 0, 41, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, - 91, 256, 342, 0, 0, 0, 0, 0, 0, 0, - 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, - 0, 0, 0, 101, 0, 102, 352, 0, 0, 0, - 0, 103, 104, 0, 56, 24, 0, 25, 0, 0, - 26, 254, 0, 0, 0, 27, 61, 62, 0, 28, - 0, 0, 0, 0, 0, 64, 105, 257, 30, 108, + 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, + 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 257, 0, 41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, + 92, 258, 347, 0, 0, 0, 0, 0, 0, 0, + 96, 0, 0, 0, 0, 0, 98, 99, 100, 101, + 0, 0, 0, 102, 0, 103, 364, 0, 0, 0, + 0, 104, 105, 0, 57, 24, 0, 25, 0, 0, + 26, 256, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 106, 260, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 74, - 0, 0, 38, 0, 0, 76, 0, 78, 0, 80, - 39, 40, 255, 0, 41, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, - 90, 91, 256, 342, 0, 0, 0, 0, 0, 0, - 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, - 100, 0, 0, 0, 101, 0, 102, 354, 0, 0, - 0, 0, 103, 104, 0, 56, 24, 0, 25, 0, - 0, 26, 254, 0, 0, 0, 27, 61, 62, 0, - 28, 0, 0, 0, 0, 0, 64, 105, 257, 30, - 108, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 71, 72, 34, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 257, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 258, 347, 0, 0, 0, 0, 0, 0, + 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 103, 366, 0, 0, + 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, + 0, 26, 256, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 0, 0, 0, 0, 65, 106, 260, 30, + 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 74, 0, 0, 38, 0, 0, 76, 0, 78, 0, - 80, 39, 40, 255, 0, 41, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 90, 91, 256, 342, 0, 0, 0, 0, 0, - 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, - 99, 100, 0, 0, 0, 101, 0, 102, 356, 0, - 0, 0, 0, 103, 104, 0, 56, 24, 0, 25, - 0, 0, 26, 254, 0, 0, 0, 27, 61, 62, - 0, 28, 0, 0, 0, 0, 0, 64, 105, 257, - 30, 108, 0, 0, 0, 0, 0, 32, 0, 0, - 0, 0, 33, 0, 71, 72, 34, 0, 0, 0, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 257, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90, 91, 92, 258, 347, 0, 0, 0, 0, 0, + 0, 0, 96, 0, 0, 0, 0, 0, 98, 99, + 100, 101, 0, 0, 0, 102, 0, 103, 648, 0, + 0, 0, 0, 104, 105, 0, 57, 24, 0, 25, + 0, 0, 26, 256, 0, 0, 0, 27, 62, 63, + 0, 28, 0, 0, 0, 0, 0, 65, 106, 260, + 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, + 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, - 37, 74, 0, 0, 38, 0, 0, 76, 0, 78, - 0, 80, 39, 40, 255, 0, 41, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 89, 90, 91, 256, 342, 0, 0, 0, 0, - 0, 0, 0, 95, 0, 0, 0, 0, 0, 97, - 98, 99, 100, 0, 0, 0, 101, 0, 102, 358, - 0, 0, 0, 0, 103, 104, 0, 56, 24, 0, - 25, 0, 0, 26, 254, 0, 0, 0, 27, 61, - 62, 0, 28, 0, 0, 0, 0, 0, 64, 105, - 257, 30, 108, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 33, 0, 71, 72, 34, 0, 0, + 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, + 0, 81, 39, 40, 257, 0, 41, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 90, 91, 92, 258, 347, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 650, + 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, + 25, 0, 0, 26, 256, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, + 260, 30, 109, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 37, 74, 0, 0, 38, 0, 0, 76, 0, - 78, 0, 80, 39, 40, 255, 0, 41, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89, 90, 91, 256, 342, 0, 0, 0, - 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, - 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, - 360, 0, 0, 0, 0, 103, 104, 0, 56, 24, - 0, 25, 0, 0, 26, 254, 0, 0, 0, 27, - 61, 62, 0, 28, 0, 0, 0, 0, 0, 64, - 105, 257, 30, 108, 0, 0, 0, 0, 0, 32, - 0, 0, 0, 0, 33, 0, 71, 72, 34, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 36, 0, 37, 74, 0, 0, 38, 0, 0, 76, - 0, 78, 0, 80, 39, 40, 255, 0, 41, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 89, 90, 91, 256, 342, 0, 0, - 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, - 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, - 102, 340, 0, 0, 0, 0, 103, 104, 0, 56, - 24, 0, 25, 0, 0, 26, 254, 0, 0, 0, - 27, 61, 62, 0, 28, 0, 0, 0, 0, 0, - 64, 105, 257, 30, 108, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 0, 33, 0, 71, 72, 34, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 74, 0, 0, 38, 0, 0, - 76, 0, 78, 0, 80, 39, 40, 255, 0, 41, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 89, 90, 91, 256, 342, 0, - 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, - 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, - 0, 102, 636, 0, 0, 0, 0, 103, 104, 0, - 56, 24, 0, 25, 0, 0, 26, 254, 0, 0, - 0, 27, 61, 62, 0, 28, 0, 0, 0, 0, - 0, 64, 105, 257, 30, 108, 0, 0, 0, 0, - 0, 32, 0, 0, 0, 0, 33, 0, 71, 72, + 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 257, 0, 41, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90, 91, 92, 258, 347, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, + 98, 99, 100, 101, 0, 0, 0, 102, 0, 103, + 652, 0, 0, 0, 0, 104, 105, 0, 57, 24, + 0, 25, 0, 0, 26, 256, 0, 0, 0, 27, + 62, 63, 0, 28, 0, 0, 0, 0, 0, 65, + 106, 260, 30, 109, 0, 0, 0, 0, 0, 32, + 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, + 0, 79, 0, 81, 39, 40, 257, 0, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 91, 92, 258, 347, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 658, 0, 0, 0, 0, 104, 105, 0, 57, + 24, 0, 25, 0, 0, 26, 256, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, + 65, 106, 260, 30, 109, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 257, 0, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 258, 347, 0, + 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, + 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, + 0, 103, 660, 0, 0, 0, 0, 104, 105, 0, + 57, 24, 0, 25, 0, 0, 26, 256, 0, 0, + 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, + 0, 65, 106, 260, 30, 109, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36, 0, 37, 74, 0, 0, 38, 0, - 0, 76, 0, 78, 0, 80, 39, 40, 255, 0, + 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, + 0, 77, 0, 79, 0, 81, 39, 40, 257, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 89, 90, 91, 256, 342, - 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, - 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, - 101, 0, 102, 638, 0, 0, 0, 0, 103, 104, - 0, 56, 24, 0, 25, 0, 0, 26, 254, 0, - 0, 0, 27, 61, 62, 0, 28, 0, 0, 0, - 0, 0, 64, 105, 257, 30, 108, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 33, 0, 71, - 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 37, 74, 0, 0, 38, - 0, 0, 76, 0, 78, 0, 80, 39, 40, 255, + 0, 0, 0, 0, 0, 90, 91, 92, 258, 347, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 662, 0, 0, 0, 0, 104, 105, + 0, 57, 24, 0, 25, 0, 0, 26, 256, 0, + 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, + 0, 0, 65, 106, 260, 30, 109, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, + 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 257, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 89, 90, 91, 256, - 342, 0, 0, 0, 0, 0, 0, 0, 95, 0, - 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, - 0, 101, 0, 102, 640, 0, 0, 0, 0, 103, - 104, 0, 56, 24, 0, 25, 0, 0, 26, 254, - 0, 0, 0, 27, 61, 62, 0, 28, 0, 0, - 0, 0, 0, 64, 105, 257, 30, 108, 0, 0, + 0, 0, 0, 0, 0, 0, 90, 91, 92, 258, + 663, 0, 0, 0, 0, 0, 0, 0, 96, 0, + 0, 0, 0, 0, 98, 99, 100, 101, 0, 0, + 0, 102, 0, 103, 665, 0, 0, 0, 0, 104, + 105, 0, 57, 24, 0, 25, 0, 0, 26, 256, + 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, + 0, 0, 0, 65, 106, 260, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, - 71, 72, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 37, 74, 0, 0, - 38, 0, 0, 76, 0, 78, 0, 80, 39, 40, - 255, 0, 41, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, - 256, 342, 0, 0, 0, 0, 0, 0, 0, 95, - 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, - 0, 0, 101, 0, 102, 646, 0, 0, 0, 0, - 103, 104, 0, 56, 24, 0, 25, 0, 0, 26, - 254, 0, 0, 0, 27, 61, 62, 0, 28, 0, - 0, 0, 0, 0, 64, 105, 257, 30, 108, 0, + 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, + 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, + 257, 0, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, + 258, 663, 0, 0, 0, 0, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 667, 0, 0, 0, 0, + 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, + 256, 0, 0, 0, 27, 62, 63, 0, 28, 0, + 0, 0, 0, 0, 65, 106, 260, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, - 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 37, 74, 0, - 0, 38, 0, 0, 76, 0, 78, 0, 80, 39, - 40, 255, 0, 41, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, - 91, 256, 342, 0, 0, 0, 0, 0, 0, 0, - 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, - 0, 0, 0, 101, 0, 102, 648, 0, 0, 0, - 0, 103, 104, 0, 56, 24, 0, 25, 0, 0, - 26, 254, 0, 0, 0, 27, 61, 62, 0, 28, - 0, 0, 0, 0, 0, 64, 105, 257, 30, 108, + 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, + 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 257, 0, 41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, + 92, 258, 663, 0, 0, 0, 0, 0, 0, 0, + 96, 0, 0, 0, 0, 0, 98, 99, 100, 101, + 0, 0, 0, 102, 0, 103, 669, 0, 0, 0, + 0, 104, 105, 0, 57, 24, 0, 25, 0, 0, + 26, 256, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 106, 260, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 74, - 0, 0, 38, 0, 0, 76, 0, 78, 0, 80, - 39, 40, 255, 0, 41, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, - 90, 91, 256, 342, 0, 0, 0, 0, 0, 0, - 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, - 100, 0, 0, 0, 101, 0, 102, 650, 0, 0, - 0, 0, 103, 104, 0, 56, 24, 0, 25, 0, - 0, 26, 254, 0, 0, 0, 27, 61, 62, 0, - 28, 0, 0, 0, 0, 0, 64, 105, 257, 30, - 108, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 71, 72, 34, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 257, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 258, 663, 0, 0, 0, 0, 0, 0, + 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 103, 671, 0, 0, + 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, + 0, 26, 256, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 0, 0, 0, 0, 65, 106, 260, 30, + 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 74, 0, 0, 38, 0, 0, 76, 0, 78, 0, - 80, 39, 40, 255, 0, 41, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 90, 91, 256, 342, 0, 0, 0, 0, 0, - 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, - 99, 100, 0, 0, 0, 101, 0, 102, 652, 0, - 0, 0, 0, 103, 104, 0, 56, 24, 0, 25, - 0, 0, 26, 254, 0, 0, 0, 27, 61, 62, - 0, 28, 0, 0, 0, 0, 0, 64, 105, 257, - 30, 108, 0, 0, 0, 0, 0, 32, 0, 0, - 0, 0, 33, 0, 71, 72, 34, 0, 0, 0, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 257, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90, 91, 92, 258, 663, 0, 0, 0, 0, 0, + 0, 0, 96, 0, 0, 0, 0, 0, 98, 99, + 100, 101, 0, 0, 0, 102, 0, 103, 673, 0, + 0, 0, 0, 104, 105, 0, 57, 24, 0, 25, + 0, 0, 26, 256, 0, 0, 0, 27, 62, 63, + 0, 28, 0, 0, 0, 0, 0, 65, 106, 260, + 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, + 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, - 37, 74, 0, 0, 38, 0, 0, 76, 0, 78, - 0, 80, 39, 40, 255, 0, 41, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 89, 90, 91, 256, 342, 0, 0, 0, 0, - 0, 0, 0, 95, 0, 0, 0, 0, 0, 97, - 98, 99, 100, 0, 0, 0, 101, 0, 102, 654, - 0, 0, 0, 0, 103, 104, 0, 56, 24, 0, - 25, 0, 0, 26, 254, 0, 0, 0, 27, 61, - 62, 0, 28, 0, 0, 0, 0, 0, 64, 105, - 257, 30, 108, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 33, 0, 71, 72, 34, 0, 0, + 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, + 0, 81, 39, 40, 257, 0, 41, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 90, 91, 92, 258, 663, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 675, + 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, + 25, 0, 0, 26, 256, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, + 260, 30, 109, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 37, 74, 0, 0, 38, 0, 0, 76, 0, - 78, 0, 80, 39, 40, 255, 0, 41, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89, 90, 91, 256, 342, 0, 0, 0, - 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, - 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, - 656, 0, 0, 0, 0, 103, 104, 0, 56, 24, - 0, 25, 0, 0, 26, 254, 0, 0, 0, 27, - 61, 62, 0, 28, 0, 0, 0, 0, 0, 64, - 105, 257, 30, 108, 0, 0, 0, 0, 0, 32, - 0, 0, 0, 0, 33, 0, 71, 72, 34, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 36, 0, 37, 74, 0, 0, 38, 0, 0, 76, - 0, 78, 0, 80, 39, 40, 255, 0, 41, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 89, 90, 91, 256, 342, 0, 0, - 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, - 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, - 102, 658, 0, 0, 0, 0, 103, 104, 0, 56, - 24, 0, 25, 0, 0, 26, 254, 0, 0, 0, - 27, 61, 62, 0, 28, 0, 0, 0, 0, 0, - 64, 105, 257, 30, 108, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 0, 33, 0, 71, 72, 34, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 74, 0, 0, 38, 0, 0, - 76, 0, 78, 0, 80, 39, 40, 255, 0, 41, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 89, 90, 91, 256, 342, 0, - 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, - 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, - 0, 102, 660, 0, 0, 0, 0, 103, 104, 0, - 56, 24, 0, 25, 0, 0, 26, 254, 0, 0, - 0, 27, 61, 62, 0, 28, 0, 0, 0, 0, - 0, 64, 105, 257, 30, 108, 0, 0, 0, 0, - 0, 32, 0, 0, 0, 0, 33, 0, 71, 72, + 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 257, 0, 41, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90, 91, 92, 258, 663, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, + 98, 99, 100, 101, 0, 0, 0, 102, 0, 103, + 677, 0, 0, 0, 0, 104, 105, 0, 57, 24, + 0, 25, 0, 0, 26, 256, 0, 0, 0, 27, + 62, 63, 0, 28, 0, 0, 0, 0, 0, 65, + 106, 260, 30, 109, 0, 0, 0, 0, 0, 32, + 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, + 0, 79, 0, 81, 39, 40, 257, 0, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 91, 92, 258, 663, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 679, 0, 0, 0, 0, 104, 105, 0, 57, + 24, 0, 25, 0, 0, 26, 256, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, + 65, 106, 260, 30, 109, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 257, 0, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 258, 663, 0, + 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, + 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, + 0, 103, 681, 0, 0, 0, 0, 104, 105, 0, + 57, 24, 0, 25, 0, 0, 26, 256, 0, 0, + 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, + 0, 65, 106, 260, 30, 109, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36, 0, 37, 74, 0, 0, 38, 0, - 0, 76, 0, 78, 0, 80, 39, 40, 255, 0, + 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, + 0, 77, 0, 79, 0, 81, 39, 40, 257, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 89, 90, 91, 256, 342, - 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, - 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, - 101, 0, 102, 662, 0, 0, 0, 0, 103, 104, - 0, 56, 24, 0, 25, 0, 0, 26, 254, 0, - 0, 0, 27, 61, 62, 0, 28, 0, 0, 0, - 0, 0, 64, 105, 257, 30, 108, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 33, 0, 71, - 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 37, 74, 0, 0, 38, - 0, 0, 76, 0, 78, 0, 80, 39, 40, 255, + 0, 0, 0, 0, 0, 90, 91, 92, 258, 663, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 683, 0, 0, 0, 0, 104, 105, + 0, 57, 24, 0, 25, 0, 0, 26, 256, 0, + 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, + 0, 0, 65, 106, 260, 30, 109, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, + 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 257, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 89, 90, 91, 256, - 342, 0, 0, 0, 0, 0, 0, 0, 95, 0, - 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, - 0, 101, 0, 102, 664, 0, 0, 0, 0, 103, - 104, 0, 56, 24, 0, 25, 0, 0, 26, 254, - 0, 0, 0, 27, 61, 62, 0, 28, 0, 0, - 0, 0, 0, 64, 105, 257, 30, 108, 0, 0, + 0, 0, 0, 0, 0, 0, 90, 91, 92, 258, + 663, 0, 0, 0, 0, 0, 0, 0, 96, 0, + 0, 0, 0, 0, 98, 99, 100, 101, 0, 0, + 0, 102, 0, 103, 685, 0, 0, 0, 0, 104, + 105, 0, 57, 24, 0, 25, 0, 0, 26, 256, + 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, + 0, 0, 0, 65, 106, 260, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, - 71, 72, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 37, 74, 0, 0, - 38, 0, 0, 76, 0, 78, 0, 80, 39, 40, - 255, 0, 41, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, - 256, 342, 0, 0, 0, 0, 0, 0, 0, 95, - 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, - 0, 0, 101, 0, 102, 666, 0, 0, 0, 0, - 103, 104, 0, 56, 24, 0, 25, 0, 0, 26, - 254, 0, 0, 0, 27, 61, 62, 0, 28, 0, - 0, 0, 0, 0, 64, 105, 257, 30, 108, 0, + 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, + 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, + 257, 0, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, + 258, 663, 0, 0, 0, 0, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 687, 0, 0, 0, 0, + 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, + 256, 0, 0, 0, 27, 62, 63, 0, 28, 0, + 0, 0, 0, 0, 65, 106, 260, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, - 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 37, 74, 0, - 0, 38, 0, 0, 76, 0, 78, 0, 80, 39, - 40, 255, 0, 41, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, - 91, 256, 342, 0, 0, 0, 0, 0, 0, 0, - 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, - 0, 0, 0, 101, 0, 102, 668, 0, 0, 0, - 0, 103, 104, 0, 56, 24, 0, 25, 0, 0, - 26, 254, 0, 0, 0, 27, 61, 62, 0, 28, - 0, 0, 0, 0, 0, 64, 105, 257, 30, 108, + 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, + 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 257, 0, 41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, + 92, 258, 663, 0, 0, 0, 0, 0, 0, 0, + 96, 0, 0, 0, 0, 0, 98, 99, 100, 101, + 0, 0, 0, 102, 0, 103, 858, 0, 0, 0, + 0, 104, 105, 0, 57, 24, 0, 25, 0, 0, + 26, 256, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 0, 0, 0, 65, 106, 260, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 74, - 0, 0, 38, 0, 0, 76, 0, 78, 0, 80, - 39, 40, 255, 0, 41, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, - 90, 91, 256, 342, 0, 0, 0, 0, 0, 0, - 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, - 100, 0, 0, 0, 101, 0, 102, 670, 0, 0, - 0, 0, 103, 104, 0, 56, 24, 0, 25, 0, - 0, 26, 254, 0, 0, 0, 27, 61, 62, 0, - 28, 0, 0, 0, 0, 0, 64, 105, 257, 30, - 108, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 71, 72, 34, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 257, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 258, 347, 0, 0, 0, 0, 0, 0, + 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 103, 519, 0, 0, + 0, 0, 104, 105, 347, 57, 24, 0, 25, 0, + 0, 26, 256, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 0, 0, 0, 0, 65, 106, 260, 30, + 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 347, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 74, 0, 0, 38, 0, 0, 76, 0, 78, 0, - 80, 39, 40, 255, 0, 41, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 90, 91, 256, 342, 0, 0, 0, 0, 0, - 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, - 99, 100, 0, 0, 0, 101, 0, 102, 672, 0, - 0, 0, 0, 103, 104, 0, 56, 24, 0, 25, - 0, 0, 26, 254, 0, 0, 0, 27, 61, 62, - 0, 28, 0, 0, 0, 0, 0, 64, 105, 257, - 30, 108, 0, 0, 0, 0, 0, 32, 0, 0, - 0, 0, 33, 0, 71, 72, 34, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, - 37, 74, 0, 0, 38, 0, 0, 76, 0, 78, - 0, 80, 39, 40, 255, 0, 41, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 89, 90, 91, 256, 342, 0, 0, 0, 0, - 0, 0, 0, 95, 0, 0, 0, 0, 0, 97, - 98, 99, 100, 0, 0, 0, 101, 0, 102, 674, - 0, 0, 0, 0, 103, 104, 0, 56, 24, 0, - 25, 0, 0, 26, 254, 0, 0, 0, 27, 61, - 62, 0, 28, 0, 0, 0, 0, 0, 64, 105, - 257, 30, 108, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 33, 0, 71, 72, 34, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 37, 74, 0, 0, 38, 0, 0, 76, 0, - 78, 0, 80, 39, 40, 255, 0, 41, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89, 90, 91, 256, 342, 0, 0, 0, - 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, - 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, - 842, 0, 0, 0, 0, 103, 104, 0, 56, 24, - 0, 25, 0, 0, 26, 254, 0, 0, 0, 27, - 61, 62, 0, 28, 0, 0, 0, 0, 0, 64, - 105, 257, 30, 108, 0, 0, 0, 0, 0, 32, - 0, 0, 0, 0, 33, 0, 71, 72, 34, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 36, 0, 37, 74, 0, 0, 38, 0, 0, 76, - 0, 78, 0, 80, 39, 40, 255, 0, 41, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 257, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 89, 90, 91, 256, 342, 0, 0, - 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, - 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, - 102, 513, 0, 0, 0, 0, 103, 104, 347, 56, - 24, 0, 25, 0, 0, 26, 254, 0, 0, 0, - 27, 61, 62, 0, 28, 0, 0, 0, 0, 0, - 64, 105, 257, 30, 108, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 347, 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 74, 0, 0, 38, 0, 0, - 76, 0, 78, 0, 80, 39, 40, 255, 0, 41, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 89, 90, 91, 256, 291, 0, - 0, 0, 0, 0, 0, 0, 95, 347, 347, 347, - 347, 796, 0, 0, 347, 347, 0, 0, 347, 347, - 347, 347, 347, 347, 347, 347, 347, 0, 347, 347, - 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, + 90, 91, 92, 258, 520, 0, 0, 0, 0, 0, + 0, 0, 96, 347, 347, 347, 347, 811, 0, 0, + 347, 347, 0, 0, 347, 347, 347, 347, 347, 347, + 347, 347, 347, 0, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, - 0, 0, 105, 514, 0, 0, 347, 0, 52, 347, - 52, 0, 52, 0, 52, 0, 0, 52, 0, 52, - 52, 0, 52, 0, 52, 0, 52, 0, 52, 52, - 52, 52, 0, 0, 52, 52, 0, 0, 0, 0, - 52, 52, 52, 52, 52, 0, 0, 52, 0, 52, - 0, 52, 0, 52, 52, 0, 52, 52, 52, 52, - 0, 0, 52, 52, 52, 52, 0, 0, 52, 52, - 52, 0, 0, 0, 0, 0, 0, 52, 52, 0, - 52, 52, 0, 52, 52, 52, 0, 0, 0, 52, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, - 0, 52, 52, 51, 0, 0, 0, 51, 0, 51, - 0, 0, 51, 0, 51, 51, 0, 51, 0, 51, + 347, 347, 347, 347, 347, 347, 0, 0, 106, 521, + 0, 0, 347, 0, 52, 347, 52, 0, 52, 0, + 52, 0, 0, 52, 0, 52, 52, 0, 52, 0, + 52, 0, 52, 0, 52, 52, 52, 52, 0, 0, + 52, 52, 0, 0, 0, 0, 52, 52, 52, 52, + 52, 0, 0, 52, 0, 52, 0, 52, 0, 52, + 52, 0, 52, 52, 52, 52, 0, 0, 52, 52, + 52, 52, 0, 0, 52, 52, 52, 0, 0, 0, + 0, 0, 0, 52, 52, 0, 52, 52, 0, 52, + 52, 52, 0, 0, 0, 52, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 52, 0, 52, 52, 51, + 0, 0, 0, 51, 0, 51, 0, 0, 51, 0, + 51, 51, 0, 51, 0, 51, 0, 51, 0, 51, + 51, 51, 51, 0, 0, 51, 51, 0, 0, 0, + 0, 51, 0, 51, 51, 51, 0, 0, 51, 0, + 51, 0, 51, 0, 0, 51, 0, 51, 51, 51, + 51, 52, 0, 0, 51, 51, 51, 0, 0, 51, + 51, 51, 0, 0, 0, 0, 0, 0, 51, 51, + 0, 51, 51, 0, 51, 51, 51, 0, 0, 0, + 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, + 51, 0, 51, 0, 51, 0, 86, 51, 0, 51, + 51, 0, 51, 0, 51, 51, 51, 0, 51, 51, + 51, 51, 0, 0, 51, 51, 0, 0, 0, 0, + 51, 0, 51, 51, 51, 0, 0, 51, 0, 51, + 0, 51, 0, 0, 51, 0, 51, 51, 51, 51, + 0, 0, 0, 51, 51, 51, 51, 0, 51, 51, + 51, 0, 0, 0, 0, 0, 0, 51, 51, 0, + 51, 51, 0, 51, 51, 51, 0, 0, 0, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 52, 0, 51, + 0, 52, 0, 52, 0, 87, 52, 0, 52, 52, + 0, 52, 0, 52, 51, 52, 0, 52, 52, 52, + 52, 0, 0, 52, 52, 0, 0, 0, 0, 52, + 0, 52, 52, 52, 0, 0, 52, 0, 52, 0, + 52, 0, 0, 52, 0, 52, 52, 52, 52, 0, + 0, 0, 52, 52, 52, 51, 0, 52, 52, 52, + 0, 0, 0, 0, 0, 0, 52, 52, 0, 52, + 52, 0, 52, 52, 52, 0, 0, 0, 52, 0, + 0, 0, 0, 51, 0, 0, 0, 51, 0, 51, + 0, 0, 51, 0, 51, 51, 0, 51, 52, 51, 0, 51, 0, 51, 51, 51, 51, 0, 0, 51, - 51, 0, 0, 0, 0, 51, 0, 51, 51, 51, + 51, 0, 0, 52, 0, 51, 0, 51, 51, 51, 0, 0, 51, 0, 51, 0, 51, 0, 0, 51, - 0, 51, 51, 51, 51, 52, 0, 0, 51, 51, + 0, 51, 51, 51, 51, 0, 0, 0, 51, 51, 51, 0, 0, 51, 51, 51, 0, 0, 0, 0, - 0, 0, 51, 51, 0, 51, 51, 0, 51, 51, + 0, 0, 51, 51, 52, 51, 51, 0, 51, 51, 51, 0, 0, 0, 51, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 51, 0, 51, 0, 51, 0, 51, 0, - 86, 51, 0, 51, 51, 0, 51, 0, 51, 51, - 51, 0, 51, 51, 51, 51, 0, 0, 51, 51, - 0, 0, 0, 0, 51, 0, 51, 51, 51, 0, - 0, 51, 0, 51, 0, 51, 0, 0, 51, 0, - 51, 51, 51, 51, 0, 0, 0, 51, 51, 51, - 51, 0, 51, 51, 51, 0, 0, 0, 0, 0, - 0, 51, 51, 0, 51, 51, 0, 51, 51, 51, - 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 52, 0, 51, 0, 52, 0, 52, 0, 87, - 52, 0, 52, 52, 0, 52, 0, 52, 51, 52, - 0, 52, 52, 52, 52, 0, 0, 52, 52, 0, - 0, 0, 0, 52, 0, 52, 52, 52, 0, 0, - 52, 0, 52, 0, 52, 0, 0, 52, 0, 52, - 52, 52, 52, 0, 0, 0, 52, 52, 52, 51, - 0, 52, 52, 52, 0, 0, 0, 0, 0, 0, - 52, 52, 0, 52, 52, 0, 52, 52, 52, 0, - 0, 0, 52, 0, 0, 0, 0, 51, 0, 0, - 0, 51, 0, 51, 0, 0, 51, 0, 51, 51, - 0, 51, 52, 51, 0, 51, 0, 51, 51, 51, - 51, 0, 0, 51, 51, 0, 0, 52, 0, 51, - 0, 51, 51, 51, 0, 0, 51, 0, 51, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, + 0, 51, 0, 51, 51, 0, 51, 0, 51, 51, + 222, 51, 0, 51, 0, 51, 0, 51, 51, 51, + 51, 0, 0, 51, 51, 0, 0, 0, 0, 51, + 0, 51, 51, 51, 0, 0, 51, 0, 51, 347, 51, 0, 0, 51, 0, 51, 51, 51, 51, 0, 0, 0, 51, 51, 51, 0, 0, 51, 51, 51, - 0, 0, 0, 0, 0, 0, 51, 51, 52, 51, - 51, 0, 51, 51, 51, 0, 0, 0, 51, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 51, 0, 0, 0, 51, 0, 51, 51, 0, - 51, 0, 51, 51, 222, 51, 0, 51, 0, 51, - 0, 51, 51, 51, 51, 0, 0, 51, 51, 0, - 0, 0, 0, 51, 0, 51, 51, 51, 0, 0, - 51, 0, 51, 347, 51, 0, 0, 51, 0, 51, - 51, 51, 51, 0, 0, 0, 51, 51, 51, 0, - 0, 51, 51, 51, 51, 0, 347, 0, 0, 0, - 51, 51, 0, 51, 51, 0, 51, 51, 51, 347, - 0, 0, 51, 0, 347, 0, 0, 347, 0, 347, - 0, 347, 347, 347, 347, 0, 0, 0, 0, 347, - 0, 0, 51, 347, 0, 0, 0, 347, 223, 0, - 0, 0, 0, 368, 0, 347, 0, 0, 347, 0, - 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 368, 0, 0, 347, - 0, 0, 0, 0, 347, 0, 0, 0, 0, 368, - 347, 347, 0, 273, 368, 347, 0, 239, 51, 368, - 0, 368, 368, 368, 368, 0, 0, 0, 347, 368, - 0, 0, 0, 368, 0, 465, 0, 368, 0, 0, - 0, 0, 0, 0, 0, 368, 0, 0, 368, 0, - 368, 0, 0, 0, 0, 0, 0, 0, 466, 0, - 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 467, 0, 465, 368, 0, 469, 0, 0, 0, - 368, 470, 0, 471, 472, 473, 474, 0, 0, 0, - 0, 475, 0, 0, 0, 476, 466, 0, 0, 1381, - 0, 0, 0, 465, 0, 0, 0, 477, 0, 467, - 478, 0, 479, 0, 469, 0, 0, 0, 0, 470, - 0, 471, 472, 473, 474, 0, 466, 0, 0, 475, - 368, 0, 0, 476, 0, 0, 480, 1381, 0, 467, - 0, 0, 1382, 0, 469, 477, 0, 0, 478, 470, - 479, 471, 472, 473, 474, 0, 0, 0, 0, 475, - 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, - 56, 24, 0, 25, 480, 477, 26, 254, 478, 0, - 479, 27, 61, 62, 0, 28, 0, 0, 0, 0, - 0, 64, 1383, 0, 30, 0, 0, 0, 0, 0, - 0, 32, 0, 0, 480, 0, 33, 0, 71, 72, - 34, 0, 614, 0, 0, 0, 0, 0, 0, 615, - 0, 0, 36, 0, 37, 74, 0, 0, 38, 0, - 1383, 76, 0, 78, 0, 80, 39, 40, 255, 0, - 41, 0, 0, 0, 0, 0, 0, 616, 0, 0, - 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, - 1400, 0, 0, 0, 0, 89, 90, 91, 92, 93, - 0, 0, 0, 0, 0, 0, 0, 95, 975, 0, - 617, 0, 0, 97, 98, 99, 100, 0, 0, 0, - 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, - 0, 0, 0, 0, 0, 0, 56, 24, 0, 25, - 0, 0, 26, 254, 0, 0, 0, 27, 61, 62, - 0, 28, 0, 105, 106, 107, 108, 64, 0, 0, - 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, - 0, 0, 33, 0, 71, 72, 34, 0, 614, 0, - 0, 0, 0, 0, 0, 615, 0, 0, 36, 0, - 37, 74, 0, 0, 38, 0, 0, 76, 0, 78, - 0, 80, 39, 40, 255, 0, 41, 0, 0, 0, - 0, 0, 0, 616, 0, 0, 87, 88, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 89, 90, 91, 92, 93, 0, 0, 0, 0, - 0, 0, 0, 95, 0, 0, 617, 0, 0, 97, - 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, - 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, - 0, 0, 56, 24, 0, 25, 0, 0, 26, 254, - 0, 0, 0, 27, 61, 62, 0, 28, 0, 105, - 106, 107, 108, 64, 0, 0, 30, 0, 0, 0, - 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, - 71, 72, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 37, 74, 0, 0, - 38, 0, 0, 76, 0, 78, 0, 80, 39, 40, - 255, 0, 41, 0, 0, 84, 0, 0, 0, 86, - 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, - 92, 302, 0, 0, 0, 0, 0, 0, 0, 95, - 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, - 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, - 103, 104, 0, 0, 0, 0, 0, 0, 56, 24, - 0, 25, 0, 0, 26, 254, 0, 0, 0, 27, - 61, 62, 0, 28, 0, 105, 303, 107, 108, 64, - 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, - 0, 0, 0, 0, 33, 0, 71, 72, 34, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 36, 0, 37, 74, 0, 0, 38, 0, 0, 76, - 0, 78, 0, 80, 39, 40, 255, 0, 41, 0, - 0, 0, 0, 0, 0, 86, 0, 0, 87, 88, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 89, 90, 91, 92, 302, 0, 0, - 0, 531, 0, 0, 0, 95, 0, 0, 0, 0, - 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, - 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, - 0, 0, 0, 0, 56, 24, 0, 25, 0, 0, - 26, 254, 0, 0, 0, 27, 61, 62, 0, 28, - 0, 105, 303, 107, 108, 64, 0, 0, 30, 0, + 51, 0, 347, 0, 0, 0, 51, 51, 0, 51, + 51, 0, 51, 51, 51, 347, 0, 0, 51, 0, + 347, 0, 0, 347, 0, 347, 0, 347, 347, 347, + 347, 0, 0, 0, 0, 347, 0, 0, 51, 347, + 0, 0, 0, 347, 223, 0, 0, 0, 0, 369, + 0, 347, 0, 0, 347, 0, 347, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 369, 0, 0, 347, 0, 0, 0, 0, + 347, 0, 0, 0, 0, 369, 347, 347, 0, 273, + 369, 347, 0, 240, 51, 369, 0, 369, 369, 369, + 369, 0, 0, 0, 347, 369, 0, 0, 0, 369, + 0, 368, 0, 369, 0, 0, 0, 0, 0, 0, + 0, 369, 0, 0, 369, 0, 369, 0, 0, 0, + 0, 0, 0, 0, 368, 0, 347, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 368, 0, 471, + 369, 0, 368, 0, 0, 239, 369, 368, 0, 368, + 368, 368, 368, 0, 0, 0, 0, 368, 0, 0, + 0, 368, 472, 0, 0, 368, 0, 0, 0, 0, + 0, 0, 0, 368, 0, 473, 368, 471, 368, 0, + 475, 0, 0, 0, 0, 476, 0, 477, 478, 479, + 480, 0, 0, 0, 0, 481, 369, 0, 0, 482, + 472, 0, 368, 1412, 0, 0, 0, 0, 368, 0, + 0, 483, 0, 473, 484, 471, 485, 0, 475, 0, + 0, 0, 0, 476, 0, 477, 478, 479, 480, 0, + 0, 0, 0, 481, 0, 0, 0, 482, 472, 0, + 486, 1412, 0, 0, 0, 0, 1413, 0, 0, 483, + 0, 473, 484, 0, 485, 0, 475, 0, 368, 0, + 0, 476, 0, 477, 478, 479, 480, 0, 0, 0, + 0, 481, 0, 0, 0, 482, 0, 0, 486, 0, + 0, 0, 0, 0, 0, 0, 0, 483, 57, 24, + 484, 25, 485, 0, 26, 256, 1414, 0, 0, 27, + 62, 63, 0, 28, 0, 0, 0, 0, 0, 65, + 0, 0, 30, 0, 0, 0, 486, 0, 0, 32, + 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, + 626, 0, 0, 0, 1414, 0, 0, 627, 0, 0, + 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, + 0, 79, 0, 81, 39, 40, 257, 0, 41, 0, + 0, 0, 0, 0, 0, 628, 0, 0, 88, 89, + 0, 0, 1430, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 91, 92, 93, 94, 0, 0, + 0, 0, 0, 0, 0, 96, 993, 0, 629, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, + 0, 0, 0, 0, 57, 24, 0, 25, 0, 0, + 26, 256, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 106, 107, 108, 109, 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 74, - 0, 0, 38, 0, 0, 76, 0, 78, 0, 80, - 39, 40, 255, 0, 41, 0, 0, 0, 0, 0, - 0, 86, 0, 0, 87, 88, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, - 90, 91, 92, 302, 0, 0, 0, 525, 0, 0, - 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, - 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, - 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, - 56, 24, 0, 25, 0, 0, 26, 254, 0, 0, - 0, 27, 61, 62, 0, 28, 0, 105, 303, 107, - 108, 64, 0, 0, 30, 0, 0, 0, 0, 0, - 0, 32, 0, 0, 0, 0, 33, 0, 71, 72, + 33, 0, 72, 73, 34, 0, 626, 0, 0, 0, + 0, 0, 0, 627, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 257, 0, 41, 0, 0, 0, 0, 0, + 0, 628, 0, 0, 88, 89, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 93, 94, 0, 0, 0, 0, 0, 0, + 0, 96, 0, 0, 629, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 103, 0, 0, 0, + 0, 0, 104, 105, 0, 0, 0, 0, 0, 0, + 57, 24, 0, 25, 0, 0, 26, 256, 0, 0, + 0, 27, 62, 63, 0, 28, 0, 106, 107, 108, + 109, 65, 0, 0, 30, 0, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36, 0, 37, 74, 0, 0, 38, 0, - 0, 76, 0, 78, 0, 80, 39, 40, 255, 0, - 41, 0, 0, 0, 0, 0, 0, 86, 0, 0, - 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 89, 90, 91, 92, 302, - 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, - 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, - 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, - 0, 0, 0, 0, 0, 0, 56, 24, 0, 25, - 0, 0, 26, 254, 0, 0, 0, 27, 61, 62, - 0, 28, 0, 105, 303, 107, 108, 64, 0, 0, + 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, + 0, 77, 0, 79, 0, 81, 39, 40, 257, 0, + 41, 0, 0, 85, 0, 0, 0, 87, 0, 0, + 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 90, 91, 92, 93, 305, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 0, 0, 0, 0, 0, 104, 105, + 0, 0, 0, 0, 0, 0, 57, 24, 0, 25, + 0, 0, 26, 256, 0, 0, 0, 27, 62, 63, + 0, 28, 0, 106, 306, 108, 109, 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, - 0, 0, 33, 0, 71, 72, 34, 0, 0, 0, + 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, - 37, 74, 0, 0, 38, 0, 0, 76, 0, 78, - 0, 80, 39, 40, 255, 0, 41, 0, 0, 0, - 0, 0, 0, 86, 0, 0, 87, 88, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 89, 90, 91, 92, 93, 0, 0, 0, 0, - 0, 0, 0, 95, 0, 0, 0, 0, 0, 97, - 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, - 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, - 0, 0, 655, 655, 0, 655, 0, 0, 655, 655, - 0, 0, 0, 655, 655, 655, 0, 655, 0, 105, - 106, 107, 108, 655, 0, 0, 655, 0, 0, 0, - 0, 0, 0, 655, 0, 0, 0, 0, 655, 0, - 655, 655, 655, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 655, 0, 655, 655, 0, 0, - 655, 0, 0, 655, 0, 655, 0, 655, 655, 655, - 655, 0, 655, 0, 0, 0, 0, 0, 0, 655, - 0, 0, 655, 655, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 655, 655, 655, - 655, 655, 0, 0, 0, 0, 0, 0, 0, 655, - 0, 0, 0, 0, 0, 655, 655, 655, 655, 0, - 0, 0, 655, 0, 655, 0, 0, 0, 0, 0, - 655, 655, 0, 0, 0, 0, 0, 0, 143, 143, - 0, 143, 0, 0, 143, 143, 0, 0, 0, 143, - 143, 143, 0, 143, 0, 655, 655, 655, 655, 143, - 0, 0, 143, 0, 0, 0, 0, 0, 0, 143, - 0, 0, 0, 0, 143, 0, 143, 143, 143, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 143, 0, 143, 143, 0, 0, 143, 0, 0, 143, - 0, 143, 0, 143, 143, 143, 143, 0, 143, 0, - 0, 0, 0, 0, 0, 143, 0, 0, 143, 143, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 143, 143, 143, 143, 143, 0, 0, - 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, - 0, 143, 143, 143, 143, 0, 0, 0, 143, 0, - 143, 0, 0, 0, 0, 0, 143, 143, 0, 0, - 0, 0, 0, 0, 56, 24, 0, 25, 0, 0, - 26, 254, 0, 0, 0, 27, 61, 62, 0, 28, - 0, 143, 143, 143, 143, 64, 0, 0, 30, 0, - 0, 0, 0, 0, 0, 32, 0, 31, 0, 0, - 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 74, - 31, 0, 38, 0, 0, 76, 0, 78, 0, 80, - 39, 40, 255, 31, 41, 0, 0, 0, 31, 0, - 0, 0, 0, 31, 0, 31, 31, 31, 31, 0, - 0, 31, 0, 31, 0, 0, 0, 31, 0, 89, - 90, 91, 256, 342, 0, 0, 0, 0, 0, 31, - 0, 95, 31, 0, 31, 0, 0, 97, 98, 99, - 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, - 0, 0, 103, 104, 0, 0, 0, 0, 31, 0, - 0, 0, 0, 0, 31, 31, 0, 0, 0, 0, - 0, 0, 692, 0, 692, 0, 692, 105, 257, 692, - 108, 692, 692, 0, 692, 0, 692, 0, 692, 0, - 692, 692, 692, 0, 0, 0, 692, 692, 0, 0, - 0, 0, 692, 0, 692, 692, 0, 0, 0, 692, - 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 692, 692, 0, 692, 0, 0, - 0, 692, 692, 0, 0, 0, 0, 0, 0, 692, - 692, 56, 24, 692, 25, 0, 692, 26, 254, 0, - 0, 692, 27, 61, 62, 0, 28, 0, 0, 0, - 0, 0, 64, 0, 0, 30, 0, 0, 0, 0, - 0, 0, 32, 692, 692, 0, 0, 33, 0, 71, - 72, 34, 0, 0, 0, 0, 692, 0, 0, 0, - 0, 0, 0, 36, 0, 37, 74, 0, 0, 38, - 0, 0, 76, 0, 78, 0, 80, 39, 40, 255, - 0, 41, 0, 0, 84, 0, 0, 0, 0, 0, - 0, 24, 0, 25, 0, 0, 26, 692, 1286, 0, - 0, 27, 0, 0, 0, 28, 89, 90, 91, 256, - 0, 0, 0, 0, 30, 691, 0, 691, 95, 0, - 691, 32, 691, 691, 0, 691, 33, 691, 1287, 691, - 34, 691, 691, 691, 0, 0, 0, 691, 691, 0, - 0, 0, 36, 691, 37, 691, 691, 0, 38, 1288, - 691, 0, 0, 0, 691, 0, 39, 40, 0, 0, - 41, 0, 0, 324, 105, 257, 691, 0, 691, 0, - 0, 0, 691, 691, 0, 0, 0, 0, 0, 0, - 691, 691, 0, 691, 691, 691, 0, 691, 691, 0, - 691, 691, 691, 691, 0, 691, 0, 691, 0, 691, - 691, 691, 0, 0, 0, 691, 691, 0, 0, 0, - 0, 691, 0, 691, 691, 0, 0, 0, 691, 0, - 0, 0, 691, 0, 0, 0, 0, 691, 0, 0, - 0, 0, 0, 0, 691, 0, 691, 0, 0, 0, - 691, 691, 0, 0, 368, 0, 0, 0, 691, 691, - 0, 0, 691, 0, 0, 691, 0, 24, 0, 25, - 691, 0, 26, 0, 0, 1349, 0, 27, 691, 726, - 0, 28, 0, 727, 1350, 1351, 0, 0, 0, 1352, - 30, 0, 0, 0, 0, 1353, 0, 32, 0, 24, - 0, 25, 33, 0, 26, 0, 34, 1349, 0, 27, - 0, 726, 0, 28, 0, 727, 1350, 1351, 36, 0, - 37, 1352, 30, 0, 38, 0, 0, 1353, 0, 32, - 0, 0, 39, 40, 33, 0, 41, 0, 34, 1354, - 0, 0, 0, 51, 1355, 51, 691, 0, 51, 0, - 36, 0, 37, 51, 0, 0, 38, 51, 0, 0, - 0, 0, 0, 0, 39, 40, 51, 0, 41, 0, - 0, 1354, 0, 51, 0, 51, 1355, 51, 51, 1356, - 51, 0, 51, 0, 51, 51, 51, 0, 0, 51, - 0, 51, 0, 0, 51, 0, 51, 0, 51, 0, - 51, 0, 0, 51, 0, 51, 0, 0, 51, 51, - 51, 0, 51, 0, 51, 51, 51, 0, 51, 24, - 1357, 25, 0, 51, 26, 0, 51, 0, 51, 27, - 0, 0, 51, 28, 0, 51, 0, 0, 0, 0, - 51, 51, 30, 0, 51, 0, 0, 51, 0, 32, - 162, 0, 1357, 0, 33, 0, 0, 0, 34, 0, - 586, 0, 0, 0, 0, 0, 0, 587, 0, 0, - 36, 0, 37, 0, 0, 0, 38, 0, 0, 588, - 162, 0, 0, 0, 39, 40, 0, 0, 41, 0, - 52, 589, 52, 0, 0, 52, 51, 0, 0, 0, - 52, 0, 0, 0, 52, 0, 0, 0, 0, 0, - 0, 0, 0, 52, 0, 0, 0, 590, 0, 0, - 52, 0, 51, 0, 51, 52, 0, 51, 51, 52, - 0, 52, 51, 52, 0, 0, 51, 0, 52, 0, - 0, 52, 0, 52, 0, 51, 0, 52, 0, 0, - 52, 0, 51, 0, 0, 52, 52, 51, 0, 52, - 0, 51, 52, 51, 0, 51, 0, 0, 0, 0, - 51, 0, 591, 51, 0, 51, 0, 0, 0, 51, - 0, 0, 51, 0, 0, 0, 0, 51, 51, 0, - 0, 51, 0, 24, 51, 25, 0, 0, 26, 0, - 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, - 0, 29, 24, 0, 25, 0, 30, 26, 0, 0, - 0, 31, 27, 32, 0, 0, 28, 0, 33, 0, - 0, 0, 34, 35, 0, 30, 0, 0, 0, 0, - 0, 0, 32, 52, 36, 0, 37, 33, 0, 0, - 38, 34, 0, 0, 0, 0, 37, 0, 39, 40, - 0, 0, 41, 36, 0, 37, 0, 37, 0, 38, - 0, 0, 37, 0, 0, 51, 37, 39, 40, 37, - 0, 41, 0, 0, 324, 0, 0, 0, 0, 0, - 0, 37, 37, 0, 0, 0, 37, 37, 0, 0, + 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, + 0, 81, 39, 40, 257, 0, 41, 0, 0, 0, + 0, 0, 0, 87, 0, 0, 88, 89, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 90, 91, 92, 93, 305, 0, 0, 0, 540, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 0, + 0, 0, 0, 0, 104, 105, 0, 0, 0, 0, + 0, 0, 57, 24, 0, 25, 0, 0, 26, 256, + 0, 0, 0, 27, 62, 63, 0, 28, 0, 106, + 306, 108, 109, 65, 0, 0, 30, 0, 0, 0, + 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, + 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, + 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, + 257, 0, 41, 0, 0, 0, 0, 0, 0, 87, + 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, + 93, 305, 0, 0, 0, 534, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, + 104, 105, 0, 0, 0, 0, 0, 0, 57, 24, + 0, 25, 0, 0, 26, 256, 0, 0, 0, 27, + 62, 63, 0, 28, 0, 106, 306, 108, 109, 65, + 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, + 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, + 0, 79, 0, 81, 39, 40, 257, 0, 41, 0, + 0, 0, 0, 0, 0, 87, 0, 0, 88, 89, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 91, 92, 93, 305, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, + 0, 0, 0, 0, 57, 24, 0, 25, 0, 0, + 26, 256, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 106, 306, 108, 109, 65, 0, 0, 30, 0, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, + 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 257, 0, 41, 0, 0, 0, 0, 0, + 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 91, 92, 93, 94, 0, 0, 0, 0, 0, 0, + 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 103, 0, 0, 0, + 0, 0, 104, 105, 0, 0, 0, 0, 0, 0, + 661, 661, 0, 661, 0, 0, 661, 661, 0, 0, + 0, 661, 661, 661, 0, 661, 0, 106, 107, 108, + 109, 661, 0, 0, 661, 0, 0, 0, 0, 0, + 0, 661, 0, 0, 0, 0, 661, 0, 661, 661, + 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 661, 0, 661, 661, 0, 0, 661, 0, + 0, 661, 0, 661, 0, 661, 661, 661, 661, 0, + 661, 0, 0, 0, 0, 0, 0, 661, 0, 0, + 661, 661, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 661, 661, 661, 661, 661, + 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, + 0, 0, 0, 661, 661, 661, 661, 0, 0, 0, + 661, 0, 661, 0, 0, 0, 0, 0, 661, 661, + 0, 0, 0, 0, 0, 0, 143, 143, 0, 143, + 0, 0, 143, 143, 0, 0, 0, 143, 143, 143, + 0, 143, 0, 661, 661, 661, 661, 143, 0, 0, + 143, 0, 0, 0, 0, 0, 0, 143, 0, 0, + 0, 0, 143, 0, 143, 143, 143, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, + 143, 143, 0, 0, 143, 0, 0, 143, 0, 143, + 0, 143, 143, 143, 143, 0, 143, 0, 0, 0, + 0, 0, 0, 143, 0, 0, 143, 143, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 143, 143, 143, 143, 143, 0, 0, 0, 0, + 0, 0, 0, 143, 0, 0, 0, 0, 0, 143, + 143, 143, 143, 0, 0, 0, 143, 0, 143, 0, + 0, 0, 0, 0, 143, 143, 0, 0, 0, 0, + 0, 0, 57, 24, 0, 25, 0, 0, 26, 256, + 0, 0, 0, 27, 62, 63, 0, 28, 0, 143, + 143, 143, 143, 65, 0, 0, 30, 0, 0, 0, + 0, 0, 0, 32, 0, 31, 0, 0, 33, 0, + 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 0, 37, 75, 31, 0, + 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, + 257, 31, 41, 0, 0, 0, 31, 0, 0, 0, + 0, 31, 0, 31, 31, 31, 31, 0, 0, 31, + 0, 31, 0, 0, 0, 31, 0, 90, 91, 92, + 258, 663, 0, 0, 0, 0, 0, 31, 0, 96, + 31, 0, 31, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, + 104, 105, 0, 0, 0, 0, 31, 0, 0, 0, + 0, 0, 31, 31, 0, 0, 0, 0, 0, 0, + 706, 0, 706, 0, 706, 106, 260, 706, 109, 706, + 706, 0, 706, 0, 706, 0, 706, 0, 706, 706, + 706, 0, 0, 0, 706, 706, 0, 0, 0, 0, + 706, 0, 706, 706, 0, 0, 0, 706, 0, 0, + 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 706, 706, 0, 706, 0, 0, 0, 706, + 706, 0, 0, 0, 0, 0, 0, 706, 706, 57, + 24, 706, 25, 0, 706, 26, 256, 0, 0, 706, + 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, + 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 32, 706, 706, 0, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 257, 0, 41, + 0, 0, 85, 0, 0, 0, 0, 0, 0, 24, + 0, 25, 0, 0, 26, 706, 1318, 0, 0, 27, + 0, 0, 0, 28, 90, 91, 92, 258, 259, 0, + 0, 0, 30, 705, 0, 705, 96, 0, 705, 32, + 705, 705, 0, 705, 33, 705, 1319, 705, 34, 705, + 705, 705, 0, 0, 0, 705, 705, 0, 0, 0, + 36, 705, 37, 705, 705, 0, 38, 1320, 705, 0, + 0, 0, 705, 0, 39, 40, 0, 0, 41, 0, + 0, 327, 106, 260, 705, 0, 705, 0, 0, 0, + 705, 705, 0, 0, 0, 0, 0, 0, 705, 705, + 0, 705, 705, 705, 0, 705, 705, 0, 705, 705, + 705, 705, 0, 705, 0, 705, 0, 705, 705, 705, + 0, 0, 0, 705, 705, 0, 0, 0, 0, 705, + 0, 705, 705, 0, 0, 0, 705, 0, 0, 0, + 705, 0, 0, 0, 0, 705, 0, 0, 0, 0, + 0, 0, 705, 0, 705, 0, 0, 0, 705, 705, + 0, 0, 374, 0, 0, 0, 705, 705, 0, 0, + 705, 0, 0, 705, 0, 24, 0, 25, 705, 0, + 26, 0, 0, 1381, 0, 27, 705, 739, 0, 28, + 0, 740, 1382, 1383, 0, 0, 0, 1384, 30, 0, + 0, 0, 0, 1385, 0, 32, 0, 24, 0, 25, + 33, 0, 26, 0, 34, 1381, 0, 27, 0, 739, + 0, 28, 0, 740, 1382, 1383, 36, 0, 37, 1384, + 30, 0, 38, 0, 0, 1385, 0, 32, 0, 0, + 39, 40, 33, 0, 41, 0, 34, 1386, 0, 0, + 0, 51, 1387, 51, 705, 0, 51, 0, 36, 0, + 37, 51, 0, 0, 38, 51, 0, 0, 0, 0, + 0, 0, 39, 40, 51, 0, 41, 0, 0, 1386, + 0, 51, 0, 51, 1387, 51, 51, 1388, 51, 0, + 51, 0, 51, 51, 51, 0, 0, 51, 0, 51, + 0, 0, 51, 0, 51, 0, 51, 0, 51, 0, + 0, 51, 0, 51, 0, 0, 51, 51, 51, 0, + 51, 0, 51, 51, 51, 0, 51, 24, 1389, 25, + 0, 51, 26, 0, 51, 0, 51, 27, 0, 0, + 51, 28, 0, 51, 0, 0, 0, 0, 51, 51, + 30, 0, 51, 0, 0, 51, 0, 32, 162, 0, + 1389, 0, 33, 0, 0, 0, 34, 0, 598, 0, + 0, 0, 0, 0, 0, 599, 0, 0, 36, 0, + 37, 0, 0, 0, 38, 0, 0, 600, 162, 0, + 0, 0, 39, 40, 0, 0, 41, 0, 52, 601, + 52, 0, 0, 52, 51, 0, 0, 0, 52, 0, + 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, + 0, 52, 0, 0, 0, 602, 0, 0, 52, 0, + 51, 0, 51, 52, 0, 51, 51, 52, 0, 52, + 51, 52, 0, 0, 51, 0, 52, 0, 0, 52, + 0, 52, 0, 51, 0, 52, 0, 0, 52, 0, + 51, 0, 0, 52, 52, 51, 0, 52, 0, 51, + 52, 51, 0, 51, 0, 0, 0, 0, 51, 0, + 603, 51, 0, 51, 0, 0, 0, 51, 0, 0, + 51, 0, 0, 0, 0, 51, 51, 0, 0, 51, + 0, 24, 51, 25, 0, 0, 26, 0, 0, 0, + 0, 27, 0, 0, 0, 28, 0, 0, 0, 29, + 0, 0, 0, 0, 30, 183, 0, 183, 0, 31, + 183, 32, 0, 0, 0, 183, 33, 0, 0, 183, + 34, 35, 0, 0, 0, 0, 0, 0, 183, 0, + 0, 52, 36, 0, 37, 183, 0, 0, 38, 0, + 183, 0, 0, 0, 183, 0, 39, 40, 0, 0, + 41, 0, 0, 42, 0, 182, 183, 182, 183, 0, + 182, 0, 183, 51, 0, 182, 0, 0, 0, 182, + 183, 183, 0, 0, 183, 0, 0, 183, 182, 192, + 0, 192, 0, 0, 192, 182, 0, 0, 0, 192, + 182, 0, 0, 192, 182, 0, 0, 0, 0, 0, + 0, 0, 192, 0, 0, 0, 182, 0, 182, 192, + 0, 0, 182, 0, 192, 0, 0, 0, 192, 0, + 182, 182, 0, 0, 182, 0, 37, 182, 0, 0, + 192, 0, 192, 0, 43, 0, 192, 37, 0, 0, + 0, 0, 37, 0, 192, 192, 37, 0, 192, 37, + 0, 192, 0, 0, 0, 0, 0, 0, 183, 0, + 0, 37, 37, 0, 0, 0, 37, 37, 0, 35, 0, 0, 37, 0, 37, 37, 37, 37, 0, 0, - 291, 0, 37, 0, 0, 0, 37, 0, 37, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, - 37, 37, 35, 37, 0, 0, 0, 37, 0, 0, - 0, 0, 0, 35, 0, 0, 42, 0, 35, 0, - 0, 0, 35, 0, 0, 35, 0, 37, 0, 0, - 0, 0, 0, 37, 37, 325, 0, 35, 35, 0, - 0, 0, 35, 35, 31, 0, 31, 0, 35, 0, - 35, 35, 35, 35, 0, 0, 0, 0, 35, 0, - 0, 0, 35, 0, 35, 0, 0, 31, 0, 0, - 0, 0, 0, 0, 35, 0, 0, 35, 0, 35, - 31, 0, 0, 35, 0, 31, 0, 0, 0, 0, - 31, 0, 31, 31, 31, 31, 0, 0, 0, 0, - 31, 0, 0, 35, 31, 0, 0, 51, 0, 35, - 35, 0, 0, 0, 0, 0, 31, 0, 51, 31, - 0, 31, 0, 51, 0, 0, 0, 51, 0, 0, - 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 51, 51, 0, 31, 0, 51, 51, 0, - 51, 31, 31, 51, 0, 51, 51, 51, 51, 0, - 0, 51, 0, 51, 0, 0, 51, 51, 0, 51, - 51, 0, 0, 51, 0, 0, 0, 0, 0, 51, - 0, 0, 51, 0, 51, 51, 51, 0, 51, 0, - 51, 51, 51, 0, 0, 0, 51, 0, 51, 51, - 51, 51, 0, 0, 0, 0, 51, 0, 51, 0, - 51, 0, 51, 0, 39, 51, 0, 0, 0, 0, - 0, 0, 51, 0, 0, 51, 0, 51, 51, 0, - 51, 51, 0, 51, 0, 0, 0, 0, 51, 0, - 51, 51, 51, 51, 0, 0, 0, 0, 51, 0, - 0, 51, 51, 51, 0, 0, 0, 40, 0, 0, - 0, 0, 0, 0, 51, 0, 51, 51, 51, 51, + 35, 0, 37, 0, 0, 35, 37, 0, 37, 35, + 0, 0, 35, 0, 0, 0, 0, 0, 37, 0, + 37, 37, 0, 37, 35, 35, 0, 37, 182, 35, + 35, 0, 31, 0, 31, 35, 0, 35, 35, 35, + 35, 0, 0, 0, 0, 35, 0, 37, 0, 35, + 0, 35, 192, 37, 37, 31, 0, 0, 0, 0, + 0, 35, 0, 0, 35, 0, 35, 0, 31, 0, + 35, 0, 0, 31, 0, 51, 0, 0, 31, 0, + 31, 31, 31, 31, 0, 0, 51, 0, 31, 0, + 35, 51, 31, 0, 0, 51, 35, 35, 51, 0, + 0, 0, 0, 0, 31, 0, 0, 31, 0, 31, + 51, 51, 0, 0, 0, 51, 51, 0, 51, 0, + 0, 51, 0, 51, 51, 51, 51, 0, 0, 51, + 0, 51, 0, 31, 51, 51, 0, 51, 51, 31, + 31, 51, 0, 0, 0, 0, 0, 51, 0, 0, + 51, 0, 51, 51, 51, 0, 51, 0, 51, 51, + 51, 0, 0, 0, 51, 0, 51, 51, 51, 51, + 0, 0, 0, 0, 51, 0, 51, 0, 51, 0, + 51, 0, 39, 51, 0, 0, 0, 0, 0, 0, + 51, 0, 0, 51, 0, 51, 51, 0, 51, 51, 0, 51, 0, 0, 0, 0, 51, 0, 51, 51, - 51, 51, 0, 0, 0, 0, 51, 0, 0, 0, - 51, 51, 0, 51, 0, 51, 51, 0, 0, 204, - 0, 0, 51, 0, 51, 51, 51, 51, 51, 51, + 51, 51, 0, 0, 0, 0, 51, 0, 0, 51, + 51, 51, 0, 0, 0, 40, 0, 0, 0, 0, + 0, 0, 51, 0, 51, 51, 51, 51, 0, 51, 0, 0, 0, 0, 51, 0, 51, 51, 51, 51, - 0, 0, 51, 0, 51, 0, 0, 0, 51, 51, - 0, 51, 0, 51, 51, 0, 0, 206, 0, 0, - 51, 0, 51, 51, 51, 51, 0, 51, 0, 0, + 0, 0, 0, 0, 51, 0, 0, 0, 51, 51, + 0, 51, 0, 51, 51, 0, 0, 204, 0, 0, + 51, 0, 51, 51, 51, 51, 51, 51, 0, 0, 0, 0, 51, 0, 51, 51, 51, 51, 0, 0, - 0, 0, 51, 0, 0, 0, 51, 51, 0, 51, - 0, 0, 0, 0, 51, 308, 51, 0, 51, 0, - 51, 51, 0, 51, 0, 51, 0, 0, 0, 0, - 51, 0, 51, 51, 51, 51, 0, 51, 0, 0, - 51, 0, 0, 0, 51, 0, 0, 51, 0, 0, - 51, 0, 0, 309, 465, 51, 51, 0, 0, 51, - 51, 51, 51, 51, 51, 51, 0, 0, 51, 0, - 51, 0, 0, 0, 51, 0, 0, 466, 0, 0, - 0, 0, 0, 0, 0, 51, 51, 51, 51, 51, - 467, 51, 0, 0, 0, 469, 0, 0, 0, 0, - 470, 0, 471, 472, 473, 474, 0, 0, 0, 0, - 475, 0, 0, 0, 476, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 477, 0, 0, 478, - 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 480, + 51, 0, 51, 0, 0, 0, 51, 51, 0, 51, + 0, 51, 51, 0, 0, 206, 0, 0, 51, 0, + 51, 51, 51, 51, 51, 51, 0, 0, 0, 0, + 51, 0, 51, 51, 51, 51, 0, 0, 0, 0, + 51, 0, 0, 0, 51, 51, 0, 51, 0, 0, + 0, 0, 471, 308, 0, 0, 51, 0, 51, 51, + 0, 51, 0, 51, 0, 0, 0, 0, 51, 0, + 51, 51, 51, 51, 0, 472, 51, 0, 51, 0, + 0, 0, 51, 0, 471, 51, 0, 0, 473, 0, + 0, 309, 474, 475, 51, 0, 0, 51, 476, 51, + 477, 478, 479, 480, 0, 0, 0, 472, 481, 0, + 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, + 473, 0, 0, 51, 483, 475, 0, 484, 0, 485, + 476, 0, 477, 478, 479, 480, 0, 0, 0, 0, + 481, 0, 0, 0, 482, 0, 0, 0, 0, 0, + 0, 0, 0, 486, 0, 0, 483, 0, 0, 484, + 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 486, }; protected static readonly short [] yyCheck = { 17, - 17, 299, 18, 17, 4, 529, 17, 87, 88, 51, - 189, 300, 51, 234, 531, 188, 247, 232, 6, 289, - 482, 68, 84, 323, 344, 59, 298, 20, 108, 298, - 157, 504, 334, 383, 59, 582, 575, 983, 296, 47, - 87, 88, 1163, 0, 593, 92, 77, 58, 761, 791, - 763, 113, 367, 115, 256, 73, 1199, 1200, 256, 77, - 256, 330, 1293, 602, 367, 112, 0, 113, 79, 115, - 81, 256, 256, 17, 17, 256, 256, 95, 256, 256, - 1311, 256, 268, 268, 17, 268, 294, 256, 325, 376, - 276, 256, 256, 1196, 256, 1508, 1509, 256, 306, 812, - 256, 256, 815, 988, 371, 1248, 374, 372, 256, 272, - 256, 256, 368, 341, 391, 257, 357, 680, 256, 199, - 200, 1243, 685, 686, 256, 172, 401, 17, 369, 268, - 256, 372, 373, 296, 191, 394, 395, 414, 413, 157, - 157, 369, 429, 157, 256, 386, 157, 189, 416, 1252, - 189, 382, 1565, 420, 423, 256, 705, 256, 17, 340, - 323, 339, 418, 17, 429, 367, 344, 369, 346, 371, - 282, 349, 350, 371, 352, 353, 372, 363, 374, 17, - 421, 418, 262, 367, 339, 368, 363, 371, 363, 344, - 232, 346, 256, 232, 349, 350, 374, 352, 353, 246, - 247, 370, 314, 367, 17, 374, 0, 371, 288, 371, - 418, 17, 259, 157, 157, 223, 17, 343, 420, 374, - 17, 423, 420, 525, 157, 381, 447, 256, 308, 247, - 528, 446, 418, 429, 1119, 253, 420, 422, 418, 422, - 228, 418, 374, 418, 547, 1367, 59, 764, 1479, 296, - 63, 429, 286, 418, 569, 575, 420, 358, 420, 418, - 322, 286, 296, 17, 326, 391, 569, 157, 325, 331, - 418, 289, 418, 418, 429, 1506, 294, 295, 825, 256, - 418, 328, 602, 422, 364, 331, 333, 1518, 414, 1520, - 593, 309, 391, 277, 319, 1270, 256, 256, 157, 317, - 257, 319, 428, 157, 1158, 323, 418, 318, 256, 256, - 256, 368, 376, 368, 358, 414, 373, 335, 336, 157, - 400, 401, 256, 424, 425, 426, 427, 344, 375, 256, - 344, 378, 1045, 256, 363, 382, 383, 256, 256, 256, - 371, 370, 256, 372, 157, 374, 256, 910, 428, 429, - 1092, 157, 1473, 371, 256, 256, 157, 256, 256, 263, - 157, 256, 21, 418, 382, 383, 915, 335, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 363, - 256, 428, 429, 946, 256, 432, 256, 305, 1363, 418, - 367, 706, 256, 52, 1369, 452, 1539, 335, 256, 376, - 418, 256, 705, 157, 446, 339, 1352, 446, 367, 368, - 369, 315, 371, 372, 456, 374, 376, 376, 257, 256, - 256, 1396, 20, 726, 372, 371, 1569, 990, 375, 992, - 487, 948, 995, 367, 418, 419, 418, 371, 256, 373, - 374, 375, 376, 325, 256, 453, 454, 381, 375, 749, - 367, 459, 375, 256, 927, 448, 503, 496, 505, 418, - 1173, 420, 381, 257, 423, 375, 368, 381, 1181, 462, - 266, 372, 374, 286, 958, 374, 374, 372, 272, 504, - 256, 702, 529, 277, 305, 363, 497, 281, 262, 87, - 88, 429, 1205, 343, 368, 305, 372, 369, 266, 369, - 547, 368, 296, 734, 551, 369, 319, 857, 766, 527, - 108, 529, 363, 531, 372, 351, 294, 372, 314, 1082, - 741, 1084, 1039, 1086, 298, 840, 1073, 256, 306, 323, - 256, 344, 543, 544, 591, 372, 418, 840, 341, 557, - 418, 391, 256, 363, 562, 592, 314, 1260, 342, 606, - 264, 369, 609, 610, 547, 429, 1410, 369, 575, 376, - 571, 575, 429, 339, 414, 277, 369, 418, 344, 281, - 346, 582, 372, 349, 350, 368, 352, 353, 428, 375, - 367, 1065, 368, 1067, 371, 602, 1440, 1441, 602, 1443, - 376, 373, 369, 368, 376, 1142, 614, 615, 418, 914, - 1454, 199, 200, 1457, 378, 379, 372, 375, 428, 372, - 339, 325, 915, 343, 912, 344, 363, 346, 1472, 368, - 349, 350, 1185, 352, 353, 368, 376, 256, 363, 429, - 342, 372, 863, 420, 294, 682, 429, 684, 1177, 696, - 942, 367, 1496, 429, 343, 371, 693, 373, 374, 776, - 376, 381, 1215, 429, 429, 381, 363, 256, 371, 716, - 1276, 391, 680, 429, 262, 294, 429, 685, 686, 263, - 688, 418, 363, 363, 256, 947, 945, 418, 369, 369, - 429, 428, 381, 418, 414, 367, 429, 734, 1276, 415, - 288, 504, 391, 357, 983, 374, 272, 357, 428, 1262, - 429, 369, 300, 363, 751, 373, 1322, 1276, 1276, 369, - 308, 418, 372, 373, 272, 414, 734, 797, 1281, 766, - 296, 315, 386, 305, 1275, 1276, 386, 418, 418, 428, - 368, 749, 766, 1206, 1322, 1276, 374, 416, 296, 727, - 820, 803, 1042, 381, 256, 1296, 764, 323, 1276, 1276, - 1276, 369, 770, 1322, 1322, 423, 836, 1055, 418, 806, - 391, 421, 575, 381, 1372, 323, 364, 269, 367, 367, - 339, 1322, 371, 1324, 373, 374, 1007, 376, 1386, 256, - 339, 1322, 381, 414, 286, 339, 398, 399, 799, 602, - 357, 256, 839, 1040, 1322, 1322, 1322, 428, 367, 817, - 1408, 819, 400, 401, 269, 386, 373, 371, 367, 373, - 857, 829, 823, 367, 825, 1135, 863, 376, 368, 386, - 371, 286, 1069, 1358, 374, 381, 999, 339, 392, 393, - 428, 429, 344, 1368, 346, 391, 916, 349, 350, 857, - 352, 353, 1358, 384, 306, 863, 888, 865, 412, 867, - 448, 313, 1368, 368, 368, 369, 420, 1177, 414, 423, - 1130, 376, 339, 325, 462, 1163, 389, 344, 256, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 919, 367, 306, 372, 308, 374, 357, 376, 385, 313, - 376, 368, 910, 370, 912, 372, 1166, 374, 375, 376, - 957, 325, 373, 272, 897, 952, 373, 954, 277, 376, - 6, 929, 281, 960, 902, 386, 934, 429, 357, 937, - 367, 17, 400, 1243, 1386, 1156, 256, 296, 946, 376, - 948, 367, 1012, 1203, 373, 371, 306, 373, 374, 986, - 376, 368, 369, 313, 1461, 381, 367, 386, 761, 547, - 763, 339, 429, 390, 323, 376, 344, 367, 346, 367, - 1007, 349, 350, 59, 352, 353, 376, 63, 376, 382, - 383, 569, 990, 342, 992, 373, 1023, 995, 376, 415, - 369, 1332, 1029, 396, 397, 368, 256, 367, 368, 1007, - 1341, 87, 88, 376, 369, 593, 376, 372, 256, 812, - 368, 1222, 815, 1218, 372, 371, 1523, 1064, 376, 339, - 415, 1004, 108, 1283, 344, 1194, 346, 414, 415, 349, - 350, 1039, 352, 353, 1042, 418, 1014, 368, 1016, 1332, - 1018, 367, 368, 374, 418, 376, 357, 374, 1341, 376, - 376, 429, 363, 1560, 381, 256, 370, 1367, 369, 368, - 374, 372, 373, 374, 277, 374, 370, 371, 1582, 1583, - 374, 157, 1073, 1352, 1082, 386, 1084, 376, 1086, 339, - 371, 1089, 373, 370, 344, 372, 346, 374, 376, 349, - 350, 339, 352, 353, 367, 370, 344, 372, 346, 374, - 256, 349, 350, 373, 352, 353, 371, 418, 373, 429, - 1100, 370, 368, 199, 200, 374, 372, 705, 374, 1156, - 376, 370, 1130, 370, 376, 374, 368, 374, 1135, 1158, - 372, 1135, 374, 367, 376, 369, 1144, 1145, 726, 370, - 371, 1142, 373, 374, 375, 372, 370, 256, 1156, 376, - 374, 1157, 372, 372, 376, 1163, 376, 376, 1166, 370, - 354, 355, 1194, 374, 1196, 1194, 294, 1196, 372, 429, - 1177, 294, 376, 1177, 354, 355, 262, 1185, 406, 407, - 408, 409, 372, 1191, 374, 1473, 1218, 364, 365, 1218, - 386, 387, 388, 343, 372, 1203, 374, 370, 372, 372, - 286, 376, 288, 374, 1274, 376, 414, 1215, 1216, 797, - 370, 418, 372, 368, 300, 372, 371, 374, 373, 374, - 1252, 356, 308, 1252, 375, 370, 381, 372, 370, 372, - 372, 374, 820, 319, 372, 373, 1243, 392, 393, 1243, - 364, 365, 1045, 1275, 1276, 370, 1275, 372, 836, 370, - 418, 372, 840, 418, 1262, 1161, 1162, 412, 344, 369, - 374, 1331, 376, 376, 1296, 420, 372, 1296, 423, 374, - 374, 376, 376, 1281, 374, 1283, 376, 372, 364, 1349, - 1350, 367, 402, 403, 381, 404, 405, 368, 1325, 374, - 1322, 294, 1324, 410, 411, 1324, 372, 294, 372, 374, - 372, 374, 372, 256, 1374, 376, 428, 1377, 371, 897, - 1357, 256, 428, 368, 400, 401, 371, 294, 373, 374, - 294, 381, 372, 374, 373, 418, 374, 915, 916, 375, - 373, 372, 1135, 429, 1335, 374, 1383, 392, 393, 381, - 93, 374, 428, 429, 97, 98, 99, 100, 101, 102, - 103, 104, 374, 1400, 374, 423, 372, 412, 367, 374, - 1367, 374, 421, 1367, 372, 420, 373, 372, 423, 294, - 1173, 1418, 343, 1420, 1177, 374, 294, 370, 1181, 374, - 418, 1410, 371, 418, 367, 375, 256, 256, 374, 256, - 1391, 256, 280, 381, 256, 983, 256, 367, 371, 368, - 372, 343, 1205, 265, 370, 267, 374, 372, 270, 376, - 374, 1440, 1441, 275, 1443, 376, 1004, 279, 504, 1451, - 370, 372, 423, 372, 1012, 1454, 288, 381, 1457, 367, - 347, 256, 256, 295, 381, 381, 1468, 372, 300, 372, - 1243, 368, 304, 1472, 376, 256, 347, 370, 374, 1481, - 1482, 375, 372, 1461, 316, 370, 318, 1260, 1459, 367, - 322, 547, 339, 370, 348, 1473, 368, 1496, 330, 331, - 381, 374, 334, 372, 418, 337, 1508, 1509, 418, 256, - 348, 368, 1490, 569, 367, 367, 367, 381, 368, 575, - 376, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 363, 356, 376, 368, 61, 372, 593, 256, 65, - 66, 67, 371, 69, 70, 1523, 602, 374, 74, 75, - 368, 368, 337, 305, 369, 81, 418, 83, 371, 85, - 368, 367, 371, 1565, 90, 91, 376, 371, 371, 418, - 418, 373, 418, 371, 381, 1582, 1583, 367, 371, 302, - 381, 369, 1560, 372, 371, 256, 418, 373, 114, 372, - 374, 373, 418, 372, 1367, 1566, 1567, 374, 374, 374, - 372, 370, 1573, 1574, 1582, 1583, 376, 418, 376, 376, - 372, 334, 376, 418, 372, 381, 372, 368, 418, 342, - 0, 339, 381, 372, 370, 368, 344, 367, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 1197, - 315, 263, 371, 371, 368, 372, 372, 0, 0, 705, - 368, 367, 370, 368, 372, 376, 374, 375, 376, 376, - 372, 0, 368, 372, 372, 418, 370, 368, 368, 372, - 726, 367, 390, 372, 397, 398, 399, 370, 376, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 368, 1254, 376, 418, 418, - 372, 256, 376, 368, 368, 761, 376, 763, 367, 367, - 265, 429, 267, 0, 368, 270, 1274, 372, 368, 372, - 275, 367, 315, 263, 279, 376, 373, 376, 376, 255, - 50, 376, 258, 288, 376, 376, 376, 376, 376, 12, - 295, 797, 5, 897, 1004, 300, 1156, 1156, 1324, 304, - 1296, 1513, 1476, 1529, 1493, 1459, 812, 919, 1464, 815, - 919, 316, 919, 318, 820, 914, 740, 322, 1372, 1574, - 1322, 1392, 298, 1331, 1332, 330, 331, 1568, 1486, 334, - 836, 261, 337, 1341, 840, 1482, 1252, 1481, 314, 1420, - 547, 1349, 1350, 1567, 1352, 1254, 942, 937, 770, 863, - 1358, 615, 525, 888, 284, 382, 734, 1055, 337, 71, - 1368, 766, 412, 414, 1372, 413, 1374, 297, 415, 1377, - 416, 301, 302, 417, 569, 840, 1232, 307, 1386, 309, - 310, 311, 312, 1331, 157, 1135, 1041, 317, 1121, 1145, - 1025, 321, 1069, 0, 1133, 1206, 962, 1135, 545, 437, - 1408, 437, 1216, 333, 1327, 894, 336, 893, 338, 915, - 916, -1, -1, 418, -1, -1, 691, -1, -1, -1, - -1, -1, -1, -1, -1, 598, 256, 257, -1, -1, - -1, -1, 362, -1, 264, 265, 266, 267, 268, -1, - 270, 271, -1, 273, 274, 275, 276, 277, 278, 279, - 280, -1, -1, -1, -1, 285, -1, 287, 288, 289, - 290, 291, 292, -1, -1, 295, -1, -1, -1, 299, - 300, -1, 302, 303, 304, -1, -1, 983, -1, -1, - -1, -1, -1, -1, 314, -1, 316, -1, 318, 319, - -1, -1, 322, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 1012, 337, -1, -1, - 340, 341, -1, -1, 344, 345, -1, -1, -1, 256, - -1, -1, -1, 499, -1, 262, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, -1, 367, 368, 1045, - -1, 371, -1, -1, -1, -1, 376, 377, 378, 379, - 380, -1, -1, 0, 384, -1, 386, -1, -1, -1, - -1, 298, 392, 393, -1, -1, -1, 543, -1, -1, + 4, 302, 18, 303, 234, 17, 17, 540, 190, 236, + 52, 292, 488, 189, 538, 17, 510, 52, 326, 6, + 350, 69, 85, 20, 60, 301, 301, 587, 1001, 158, + 337, 594, 249, 389, 605, 78, 1183, 805, 1222, 299, + 88, 89, 0, 256, 114, 93, 116, 256, 59, 256, + 1325, 114, 256, 116, 614, 268, 74, 774, 333, 776, + 78, 60, 1216, 45, 17, 113, 48, 373, 1343, 80, + 256, 82, 17, 88, 89, 256, 256, 1261, 96, 256, + 1300, 256, 373, 256, 256, 256, 1006, 256, 368, 17, + 256, 0, 1276, 256, 109, 335, 376, 17, 62, 17, + 268, 256, 66, 67, 68, 256, 70, 71, 256, 294, + 827, 75, 76, 830, 256, 268, 263, 269, 82, 374, + 84, 306, 86, 256, 256, 173, 1280, 91, 92, 256, + 1058, 372, 368, 357, 286, 256, 343, 256, 374, 305, + 158, 17, 713, 264, 367, 256, 158, 158, 190, 429, + 282, 115, 368, 376, 429, 190, 158, 256, 358, 339, + 1088, 416, 386, 372, 344, 374, 346, 192, 315, 349, + 350, 388, 352, 353, 256, 1395, 17, 363, 256, 0, + 1400, 17, 314, 17, 391, 200, 201, 391, 429, 429, + 371, 363, 234, 429, 374, 256, 371, 256, 17, 234, + 248, 249, 418, 277, 325, 158, 256, 414, 381, 422, + 414, 693, 381, 158, 262, 368, 698, 699, 1138, 374, + 429, 428, 452, 17, 60, 367, 453, 534, 64, 371, + 158, 249, 418, 418, 1509, 1455, 537, 255, 158, 420, + 158, 418, 224, 230, 777, 420, 418, 418, 367, 429, + 265, 299, 371, 289, 422, 418, 367, 587, 369, 358, + 371, 1536, 325, 299, 334, 556, 329, 418, 17, 422, + 418, 334, 578, 1548, 292, 1550, 291, 840, 420, 297, + 298, 256, 158, 331, 614, 418, 418, 578, 336, 363, + 289, 418, 374, 257, 312, 256, 311, 261, 376, 257, + 348, 420, 320, 328, 322, 268, 367, 256, 326, 420, + 321, 257, 423, 276, 605, 376, 375, 158, 256, 1178, + 338, 339, 158, 322, 158, 424, 425, 426, 427, 344, + 345, 381, 256, 381, 377, 20, 384, 301, 350, 158, + 388, 389, 325, 1111, 418, 419, 1063, 256, 350, 374, + 256, 368, 256, 317, 379, 370, 1503, 262, 1217, 377, + 931, 292, 21, 256, 158, 256, 256, 256, 335, 277, + 388, 389, 256, 281, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 1569, 434, 435, 363, 256, + 438, 406, 407, 298, 53, 370, 256, 372, 369, 374, + 363, 418, 373, 88, 89, 257, 424, 256, 714, 158, + 452, 1384, 256, 256, 375, 1599, 256, 452, 256, 434, + 435, 463, 713, 256, 109, 256, 256, 376, 463, 256, + 339, 964, 256, 458, 342, 418, 257, 375, 256, 256, + 371, 263, 256, 418, 926, 418, 370, 340, 739, 943, + 374, 272, 423, 289, 762, 418, 277, 454, 367, 976, + 281, 509, 371, 511, 373, 374, 375, 376, 493, 375, + 374, 468, 381, 378, 379, 296, 1193, 459, 460, 368, + 962, 372, 372, 465, 1201, 374, 322, 292, 372, 420, + 538, 351, 503, 315, 721, 266, 339, 341, 1180, 325, + 368, 344, 323, 346, 305, 372, 349, 350, 556, 352, + 353, 510, 560, 1230, 350, 200, 201, 873, 536, 779, + 538, 342, 540, 372, 1057, 369, 1008, 754, 1010, 1092, + 747, 1013, 372, 368, 372, 363, 367, 1219, 371, 369, + 367, 505, 553, 314, 371, 369, 373, 374, 566, 376, + 856, 369, 369, 571, 381, 369, 604, 266, 583, 556, + 372, 429, 367, 368, 401, 856, 391, 1084, 343, 1086, + 339, 582, 368, 1290, 363, 587, 413, 368, 603, 363, + 265, 1440, 256, 594, 343, 587, 429, 370, 552, 414, + 418, 374, 418, 618, 429, 368, 621, 622, 367, 1162, + 428, 305, 614, 368, 375, 314, 291, 1307, 626, 627, + 1469, 1470, 614, 1472, 372, 256, 391, 429, 303, 1101, + 294, 1103, 381, 1105, 930, 1484, 311, 928, 1487, 418, + 1306, 1307, 391, 429, 418, 368, 363, 1197, 429, 414, + 931, 374, 256, 1502, 428, 1538, 1539, 695, 381, 697, + 256, 958, 1328, 428, 1354, 414, 429, 372, 706, 344, + 345, 790, 879, 363, 429, 363, 375, 1526, 371, 428, + 294, 429, 371, 363, 510, 693, 375, 357, 1354, 369, + 698, 699, 306, 701, 709, 370, 961, 963, 373, 369, + 371, 418, 372, 373, 376, 272, 429, 256, 339, 747, + 1376, 1001, 1595, 344, 729, 346, 386, 363, 349, 350, + 343, 352, 353, 369, 429, 256, 764, 420, 418, 296, + 418, 406, 407, 1205, 1307, 339, 341, 1307, 418, 747, + 344, 779, 346, 374, 369, 349, 350, 1231, 352, 353, + 372, 421, 1403, 779, 762, 1307, 323, 429, 381, 434, + 435, 587, 1060, 740, 369, 818, 1417, 1239, 391, 777, + 256, 367, 418, 374, 305, 371, 784, 373, 374, 454, + 376, 1354, 1073, 821, 1354, 381, 1307, 1438, 614, 1303, + 339, 414, 272, 468, 339, 344, 418, 346, 429, 272, + 349, 350, 1354, 352, 353, 428, 811, 1307, 256, 391, + 1307, 812, 1307, 814, 256, 416, 296, 855, 1025, 415, + 1292, 339, 367, 296, 832, 429, 834, 269, 376, 367, + 835, 376, 414, 1354, 1154, 873, 844, 838, 376, 840, + 1312, 879, 339, 323, 286, 306, 428, 852, 1366, 367, + 323, 1017, 313, 339, 1354, 1373, 810, 1354, 344, 1354, + 346, 339, 381, 349, 350, 873, 352, 353, 394, 395, + 367, 879, 391, 881, 371, 883, 908, 1197, 1149, 339, + 429, 556, 370, 908, 367, 272, 374, 369, 367, 367, + 277, 339, 1183, 376, 281, 414, 344, 375, 346, 381, + 256, 349, 350, 578, 352, 353, 306, 367, 308, 296, + 367, 368, 367, 313, 376, 1186, 368, 357, 926, 376, + 928, 376, 374, 357, 6, 325, 913, 932, 371, 381, + 605, 969, 368, 373, 972, 17, 323, 945, 374, 373, + 978, 918, 950, 429, 367, 953, 386, 357, 774, 386, + 776, 1417, 386, 376, 962, 342, 964, 1228, 306, 967, + 975, 367, 368, 373, 1390, 313, 1004, 371, 1491, 1176, + 376, 1291, 368, 1399, 389, 1390, 386, 325, 60, 368, + 376, 429, 64, 339, 1399, 374, 369, 1025, 344, 372, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 1008, 827, 1010, 1041, 830, 1013, 88, 89, 373, 1047, + 384, 376, 368, 256, 370, 368, 372, 1025, 374, 375, + 376, 374, 1242, 376, 370, 1030, 368, 109, 374, 1246, + 1553, 382, 383, 368, 376, 1022, 368, 372, 713, 374, + 372, 376, 1214, 1314, 376, 396, 397, 373, 385, 1057, + 376, 265, 1060, 267, 256, 1032, 270, 1034, 371, 1036, + 373, 275, 370, 371, 739, 279, 374, 1590, 1083, 373, + 400, 368, 376, 429, 288, 372, 158, 374, 390, 376, + 374, 295, 376, 256, 370, 1366, 300, 381, 374, 369, + 304, 1092, 1373, 1101, 1384, 1103, 339, 1105, 1612, 1613, + 1108, 344, 316, 346, 318, 415, 349, 350, 322, 352, + 353, 372, 371, 374, 373, 376, 330, 331, 200, 201, + 334, 398, 399, 337, 371, 1119, 373, 418, 370, 371, + 370, 373, 374, 375, 374, 372, 811, 339, 1176, 376, + 418, 1149, 344, 277, 346, 392, 393, 349, 350, 363, + 352, 353, 1154, 373, 372, 372, 1164, 1165, 376, 376, + 835, 1162, 1154, 370, 367, 412, 369, 374, 1176, 367, + 370, 1177, 372, 420, 374, 1183, 423, 852, 1186, 368, + 369, 856, 1214, 265, 1216, 372, 429, 374, 370, 1214, + 372, 1216, 374, 376, 372, 1197, 376, 1205, 376, 256, + 386, 387, 388, 1211, 418, 1197, 372, 289, 374, 291, + 1242, 256, 1503, 412, 413, 414, 415, 1242, 357, 373, + 1228, 303, 256, 370, 363, 372, 374, 376, 376, 311, + 369, 1239, 1240, 372, 373, 374, 376, 1063, 913, 370, + 322, 372, 370, 294, 372, 367, 294, 386, 1280, 371, + 343, 373, 374, 372, 376, 1280, 931, 932, 294, 381, + 367, 368, 344, 345, 370, 1303, 372, 372, 350, 374, + 372, 0, 374, 376, 1306, 1307, 370, 414, 372, 418, + 418, 1306, 1307, 370, 1292, 372, 354, 355, 370, 1291, + 374, 373, 376, 415, 418, 1303, 1328, 356, 256, 1291, + 1305, 354, 355, 1328, 1312, 374, 1314, 376, 368, 369, + 367, 368, 369, 369, 371, 372, 374, 374, 376, 376, + 1358, 357, 1354, 418, 406, 407, 1001, 363, 1154, 1354, + 374, 372, 376, 369, 414, 415, 372, 373, 364, 365, + 372, 373, 367, 368, 1376, 364, 365, 1022, 410, 411, + 386, 1376, 434, 435, 375, 1030, 408, 409, 372, 376, + 1365, 418, 368, 420, 374, 381, 423, 1193, 1369, 416, + 417, 1197, 372, 294, 1389, 1201, 1381, 1382, 294, 429, + 374, 339, 418, 372, 372, 421, 344, 374, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 1414, + 1405, 372, 256, 1408, 1230, 428, 376, 371, 428, 256, + 368, 294, 370, 294, 372, 1430, 374, 375, 376, 381, + 372, 1422, 375, 374, 382, 383, 384, 385, 510, 373, + 373, 389, 390, 1448, 374, 1450, 394, 395, 396, 397, + 398, 399, 400, 401, 418, 381, 372, 374, 429, 1481, + 374, 374, 374, 372, 423, 413, 1481, 374, 367, 374, + 421, 372, 374, 373, 1290, 1291, 1498, 372, 343, 294, + 294, 429, 374, 1498, 556, 370, 418, 371, 367, 1511, + 1512, 418, 375, 1491, 256, 256, 1511, 1512, 1489, 374, + 256, 256, 280, 94, 381, 1503, 578, 98, 99, 100, + 101, 102, 103, 104, 105, 587, 1538, 1539, 261, 256, + 367, 372, 1520, 1538, 1539, 368, 343, 376, 370, 374, + 371, 370, 423, 605, 374, 381, 372, 256, 376, 372, + 372, 284, 614, 262, 372, 347, 367, 381, 256, 256, + 381, 376, 372, 1218, 297, 1553, 372, 368, 256, 302, + 347, 374, 370, 375, 307, 371, 309, 310, 311, 312, + 370, 292, 370, 1595, 317, 372, 339, 348, 321, 298, + 1595, 374, 368, 418, 1612, 1613, 256, 372, 371, 418, + 333, 372, 1590, 336, 348, 338, 368, 367, 367, 381, + 0, 376, 367, 356, 368, 1596, 1597, 374, 376, 368, + 368, 371, 1603, 1604, 1612, 1613, 305, 337, 1283, 362, + 339, 364, 365, 372, 372, 344, 368, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 418, 371, + 1305, 713, 369, 367, 363, 418, 371, 376, 367, 368, + 381, 370, 371, 372, 371, 374, 375, 376, 371, 378, + 379, 418, 373, 382, 383, 384, 385, 739, 418, 371, + 389, 390, 367, 372, 371, 394, 395, 396, 397, 398, + 399, 400, 401, 369, 371, 381, 374, 372, 256, 373, + 373, 372, 374, 285, 413, 374, 374, 416, 372, 418, + 1365, 1366, 774, 418, 776, 376, 370, 376, 1373, 418, + 429, 376, 418, 372, 305, 418, 1381, 1382, 376, 1384, + 372, 381, 372, 368, 381, 1390, 370, 368, 367, 372, + 315, 263, 368, 371, 1399, 327, 371, 0, 1403, 811, + 1405, 372, 372, 1408, 0, 367, 337, 376, 368, 376, + 0, 256, 1417, 372, 368, 827, 347, 372, 830, 367, + 372, 370, 418, 835, 368, 372, 368, 372, 367, 370, + 418, 0, 418, 1438, 368, 372, 376, 372, 376, 368, + 852, 315, 368, 376, 856, 377, 378, 379, 380, 376, + 382, 383, 384, 385, 386, 387, 388, 389, 367, 372, + 392, 393, 394, 395, 396, 397, 398, 399, 368, 372, + 376, 368, 403, 404, 405, 367, 263, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 373, 339, 376, 51, 376, 376, 344, + 376, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 376, 376, 376, 376, 256, 12, 5, 931, + 932, 261, 262, 368, 1022, 370, 1176, 372, 913, 374, + 375, 376, 1176, 1376, 1328, 1224, 368, 1543, 1506, 371, + 385, 373, 374, 1559, 284, 390, 1494, 1489, 1523, 381, + 753, 935, 1403, 1604, 1354, 400, 401, 297, 298, 935, + 392, 393, 302, 935, 1423, 305, 1342, 307, 413, 309, + 310, 311, 312, 930, 1512, 1516, 1598, 317, 1511, 1280, + 412, 321, 1597, 1450, 429, 325, 908, 1283, 420, 1001, + 556, 423, 953, 333, 784, 958, 336, 429, 338, 339, + 879, 1073, 388, 534, 344, 0, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 747, 1030, 627, + 72, 779, 362, 363, 340, 418, 420, 367, 368, 419, + 370, 371, 372, 373, 374, 375, 376, 421, 378, 379, + 422, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 1063, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 423, 1182, 416, 578, 418, 610, + 420, 1365, 1258, 423, 158, 1291, 856, 256, 257, 429, + 1059, 1154, 1140, 1088, 1165, 264, 265, 266, 267, 268, + 1043, 270, 271, 1154, 273, 274, 275, 276, 277, 278, + 279, 280, 1152, 1231, 554, 1200, 285, 980, 287, 288, + 289, 290, 291, 292, 443, 443, 295, 704, 1360, 1240, + 299, 300, 663, 302, 303, 304, -1, 903, -1, -1, + -1, 0, 1154, 910, -1, 314, -1, 316, -1, 318, + 319, -1, -1, 322, -1, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, -1, 337, -1, + -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, + -1, 1193, -1, -1, -1, 1197, -1, -1, -1, 1201, + 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, + -1, -1, 371, -1, 381, -1, 1218, 376, 377, 378, + 379, 380, -1, -1, -1, 384, -1, 386, 1230, -1, + -1, -1, -1, 392, 393, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, -1, -1, 368, + -1, -1, 371, -1, 373, 374, -1, -1, 417, 418, + 419, 420, 783, 422, -1, -1, -1, -1, -1, -1, + 429, -1, 257, 392, 393, -1, 261, 0, -1, -1, + -1, 1283, -1, -1, -1, -1, -1, 272, 1290, 1291, + -1, -1, 277, 412, -1, -1, 281, -1, -1, 284, + -1, 420, -1, 1305, 423, -1, -1, -1, -1, -1, + 429, 296, 297, -1, -1, -1, 301, 302, -1, -1, + -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, + -1, -1, 317, -1, -1, -1, 321, -1, 323, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 333, -1, + 335, 336, -1, 338, -1, -1, -1, 342, -1, -1, + -1, -1, -1, 1365, 1366, -1, -1, -1, -1, -1, + -1, 1373, -1, -1, -1, -1, -1, 362, -1, 1381, + 1382, -1, 1384, 368, 369, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 417, 418, 419, - 420, -1, 422, -1, -1, -1, 769, -1, -1, 429, - -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, -1, -1, -1, -1, -1, 363, -1, -1, 1135, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - -1, 378, 379, -1, -1, 382, 383, 384, 385, 386, - 257, -1, 389, 390, 261, -1, -1, 394, 395, 396, - 397, 398, 399, 400, 401, 272, -1, 1173, -1, -1, - 277, 1177, -1, -1, 281, 1181, 413, 284, -1, 416, - -1, 418, -1, 420, 256, -1, 423, -1, -1, 296, - 297, 1197, 429, -1, 301, 302, -1, -1, -1, 1205, - 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, - 317, -1, -1, -1, 321, -1, 323, -1, -1, -1, - -1, 0, -1, -1, -1, -1, 333, -1, 335, 336, - -1, 338, -1, -1, -1, 342, -1, 1243, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 1254, -1, - -1, -1, -1, -1, 1260, 362, -1, -1, -1, -1, - -1, 368, 369, -1, -1, -1, -1, 339, 1274, 942, - -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, - 372, -1, 374, 375, 376, -1, -1, -1, -1, 256, - -1, -1, 384, 385, 261, 262, -1, 389, 390, -1, - -1, -1, -1, -1, -1, 1331, 1332, -1, 400, 401, - -1, -1, -1, -1, -1, 1341, -1, 284, -1, -1, - -1, 413, -1, 1349, 1350, -1, 1352, 0, -1, -1, - 297, 298, -1, -1, -1, 302, -1, 429, 305, -1, - 307, 1367, 309, 310, 311, 312, -1, -1, 1374, -1, - 317, 1377, -1, -1, 321, -1, -1, -1, 325, -1, - -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, - -1, 338, 339, -1, -1, -1, -1, 344, -1, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, -1, 362, 363, -1, -1, -1, - 367, 368, -1, 370, 371, 372, 373, 374, 375, 376, - -1, 378, 379, -1, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 390, -1, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, -1, -1, 416, - -1, 418, -1, 420, -1, -1, 423, 256, 257, -1, - -1, -1, 429, -1, -1, 264, 265, 266, 267, 268, + -1, -1, -1, 1405, -1, -1, 1408, 256, 257, -1, + -1, -1, -1, -1, -1, 264, 265, 266, 267, 268, -1, 270, 271, 0, 273, 274, 275, 276, 277, 278, - 279, -1, -1, -1, -1, -1, 285, -1, 287, 288, + 279, -1, -1, -1, -1, -1, 285, 958, 287, 288, 289, 290, 291, 292, -1, -1, 295, -1, -1, -1, 299, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, 314, -1, 316, -1, 318, @@ -12870,14 +13076,14 @@ void case_1035() -1, -1, 429, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, - 363, -1, -1, -1, 367, 368, -1, 370, 371, 372, - -1, 374, 375, 376, -1, 378, 379, -1, -1, 382, - 383, 384, 385, -1, 0, -1, 389, 390, -1, -1, + 353, 354, 355, 356, 357, -1, -1, -1, -1, -1, + 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, -1, -1, 382, + 383, 384, 385, 386, 0, -1, 389, 390, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 413, -1, -1, 416, -1, 418, -1, -1, -1, -1, - -1, -1, 256, 257, -1, -1, 429, 261, -1, -1, + 413, -1, -1, 416, -1, 418, -1, 420, -1, -1, + 423, -1, 256, 257, -1, -1, 429, 261, -1, -1, -1, 265, -1, 267, -1, -1, 270, -1, 272, 273, -1, 275, -1, 277, -1, 279, -1, 281, 282, 283, 284, -1, -1, 287, 288, -1, -1, -1, 0, 293, @@ -12982,20 +13188,20 @@ void case_1035() 401, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 412, 413, -1, -1, -1, -1, -1, -1, 420, -1, -1, 423, -1, -1, -1, -1, -1, 429, -1, - 285, 339, -1, -1, -1, -1, 344, -1, 346, 347, + -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, -1, -1, -1, -1, -1, 363, -1, -1, -1, -1, 368, 369, 370, 371, 372, 373, 374, 375, 376, 256, - 378, 379, 327, 381, 382, 383, 384, 385, 386, 387, + 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, 256, -1, -1, 418, -1, 420, 262, -1, 423, -1, -1, -1, -1, - -1, 429, 377, 378, 379, 380, -1, 382, 383, 384, - 385, 386, 387, 388, 389, -1, -1, 392, 393, 394, - 395, 396, 397, 398, 399, -1, -1, -1, -1, 298, + -1, 429, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 298, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, @@ -13016,7 +13222,7 @@ void case_1035() -1, 330, 331, 262, -1, 334, -1, -1, 337, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 367, 368, 298, + -1, -1, -1, -1, 363, -1, -1, 367, 368, 298, 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, 395, 396, 397, 398, 399, @@ -13087,27 +13293,27 @@ void case_1035() 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, -1, -1, -1, 418, -1, 420, -1, -1, 423, -1, 418, -1, -1, -1, 429, -1, -1, 339, -1, - -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, + -1, -1, 256, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, - 261, -1, -1, 394, 395, 396, 397, 398, 399, 400, + -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 256, 413, 284, -1, -1, -1, 262, -1, -1, - -1, -1, -1, -1, -1, -1, 297, -1, 429, -1, - -1, 302, -1, -1, 305, -1, 307, -1, 309, 310, - 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, - 321, -1, -1, 298, 325, -1, -1, -1, -1, -1, - -1, -1, 333, -1, -1, 336, -1, 338, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, + 411, 256, 413, -1, -1, -1, -1, 262, -1, -1, + -1, -1, -1, -1, -1, 339, -1, -1, 429, -1, + 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 298, 368, -1, 370, -1, 372, -1, + 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 390, -1, -1, 256, -1, -1, -1, -1, -1, 262, -1, -1, -1, -1, - -1, 362, -1, -1, 339, -1, -1, 368, -1, 344, + -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, -1, -1, -1, -1, -1, -1, -1, -1, + 355, 356, -1, -1, -1, 429, -1, -1, -1, -1, -1, 298, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, 378, 379, -1, -1, 382, 383, 384, - 385, 386, 387, 388, 389, 390, -1, 418, -1, 394, + 385, 386, 387, 388, 389, 390, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, @@ -13124,174 +13330,224 @@ void case_1035() 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, -1, -1, 298, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, 378, 379, -1, -1, 382, - 383, 384, 385, -1, -1, -1, 389, 390, -1, 256, + 383, 384, 385, -1, -1, -1, 389, 390, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, 378, 379, -1, -1, 382, 383, 384, - 385, -1, -1, -1, 389, 390, -1, 256, -1, 394, - 395, 396, 397, 398, 399, 400, 401, -1, -1, -1, - -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, - -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, - -1, -1, -1, -1, -1, 382, 383, 384, 385, -1, - -1, -1, 389, 390, -1, 256, -1, 394, 395, 396, - 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, - 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, - -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, - -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, - -1, -1, -1, 382, 383, 384, 385, -1, -1, -1, - 389, 390, -1, 256, -1, 394, 395, 396, 397, 398, - 399, 400, 401, -1, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, - -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, - -1, 382, 383, 384, 385, -1, -1, -1, 389, 390, - -1, 256, -1, 394, 395, 396, 397, 398, 399, 400, - 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, - -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, - -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, - -1, 374, 375, 376, -1, -1, -1, -1, -1, 382, - 383, 384, 385, -1, -1, -1, 389, 390, -1, 256, - -1, -1, -1, 396, 397, 398, 399, 400, 401, -1, - -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, - 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, - -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, - 375, 376, -1, -1, -1, -1, -1, 382, 383, 384, - 385, -1, -1, -1, 389, 390, -1, 256, -1, -1, - -1, 396, 397, 398, 399, 400, 401, -1, -1, -1, - -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, - -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, - -1, -1, -1, -1, -1, 382, 383, 384, 385, -1, - -1, -1, 389, 390, -1, 256, -1, -1, -1, 396, - 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, - 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, - -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, - -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, - -1, -1, -1, 382, 383, 384, 385, -1, -1, -1, - 389, 390, -1, 256, -1, -1, -1, 396, 397, 398, - 399, 400, 401, -1, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, - -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, - -1, 382, 383, 384, 385, -1, -1, -1, 389, 390, - -1, 256, -1, -1, -1, 396, 397, 398, 399, 400, - 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, - -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, - -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, - -1, 374, 375, 376, -1, -1, -1, -1, -1, -1, - -1, 384, 385, -1, -1, -1, 389, 390, -1, 256, - -1, -1, -1, -1, -1, 398, 399, 400, 401, -1, - -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, - 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, - -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, - 375, 376, -1, -1, -1, -1, -1, -1, -1, 384, - 385, -1, -1, -1, 389, 390, -1, 256, -1, -1, - -1, -1, -1, 398, 399, 400, 401, -1, -1, -1, - -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, - -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, - -1, -1, -1, -1, -1, -1, -1, 384, 385, -1, - -1, -1, 389, 390, -1, 256, -1, -1, -1, -1, - -1, 398, 399, 400, 401, -1, -1, -1, -1, -1, - 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, - -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, - -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, - -1, -1, -1, -1, -1, 384, 385, -1, -1, -1, - 389, 390, -1, 256, -1, -1, -1, -1, -1, -1, - -1, 400, 401, -1, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, - -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, - -1, -1, -1, -1, 385, -1, -1, -1, 389, 390, - -1, 256, -1, -1, -1, -1, -1, -1, -1, 400, - 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, - -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, - -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, - -1, 374, 375, 376, -1, -1, -1, -1, -1, -1, - -1, -1, 385, -1, -1, -1, 389, 390, -1, 256, - -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, - -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, - 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, - -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, - 375, 376, -1, -1, -1, -1, -1, -1, -1, -1, - 385, -1, -1, -1, -1, 390, -1, 256, -1, -1, - -1, -1, -1, -1, -1, 400, 401, -1, -1, -1, - -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, - -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, - -1, -1, -1, -1, -1, -1, -1, -1, 385, -1, - -1, -1, -1, 390, -1, 256, -1, -1, -1, -1, - -1, -1, -1, 400, 401, -1, -1, -1, -1, -1, - 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, - -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, - -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, + 385, -1, -1, -1, 389, 390, -1, -1, -1, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 256, -1, + 256, -1, -1, -1, -1, -1, 264, 265, 413, 267, + -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, + -1, 279, -1, -1, 429, -1, -1, 285, -1, -1, + 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, + -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, + 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, + -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, + -1, -1, -1, 339, 256, -1, -1, -1, 344, -1, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 359, 360, 361, 362, 363, -1, -1, -1, -1, + -1, -1, 368, 371, 370, -1, 372, -1, 374, 375, + 376, -1, -1, -1, -1, -1, 382, 383, 384, 385, + -1, -1, -1, 389, 390, -1, -1, -1, 394, 395, + 396, 397, 398, 399, 400, 401, -1, -1, -1, -1, + -1, -1, 256, -1, -1, -1, -1, 413, -1, 417, + 418, -1, -1, -1, -1, -1, -1, 339, -1, -1, + 428, 429, 344, 429, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, + 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, + 382, 383, 384, 385, -1, -1, -1, 389, 390, -1, + 256, -1, 394, 395, 396, 397, 398, 399, 400, 401, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, + -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, + 374, 375, 376, -1, -1, -1, -1, -1, 382, 383, + 384, 385, -1, -1, -1, 389, 390, -1, 256, -1, + -1, -1, 396, 397, 398, 399, 400, 401, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, + -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, + 376, -1, -1, -1, -1, -1, 382, 383, 384, 385, + -1, -1, -1, 389, 390, -1, 256, -1, -1, -1, + 396, 397, 398, 399, 400, 401, -1, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, + 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, + -1, -1, -1, -1, 382, 383, 384, 385, -1, -1, + -1, 389, 390, -1, 256, -1, -1, -1, 396, 397, + 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, + -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, + 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, + -1, -1, 382, 383, 384, 385, -1, -1, -1, 389, + 390, -1, 256, -1, -1, -1, 396, 397, 398, 399, + 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, + -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, + -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, + 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, + 382, 383, 384, 385, -1, -1, -1, 389, 390, -1, + 256, -1, -1, -1, 396, 397, 398, 399, 400, 401, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, + -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, + 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, + 384, 385, -1, -1, -1, 389, 390, -1, 256, -1, + -1, -1, -1, -1, 398, 399, 400, 401, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, + -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, + 376, -1, -1, -1, -1, -1, -1, -1, 384, 385, + -1, -1, -1, 389, 390, -1, 256, -1, -1, -1, + -1, -1, 398, 399, 400, 401, -1, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, + 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, + -1, -1, -1, -1, -1, -1, 384, 385, -1, -1, + -1, 389, 390, -1, 256, -1, -1, -1, -1, -1, + 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, + -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, + 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, + -1, -1, -1, -1, 384, 385, -1, -1, -1, 389, + 390, -1, 256, -1, -1, -1, -1, -1, -1, -1, + 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, + -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, + -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, + 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, + -1, -1, 384, 385, -1, -1, -1, 389, 390, -1, + 256, -1, -1, -1, -1, -1, -1, -1, 400, 401, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, + -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, + 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, + -1, 385, -1, -1, -1, 389, 390, -1, 256, -1, + -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, + -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, + 376, -1, -1, -1, -1, -1, -1, -1, -1, 385, + -1, -1, -1, 389, 390, -1, 256, -1, -1, -1, + -1, -1, -1, -1, 400, 401, -1, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, + 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, + -1, -1, -1, -1, -1, -1, -1, 385, -1, -1, + -1, -1, 390, -1, 256, -1, -1, -1, -1, -1, + -1, -1, 400, 401, -1, -1, -1, -1, -1, 339, + -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, + 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 390, -1, 256, -1, -1, -1, -1, -1, -1, - -1, 400, 401, -1, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, - -1, 372, -1, 374, 375, 376, -1, -1, -1, 256, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 390, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 400, - 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, - -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, - -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, - -1, 374, 375, 376, -1, -1, -1, -1, 262, -1, - -1, -1, 266, -1, -1, -1, -1, 390, -1, -1, - -1, -1, 339, -1, -1, -1, -1, 344, 401, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 413, -1, -1, -1, 298, -1, -1, -1, -1, -1, - -1, 368, -1, 370, -1, 372, 429, 374, 375, 376, - 314, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 390, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 401, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 413, -1, -1, -1, - -1, -1, -1, 357, -1, -1, -1, -1, -1, 363, - -1, -1, 429, -1, 368, 369, -1, 371, -1, 373, - -1, 375, 376, -1, 378, 379, -1, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 390, -1, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - -1, -1, 256, -1, 418, -1, 420, -1, -1, 423, - 264, 265, 266, 267, 268, 429, 270, 271, -1, 273, - 274, 275, 276, 277, 278, 279, -1, -1, -1, -1, - -1, 285, -1, 287, 288, 289, 290, 291, 292, -1, - -1, 295, -1, -1, -1, 299, 300, -1, 302, 303, - 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 314, -1, 316, -1, 318, 319, -1, -1, 322, -1, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, -1, 337, -1, -1, 340, 341, -1, -1, - 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, -1, 367, -1, -1, -1, 371, -1, -1, - -1, -1, 376, 377, 378, 379, 380, -1, -1, -1, - 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, + 390, -1, 256, -1, -1, -1, -1, -1, -1, -1, + 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, + -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, + -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, + 372, -1, 374, 375, 376, -1, -1, -1, 256, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 390, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 400, 401, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, + -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, + 374, 375, 376, -1, -1, -1, -1, 262, -1, -1, + -1, 266, -1, -1, -1, -1, 390, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, 401, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 413, + -1, -1, -1, 298, -1, -1, -1, -1, -1, -1, + 368, -1, 370, -1, 372, 429, 374, 375, 376, 314, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 390, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 401, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 413, -1, -1, -1, -1, + -1, -1, 357, -1, -1, -1, -1, -1, 363, -1, + -1, 429, -1, 368, 369, -1, 371, -1, 373, -1, + 375, 376, -1, 378, 379, -1, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, + -1, 256, -1, 418, -1, 420, -1, -1, 423, 264, + 265, 266, 267, 268, 429, 270, 271, -1, 273, 274, + 275, 276, 277, 278, 279, -1, -1, -1, -1, -1, + 285, -1, 287, 288, 289, 290, 291, 292, -1, -1, + 295, -1, -1, -1, 299, 300, -1, 302, 303, 304, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 314, + -1, 316, -1, 318, 319, -1, -1, 322, -1, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, -1, 337, -1, -1, 340, 341, -1, -1, 344, + 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, 367, -1, -1, -1, 371, -1, -1, -1, + -1, 376, 377, 378, 379, 380, -1, -1, -1, 384, + -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 256, -1, 417, 418, 419, 420, -1, 422, 264, 265, + 266, 267, -1, -1, 270, 271, -1, 273, 274, 275, + 276, 277, 278, 279, -1, -1, -1, -1, -1, 285, + -1, 287, 288, 289, 290, 291, 292, -1, -1, 295, + -1, -1, -1, 299, 300, -1, 302, 303, 304, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 314, -1, + 316, -1, 318, 319, -1, -1, 322, -1, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + -1, 337, -1, -1, 340, 341, -1, -1, 344, 345, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, + -1, 367, -1, -1, -1, 371, -1, -1, -1, -1, + 376, 377, 378, 379, 380, -1, -1, -1, 384, -1, + 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + -1, 417, 418, 419, 420, 264, 265, 266, 267, -1, + -1, 270, 271, -1, 273, 274, 275, 276, 277, 278, + 279, -1, -1, -1, -1, -1, 285, -1, 287, 288, + 289, 290, 291, 292, -1, -1, 295, -1, -1, -1, + 299, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 314, -1, 316, -1, 318, + 319, -1, -1, 322, -1, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, -1, 337, -1, + -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, 367, -1, + -1, -1, 371, -1, -1, -1, -1, 376, 377, 378, + 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, + -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 256, -1, -1, -1, 417, 418, + 419, 420, 264, 265, 266, 267, -1, -1, 270, 271, + -1, 273, 274, 275, 276, 277, 278, 279, -1, -1, + -1, -1, -1, 285, -1, 287, 288, 289, 290, 291, + 292, -1, -1, 295, -1, -1, -1, 299, 300, -1, + 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 314, -1, 316, -1, 318, 319, -1, -1, + 322, -1, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, -1, 337, -1, -1, 340, 341, + -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, + 362, 363, -1, -1, -1, 367, -1, -1, -1, 371, + -1, -1, -1, -1, 376, 377, 378, 379, 380, -1, + -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, + 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 256, -1, 417, 418, 419, 420, -1, 422, 264, + -1, 256, -1, -1, -1, 417, 418, 419, 420, 264, 265, 266, 267, -1, -1, 270, 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, -1, -1, -1, -1, 285, -1, 287, 288, 289, 290, 291, 292, -1, -1, @@ -13307,162 +13563,220 @@ void case_1035() -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, - -1, -1, 417, 418, 419, 420, 264, 265, 266, 267, - -1, -1, 270, 271, -1, 273, 274, 275, 276, 277, - 278, 279, -1, -1, -1, -1, -1, 285, -1, 287, - 288, 289, 290, 291, 292, -1, -1, 295, -1, -1, - -1, 299, 300, -1, 302, 303, 304, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 314, -1, 316, -1, - 318, 319, -1, -1, 322, -1, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, -1, 337, - -1, -1, 340, 341, -1, -1, 344, 345, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, -1, 367, - -1, -1, -1, 371, -1, -1, -1, -1, 376, 377, + -1, -1, 417, 418, 419, 420, 264, 265, -1, 267, + -1, -1, 270, 271, -1, 256, -1, 275, 276, 277, + -1, 279, -1, -1, 265, -1, 267, 285, -1, 270, + 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, + -1, -1, 300, -1, 302, 303, 304, 288, 306, -1, + -1, -1, -1, -1, 295, 313, -1, -1, 316, 300, + 318, 319, -1, 304, 322, -1, -1, 325, -1, 327, + -1, 329, 330, 331, 332, 316, 334, 318, -1, -1, + -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, + 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, + -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, + -1, -1, -1, 371, -1, -1, 374, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 417, - 418, 419, 420, 264, 265, 266, 267, -1, -1, 270, - 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, - -1, -1, -1, -1, 285, -1, 287, 288, 289, 290, - 291, 292, -1, -1, 295, -1, -1, -1, 299, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 314, -1, 316, -1, 318, 319, -1, - -1, 322, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, -1, 337, -1, -1, 340, - 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, 367, -1, -1, -1, - 371, -1, -1, -1, -1, 376, 377, 378, 379, 380, + 418, 419, 420, 264, 265, -1, 267, -1, -1, 270, + 271, -1, 256, -1, 275, 276, 277, 418, 279, -1, + -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, + -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, + -1, 302, 303, 304, 288, -1, -1, -1, -1, -1, + -1, 295, -1, -1, -1, 316, 300, 318, 319, -1, + 304, 322, -1, -1, 325, -1, 327, -1, 329, 330, + 331, 332, 316, 334, 318, -1, -1, -1, 322, -1, + 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, + 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, -1, 367, 368, -1, -1, + 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 417, 418, 419, 420, - 264, 265, 266, 267, -1, -1, 270, 271, -1, 273, - 274, 275, 276, 277, 278, 279, -1, -1, -1, -1, - -1, 285, -1, 287, 288, 289, 290, 291, 292, -1, - -1, 295, -1, -1, -1, 299, 300, -1, 302, 303, - 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 314, -1, 316, -1, 318, 319, -1, -1, 322, -1, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, -1, 337, -1, -1, 340, 341, -1, -1, - 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, -1, 367, -1, -1, -1, 371, -1, -1, - -1, -1, 376, 377, 378, 379, 380, -1, -1, -1, - 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, + 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, + -1, 275, 276, 277, 418, 279, -1, -1, 265, -1, + 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, + -1, 295, 279, -1, -1, -1, 300, -1, 302, 303, + 304, 288, 306, -1, -1, -1, -1, -1, 295, 313, + -1, -1, 316, 300, 318, 319, -1, 304, 322, -1, + -1, 325, -1, 327, -1, 329, 330, 331, 332, 316, + 334, 318, -1, -1, -1, 322, -1, 341, -1, -1, + 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, + 337, -1, -1, -1, -1, 359, 360, 361, 362, 363, + -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, + -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, + 384, -1, 386, -1, -1, 372, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 417, 418, 419, 420, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, -1, 279, -1, -1, 265, -1, 267, 285, -1, + 277, 418, 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, - -1, -1, -1, 300, -1, 302, 303, 304, 288, 306, - -1, -1, -1, -1, -1, 295, 313, -1, -1, 316, - 300, 318, 319, -1, 304, 322, -1, -1, 325, -1, + -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, + -1, -1, -1, -1, -1, 295, -1, -1, -1, 316, + 300, 318, 319, 320, 304, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, -1, -1, -1, 371, -1, -1, 374, -1, -1, + 367, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, - -1, -1, 372, -1, -1, 392, 393, -1, -1, -1, + 370, -1, -1, -1, -1, 392, 393, -1, -1, -1, + -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, + 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, + 417, 418, 419, 420, 285, -1, -1, 288, -1, -1, + -1, -1, -1, -1, 295, -1, -1, -1, 418, 300, + -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, + -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, + 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, + 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, -1, 367, 368, -1, -1, + 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, + -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, + -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, 417, 418, 419, 420, + 285, -1, -1, 288, -1, -1, -1, 428, -1, -1, + 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, - 417, 418, 419, 420, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, 418, 279, - -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, - -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, - 300, -1, 302, 303, 304, 288, -1, -1, -1, -1, - -1, -1, 295, -1, -1, -1, 316, 300, 318, 319, - -1, 304, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, 316, 334, 318, -1, -1, -1, 322, - -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, - -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, - -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, - 380, -1, -1, -1, 384, -1, 386, 370, -1, -1, - -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, + 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, 367, -1, -1, -1, 371, -1, -1, -1, + -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, + -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 256, -1, -1, -1, 417, 418, 419, - 420, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, 418, 279, -1, -1, 265, - -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, - -1, -1, 295, 279, -1, -1, -1, 300, -1, 302, - 303, 304, 288, 306, -1, -1, -1, -1, -1, 295, - 313, -1, -1, 316, 300, 318, 319, -1, 304, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - 316, 334, 318, -1, -1, -1, 322, -1, 341, -1, - -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, - -1, 337, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, - -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, - -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, - 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 256, -1, -1, -1, 417, 418, 419, 420, 264, 265, - -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, - 276, 277, 418, 279, -1, -1, 265, -1, 267, 285, - -1, 270, 288, -1, -1, -1, 275, -1, -1, 295, - 279, -1, -1, -1, 300, -1, 302, 303, 304, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - 316, 300, 318, 319, 320, 304, 322, -1, -1, 325, - -1, 327, -1, 329, 330, 331, 332, 316, 334, 318, - -1, -1, -1, 322, -1, 341, -1, -1, 344, 345, - -1, 330, 331, -1, -1, 334, -1, -1, 337, -1, + 256, -1, 417, 418, 419, 420, -1, -1, 264, 265, + -1, 267, -1, 428, 270, 271, -1, -1, -1, 275, + 276, 277, -1, 279, -1, -1, -1, -1, -1, 285, + -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, + -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, + -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, + -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, 367, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, - -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, 417, 418, 419, 420, 285, -1, -1, 288, -1, - -1, -1, -1, -1, -1, 295, -1, -1, -1, 418, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, - -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, - -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, - 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, - -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, - 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, - -1, 275, 276, 277, -1, 279, -1, 417, 418, 419, - 420, 285, -1, -1, 288, -1, -1, -1, 428, -1, - -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, - 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, - -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, - 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, - 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, -1, 367, -1, -1, -1, 371, -1, -1, - -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, - 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, + -1, 417, 418, 419, 420, 262, -1, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, -1, 279, -1, -1, -1, -1, -1, 285, -1, + -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, + -1, 298, -1, 300, -1, 302, 303, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, + -1, -1, -1, -1, -1, -1, 343, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, 371, -1, 373, -1, -1, -1, + 377, 378, 379, 380, 381, -1, -1, 384, -1, 386, + 256, -1, -1, -1, -1, 392, 393, -1, 264, 265, + -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, + 276, 277, -1, 279, -1, -1, -1, -1, -1, 285, + 417, 418, 288, 420, -1, -1, -1, -1, -1, 295, + -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, + -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, + -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, + -1, -1, 368, -1, -1, 371, -1, -1, -1, -1, + -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, + 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + -1, 417, 418, 419, 420, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, + -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, + -1, 300, -1, 302, 303, 304, 288, -1, -1, -1, + -1, -1, -1, 295, -1, -1, -1, 316, 300, 318, + 319, -1, 304, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, 316, 334, 318, -1, -1, -1, + 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, + -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, 368, + -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, + 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, + -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 256, -1, -1, -1, 417, 418, + 419, 420, 264, 265, -1, 267, -1, -1, 270, 271, + -1, -1, -1, 275, 276, 277, 418, 279, -1, -1, + 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, + 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, + 302, 303, 304, 288, -1, -1, -1, -1, -1, -1, + 295, -1, -1, -1, 316, 300, 318, 319, -1, 304, + 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, + 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, + -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, + -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, + 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, + -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, + -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, + 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 256, -1, -1, -1, 417, 418, 419, 420, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, 418, 279, -1, -1, -1, -1, -1, + 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, + 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, + 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, + -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, + -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 256, -1, 417, 418, 419, 420, 262, -1, 264, 265, + -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, + 276, 277, -1, 279, -1, -1, -1, -1, -1, 285, + -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, + -1, -1, 298, -1, 300, -1, 302, 303, 304, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, + -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, + -1, -1, -1, -1, -1, -1, -1, 343, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, + -1, -1, -1, -1, -1, 371, -1, 373, -1, -1, + -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, + 386, 256, -1, -1, -1, -1, 392, 393, -1, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, + 285, 417, 418, 288, 420, -1, -1, -1, -1, -1, + 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 256, -1, 417, 418, 419, 420, -1, -1, 264, - 265, -1, 267, -1, 428, 270, 271, -1, -1, -1, - 275, 276, 277, -1, 279, -1, -1, 265, -1, 267, - 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, - 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, - 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, - -1, 316, 300, 318, 319, -1, 304, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, 316, 334, - 318, -1, -1, -1, 322, -1, 341, -1, -1, 344, - 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, + 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, 367, -1, -1, -1, 371, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 417, 418, 419, 420, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, - 418, 279, -1, -1, 265, -1, 267, 285, -1, 270, + -1, 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, 316, 300, @@ -13471,7 +13785,7 @@ void case_1035() -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, - 368, -1, -1, 371, -1, -1, -1, -1, -1, 377, + -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -13486,7 +13800,7 @@ void case_1035() 331, 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, 368, -1, -1, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, @@ -13509,111 +13823,72 @@ void case_1035() -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 417, 418, 419, 420, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, 418, 279, -1, -1, 265, -1, 267, 285, -1, - 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, - -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, - -1, -1, -1, -1, -1, 295, -1, -1, -1, 316, - 300, 318, 319, -1, 304, 322, -1, -1, 325, -1, - 327, -1, 329, 330, 331, 332, 316, 334, 318, -1, - -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, - 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, + 277, 418, 279, -1, -1, -1, -1, -1, 285, -1, + -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, + -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, + -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, - 417, 418, 419, 420, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, 418, 279, - -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, - -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, - 300, -1, 302, 303, 304, 288, -1, -1, -1, -1, - -1, -1, 295, -1, -1, -1, 316, 300, 318, 319, - -1, 304, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, 316, 334, 318, -1, -1, -1, 322, - -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, - -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, - -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, - 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, - -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, + 417, 418, 419, 420, 262, -1, 264, 265, -1, 267, + -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, + -1, 279, -1, -1, -1, -1, -1, 285, -1, -1, + 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, + 298, -1, 300, -1, 302, 303, 304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, + 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, + -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 256, -1, -1, -1, 417, 418, 419, - 420, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, 418, 279, -1, -1, -1, - -1, -1, 285, -1, -1, 288, -1, -1, -1, -1, - -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, - 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, - -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, - -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, - -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, - 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 256, -1, -1, -1, 417, 418, 419, 420, 264, 265, + -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, + -1, -1, -1, 371, -1, 373, -1, -1, -1, 377, + 378, 379, 380, -1, -1, -1, 384, -1, 386, 256, + -1, -1, -1, -1, 392, 393, -1, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, -1, 279, -1, -1, -1, -1, -1, 285, 417, + 418, 288, 420, -1, -1, -1, -1, -1, 295, -1, + -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, 371, -1, 373, -1, -1, -1, + 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, + 256, -1, -1, -1, -1, 392, 393, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, 285, - -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, + 417, 418, 288, 420, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, - -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, - 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, - -1, 417, 418, 419, 420, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, -1, -1, -1, -1, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, - -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, - 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, - -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 256, -1, -1, -1, 417, 418, - 419, 420, 264, 265, -1, 267, -1, -1, 270, 271, - -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, - -1, -1, -1, 285, -1, -1, 288, -1, -1, -1, - -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, - 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, - 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, - 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, - -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, - -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, - -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, - 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 256, -1, -1, -1, 417, 418, 419, 420, 264, + 386, 256, -1, -1, -1, -1, 392, 393, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, + 285, 417, 418, 288, 420, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, - -1, -1, -1, -1, -1, -1, -1, -1, 343, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, - -1, -1, 377, 378, 379, 380, 381, -1, -1, 384, + -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, 256, -1, -1, -1, -1, 392, 393, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, @@ -13622,7 +13897,7 @@ void case_1035() 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, - 334, -1, -1, -1, -1, -1, -1, -1, -1, 343, + 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, @@ -13942,179 +14217,159 @@ void case_1035() 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, 256, -1, -1, - -1, -1, 392, 393, -1, 264, 265, -1, 267, -1, + -1, -1, 392, 393, 262, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, 285, 417, 418, 288, 420, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + 298, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, - 379, 380, -1, -1, -1, 384, -1, 386, 256, -1, - -1, -1, -1, 392, 393, -1, 264, 265, -1, 267, - -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, - -1, 279, -1, -1, -1, -1, -1, 285, 417, 418, - 288, 420, -1, -1, -1, -1, -1, 295, -1, -1, - -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, - 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, - -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, - -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, - 378, 379, 380, -1, -1, -1, 384, -1, 386, 256, - -1, -1, -1, -1, 392, 393, -1, 264, 265, -1, - 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, -1, 279, -1, -1, -1, -1, -1, 285, 417, - 418, 288, 420, -1, -1, -1, -1, -1, 295, -1, - -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, - -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, - 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, - 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, - 256, -1, -1, -1, -1, 392, 393, -1, 264, 265, - -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, - 276, 277, -1, 279, -1, -1, -1, -1, -1, 285, - 417, 418, 288, 420, -1, -1, -1, -1, -1, 295, - -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, - -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, - -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, - -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, - 386, 256, -1, -1, -1, -1, 392, 393, 262, 264, - 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 417, 418, 288, 420, -1, -1, -1, -1, -1, - 295, -1, -1, -1, 298, 300, -1, 302, 303, 304, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 371, 371, 372, 373, 374, 375, -1, -1, + 378, 379, -1, -1, 382, 383, 384, 385, 386, 387, + 388, 389, 390, -1, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, -1, -1, 417, 418, + -1, -1, 420, -1, 261, 423, 263, -1, 265, -1, + 267, -1, -1, 270, -1, 272, 273, -1, 275, -1, + 277, -1, 279, -1, 281, 282, 283, 284, -1, -1, + 287, 288, -1, -1, -1, -1, 293, 294, 295, 296, + 297, -1, -1, 300, -1, 302, -1, 304, -1, 306, + 307, -1, 309, 310, 311, 312, -1, -1, 315, 316, + 317, 318, -1, -1, 321, 322, 323, -1, -1, -1, + -1, -1, -1, 330, 331, -1, 333, 334, -1, 336, + 337, 338, -1, -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, 371, 371, 372, 373, - 374, 375, -1, -1, 378, 379, -1, -1, 382, 383, - 384, 385, 386, 387, 388, 389, 390, -1, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - -1, -1, 417, 418, -1, -1, 420, -1, 261, 423, - 263, -1, 265, -1, 267, -1, -1, 270, -1, 272, - 273, -1, 275, -1, 277, -1, 279, -1, 281, 282, + -1, -1, -1, -1, -1, 362, -1, 364, 365, 261, + -1, -1, -1, 265, -1, 267, -1, -1, 270, -1, + 272, 273, -1, 275, -1, 277, -1, 279, -1, 281, + 282, 283, 284, -1, -1, 287, 288, -1, -1, -1, + -1, 293, -1, 295, 296, 297, -1, -1, 300, -1, + 302, -1, 304, -1, -1, 307, -1, 309, 310, 311, + 312, 418, -1, -1, 316, 317, 318, -1, -1, 321, + 322, 323, -1, -1, -1, -1, -1, -1, 330, 331, + -1, 333, 334, -1, 336, 337, 338, -1, -1, -1, + 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 261, -1, + 362, -1, 265, -1, 267, -1, 368, 270, -1, 272, + 273, -1, 275, -1, 277, 377, 279, -1, 281, 282, 283, 284, -1, -1, 287, 288, -1, -1, -1, -1, - 293, 294, 295, 296, 297, -1, -1, 300, -1, 302, - -1, 304, -1, 306, 307, -1, 309, 310, 311, 312, - -1, -1, 315, 316, 317, 318, -1, -1, 321, 322, + 293, -1, 295, 296, 297, -1, -1, 300, -1, 302, + -1, 304, -1, -1, 307, -1, 309, 310, 311, 312, + -1, -1, -1, 316, 317, 318, 418, -1, 321, 322, 323, -1, -1, -1, -1, -1, -1, 330, 331, -1, 333, 334, -1, 336, 337, 338, -1, -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 362, - -1, 364, 365, 261, -1, -1, -1, 265, -1, 267, - -1, -1, 270, -1, 272, 273, -1, 275, -1, 277, + -1, -1, -1, -1, -1, -1, -1, 261, -1, 362, + -1, 265, -1, 267, -1, 368, 270, -1, 272, 273, + -1, 275, -1, 277, 377, 279, -1, 281, 282, 283, + 284, -1, -1, 287, 288, -1, -1, -1, -1, 293, + -1, 295, 296, 297, -1, -1, 300, -1, 302, -1, + 304, -1, -1, 307, -1, 309, 310, 311, 312, -1, + -1, -1, 316, 317, 318, 418, -1, 321, 322, 323, + -1, -1, -1, -1, -1, -1, 330, 331, -1, 333, + 334, -1, 336, 337, 338, -1, -1, -1, 342, -1, + -1, -1, -1, 261, -1, -1, -1, 265, -1, 267, + -1, -1, 270, -1, 272, 273, -1, 275, 362, 277, -1, 279, -1, 281, 282, 283, 284, -1, -1, 287, - 288, -1, -1, -1, -1, 293, -1, 295, 296, 297, + 288, -1, -1, 377, -1, 293, -1, 295, 296, 297, -1, -1, 300, -1, 302, -1, 304, -1, -1, 307, - -1, 309, 310, 311, 312, 418, -1, -1, 316, 317, + -1, 309, 310, 311, 312, -1, -1, -1, 316, 317, 318, -1, -1, 321, 322, 323, -1, -1, -1, -1, - -1, -1, 330, 331, -1, 333, 334, -1, 336, 337, + -1, -1, 330, 331, 418, 333, 334, -1, 336, 337, 338, -1, -1, -1, 342, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 261, -1, 362, -1, 265, -1, 267, -1, - 368, 270, -1, 272, 273, -1, 275, -1, 277, 377, - 279, -1, 281, 282, 283, 284, -1, -1, 287, 288, - -1, -1, -1, -1, 293, -1, 295, 296, 297, -1, - -1, 300, -1, 302, -1, 304, -1, -1, 307, -1, - 309, 310, 311, 312, -1, -1, -1, 316, 317, 318, - 418, -1, 321, 322, 323, -1, -1, -1, -1, -1, - -1, 330, 331, -1, 333, 334, -1, 336, 337, 338, - -1, -1, -1, 342, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 261, -1, 362, -1, 265, -1, 267, -1, 368, - 270, -1, 272, 273, -1, 275, -1, 277, 377, 279, - -1, 281, 282, 283, 284, -1, -1, 287, 288, -1, - -1, -1, -1, 293, -1, 295, 296, 297, -1, -1, - 300, -1, 302, -1, 304, -1, -1, 307, -1, 309, - 310, 311, 312, -1, -1, -1, 316, 317, 318, 418, - -1, 321, 322, 323, -1, -1, -1, -1, -1, -1, - 330, 331, -1, 333, 334, -1, 336, 337, 338, -1, - -1, -1, 342, -1, -1, -1, -1, 261, -1, -1, - -1, 265, -1, 267, -1, -1, 270, -1, 272, 273, - -1, 275, 362, 277, -1, 279, -1, 281, 282, 283, - 284, -1, -1, 287, 288, -1, -1, 377, -1, 293, - -1, 295, 296, 297, -1, -1, 300, -1, 302, -1, + -1, -1, -1, -1, -1, -1, -1, 261, -1, -1, + -1, 265, -1, 267, 362, -1, 270, -1, 272, 273, + 368, 275, -1, 277, -1, 279, -1, 281, 282, 283, + 284, -1, -1, 287, 288, -1, -1, -1, -1, 293, + -1, 295, 296, 297, -1, -1, 300, -1, 302, 261, 304, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, 316, 317, 318, -1, -1, 321, 322, 323, - -1, -1, -1, -1, -1, -1, 330, 331, 418, 333, - 334, -1, 336, 337, 338, -1, -1, -1, 342, -1, + 418, -1, 284, -1, -1, -1, 330, 331, -1, 333, + 334, -1, 336, 337, 338, 297, -1, -1, 342, -1, + 302, -1, -1, 305, -1, 307, -1, 309, 310, 311, + 312, -1, -1, -1, -1, 317, -1, -1, 362, 321, + -1, -1, -1, 325, 368, -1, -1, -1, -1, 261, + -1, 333, -1, -1, 336, -1, 338, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 261, -1, -1, -1, 265, -1, 267, 362, -1, - 270, -1, 272, 273, 368, 275, -1, 277, -1, 279, - -1, 281, 282, 283, 284, -1, -1, 287, 288, -1, - -1, -1, -1, 293, -1, 295, 296, 297, -1, -1, - 300, -1, 302, 261, 304, -1, -1, 307, -1, 309, - 310, 311, 312, -1, -1, -1, 316, 317, 318, -1, - -1, 321, 322, 323, 418, -1, 284, -1, -1, -1, - 330, 331, -1, 333, 334, -1, 336, 337, 338, 297, - -1, -1, 342, -1, 302, -1, -1, 305, -1, 307, - -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, - -1, -1, 362, 321, -1, -1, -1, 325, 368, -1, - -1, -1, -1, 261, -1, 333, -1, -1, 336, -1, - 338, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 284, -1, -1, 357, - -1, -1, -1, -1, 362, -1, -1, -1, -1, 297, - 368, 369, -1, 371, 302, 373, -1, 305, 418, 307, - -1, 309, 310, 311, 312, -1, -1, -1, 386, 317, - -1, -1, -1, 321, -1, 261, -1, 325, -1, -1, - -1, -1, -1, -1, -1, 333, -1, -1, 336, -1, - 338, -1, -1, -1, -1, -1, -1, -1, 284, -1, - 418, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 297, -1, 261, 362, -1, 302, -1, -1, -1, - 368, 307, -1, 309, 310, 311, 312, -1, -1, -1, - -1, 317, -1, -1, -1, 321, 284, -1, -1, 325, - -1, -1, -1, 261, -1, -1, -1, 333, -1, 297, - 336, -1, 338, -1, 302, -1, -1, -1, -1, 307, - -1, 309, 310, 311, 312, -1, 284, -1, -1, 317, - 418, -1, -1, 321, -1, -1, 362, 325, -1, 297, - -1, -1, 368, -1, 302, 333, -1, -1, 336, 307, - 338, 309, 310, 311, 312, -1, -1, -1, -1, 317, - -1, -1, -1, 321, -1, -1, -1, -1, -1, -1, - 264, 265, -1, 267, 362, 333, 270, 271, 336, -1, - 338, 275, 276, 277, -1, 279, -1, -1, -1, -1, - -1, 285, 418, -1, 288, -1, -1, -1, -1, -1, - -1, 295, -1, -1, 362, -1, 300, -1, 302, 303, - 304, -1, 306, -1, -1, -1, -1, -1, -1, 313, + -1, -1, 284, -1, -1, 357, -1, -1, -1, -1, + 362, -1, -1, -1, -1, 297, 368, 369, -1, 371, + 302, 373, -1, 305, 418, 307, -1, 309, 310, 311, + 312, -1, -1, -1, 386, 317, -1, -1, -1, 321, + -1, 261, -1, 325, -1, -1, -1, -1, -1, -1, + -1, 333, -1, -1, 336, -1, 338, -1, -1, -1, + -1, -1, -1, -1, 284, -1, 418, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 297, -1, 261, + 362, -1, 302, -1, -1, 305, 368, 307, -1, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, + -1, 321, 284, -1, -1, 325, -1, -1, -1, -1, + -1, -1, -1, 333, -1, 297, 336, 261, 338, -1, + 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, + 312, -1, -1, -1, -1, 317, 418, -1, -1, 321, + 284, -1, 362, 325, -1, -1, -1, -1, 368, -1, + -1, 333, -1, 297, 336, 261, 338, -1, 302, -1, + -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, + -1, -1, -1, 317, -1, -1, -1, 321, 284, -1, + 362, 325, -1, -1, -1, -1, 368, -1, -1, 333, + -1, 297, 336, -1, 338, -1, 302, -1, 418, -1, + -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, + -1, 317, -1, -1, -1, 321, -1, -1, 362, -1, + -1, -1, -1, -1, -1, -1, -1, 333, 264, 265, + 336, 267, 338, -1, 270, 271, 418, -1, -1, 275, + 276, 277, -1, 279, -1, -1, -1, -1, -1, 285, + -1, -1, 288, -1, -1, -1, 362, -1, -1, 295, + -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, + 306, -1, -1, -1, 418, -1, -1, 313, -1, -1, + 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, + -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, + -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, + -1, -1, 418, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, + -1, -1, -1, -1, -1, 371, 372, -1, 374, -1, + -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, + 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, + -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, 417, 418, 419, 420, 285, -1, -1, 288, -1, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, -1, 302, 303, 304, -1, 306, -1, -1, -1, + -1, -1, -1, 313, -1, -1, 316, -1, 318, 319, + -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, + -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, + -1, 371, -1, -1, 374, -1, -1, 377, 378, 379, + 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, + -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, + 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, + -1, 275, 276, 277, -1, 279, -1, 417, 418, 419, + 420, 285, -1, -1, 288, -1, -1, -1, -1, -1, + -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, + 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, - 418, 325, -1, 327, -1, 329, 330, 331, 332, -1, - 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, + -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, + 334, -1, -1, 337, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, - 418, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, -1, -1, -1, -1, -1, 371, 372, -1, - 374, -1, -1, 377, 378, 379, 380, -1, -1, -1, + -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, + -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, + -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, 417, 418, 419, 420, 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, - -1, -1, 300, -1, 302, 303, 304, -1, 306, -1, - -1, -1, -1, -1, -1, 313, -1, -1, 316, -1, + -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, - -1, -1, -1, 371, -1, -1, 374, -1, -1, 377, + -1, 359, 360, 361, 362, 363, -1, -1, -1, 367, + -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, @@ -14124,10 +14379,10 @@ void case_1035() 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, - 332, -1, 334, -1, -1, 337, -1, -1, -1, 341, + 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, + 362, 363, -1, -1, -1, 367, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, @@ -14141,7 +14396,7 @@ void case_1035() -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, - -1, 367, -1, -1, -1, 371, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, @@ -14154,7 +14409,7 @@ void case_1035() 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, -1, 367, -1, -1, + 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, @@ -14188,178 +14443,153 @@ void case_1035() -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, 417, 418, 419, 420, 285, -1, -1, 288, -1, -1, -1, - -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, + -1, -1, -1, 295, -1, 261, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, + -1, -1, -1, -1, 316, -1, 318, 319, 284, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, - 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, - -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, - -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, + 332, 297, 334, -1, -1, -1, 302, -1, -1, -1, + -1, 307, -1, 309, 310, 311, 312, -1, -1, 315, + -1, 317, -1, -1, -1, 321, -1, 359, 360, 361, + 362, 363, -1, -1, -1, -1, -1, 333, -1, 371, + 336, -1, 338, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, - 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, - -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, - 276, 277, -1, 279, -1, 417, 418, 419, 420, 285, - -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, - -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, - -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, - -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, - -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, - -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, - 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, - -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, 417, 418, 419, 420, 285, -1, -1, 288, -1, - -1, -1, -1, -1, -1, 295, -1, 261, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - 284, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, 297, 334, -1, -1, -1, 302, -1, - -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, - -1, 315, -1, 317, -1, -1, -1, 321, -1, 359, - 360, 361, 362, 363, -1, -1, -1, -1, -1, 333, - -1, 371, 336, -1, 338, -1, -1, 377, 378, 379, - 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, - -1, -1, 392, 393, -1, -1, -1, -1, 362, -1, - -1, -1, -1, -1, 368, 369, -1, -1, -1, -1, - -1, -1, 263, -1, 265, -1, 267, 417, 418, 270, - 420, 272, 273, -1, 275, -1, 277, -1, 279, -1, - 281, 282, 283, -1, -1, -1, 287, 288, -1, -1, - -1, -1, 293, -1, 295, 296, -1, -1, -1, 300, - -1, -1, -1, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 315, 316, -1, 318, -1, -1, - -1, 322, 323, -1, -1, -1, -1, -1, -1, 330, - 331, 264, 265, 334, 267, -1, 337, 270, 271, -1, - -1, 342, 275, 276, 277, -1, 279, -1, -1, -1, - -1, -1, 285, -1, -1, 288, -1, -1, -1, -1, - -1, -1, 295, 364, 365, -1, -1, 300, -1, 302, - 303, 304, -1, -1, -1, -1, 377, -1, -1, -1, - -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, 337, -1, -1, -1, -1, -1, - -1, 265, -1, 267, -1, -1, 270, 418, 272, -1, - -1, 275, -1, -1, -1, 279, 359, 360, 361, 362, - -1, -1, -1, -1, 288, 265, -1, 267, 371, -1, - 270, 295, 272, 273, -1, 275, 300, 277, 302, 279, - 304, 281, 282, 283, -1, -1, -1, 287, 288, -1, - -1, -1, 316, 293, 318, 295, 296, -1, 322, 323, - 300, -1, -1, -1, 304, -1, 330, 331, -1, -1, - 334, -1, -1, 337, 417, 418, 316, -1, 318, -1, - -1, -1, 322, 323, -1, -1, -1, -1, -1, -1, - 330, 331, -1, 265, 334, 267, -1, 337, 270, -1, - 272, 273, 342, 275, -1, 277, -1, 279, -1, 281, + 392, 393, -1, -1, -1, -1, 362, -1, -1, -1, + -1, -1, 368, 369, -1, -1, -1, -1, -1, -1, + 263, -1, 265, -1, 267, 417, 418, 270, 420, 272, + 273, -1, 275, -1, 277, -1, 279, -1, 281, 282, + 283, -1, -1, -1, 287, 288, -1, -1, -1, -1, + 293, -1, 295, 296, -1, -1, -1, 300, -1, -1, + -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 315, 316, -1, 318, -1, -1, -1, 322, + 323, -1, -1, -1, -1, -1, -1, 330, 331, 264, + 265, 334, 267, -1, 337, 270, 271, -1, -1, 342, + 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, + 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, + 295, 364, 365, -1, -1, 300, -1, 302, 303, 304, + -1, -1, -1, -1, 377, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, 337, -1, -1, -1, -1, -1, -1, 265, + -1, 267, -1, -1, 270, 418, 272, -1, -1, 275, + -1, -1, -1, 279, 359, 360, 361, 362, 363, -1, + -1, -1, 288, 265, -1, 267, 371, -1, 270, 295, + 272, 273, -1, 275, 300, 277, 302, 279, 304, 281, 282, 283, -1, -1, -1, 287, 288, -1, -1, -1, - -1, 293, -1, 295, 296, -1, -1, -1, 300, -1, - -1, -1, 304, -1, -1, -1, -1, 377, -1, -1, - -1, -1, -1, -1, 316, -1, 318, -1, -1, -1, - 322, 323, -1, -1, 418, -1, -1, -1, 330, 331, - -1, -1, 334, -1, -1, 337, -1, 265, -1, 267, - 342, -1, 270, -1, -1, 273, -1, 275, 418, 277, - -1, 279, -1, 281, 282, 283, -1, -1, -1, 287, - 288, -1, -1, -1, -1, 293, -1, 295, -1, 265, - -1, 267, 300, -1, 270, -1, 304, 273, -1, 275, - -1, 277, -1, 279, -1, 281, 282, 283, 316, -1, - 318, 287, 288, -1, 322, -1, -1, 293, -1, 295, - -1, -1, 330, 331, 300, -1, 334, -1, 304, 337, - -1, -1, -1, 265, 342, 267, 418, -1, 270, -1, - 316, -1, 318, 275, -1, -1, 322, 279, -1, -1, - -1, -1, -1, -1, 330, 331, 288, -1, 334, -1, - -1, 337, -1, 295, -1, 265, 342, 267, 300, 377, - 270, -1, 304, -1, 306, 275, 308, -1, -1, 279, - -1, 313, -1, -1, 316, -1, 318, -1, 288, -1, - 322, -1, -1, 325, -1, 295, -1, -1, 330, 331, - 300, -1, 334, -1, 304, 337, 306, -1, 308, 265, - 418, 267, -1, 313, 270, -1, 316, -1, 318, 275, - -1, -1, 322, 279, -1, 325, -1, -1, -1, -1, - 330, 331, 288, -1, 334, -1, -1, 337, -1, 295, - 372, -1, 418, -1, 300, -1, -1, -1, 304, -1, - 306, -1, -1, -1, -1, -1, -1, 313, -1, -1, - 316, -1, 318, -1, -1, -1, 322, -1, -1, 325, - 370, -1, -1, -1, 330, 331, -1, -1, 334, -1, - 265, 337, 267, -1, -1, 270, 418, -1, -1, -1, - 275, -1, -1, -1, 279, -1, -1, -1, -1, -1, - -1, -1, -1, 288, -1, -1, -1, 363, -1, -1, - 295, -1, 265, -1, 267, 300, -1, 270, 418, 304, - -1, 306, 275, 308, -1, -1, 279, -1, 313, -1, - -1, 316, -1, 318, -1, 288, -1, 322, -1, -1, - 325, -1, 295, -1, -1, 330, 331, 300, -1, 334, - -1, 304, 337, 306, -1, 308, -1, -1, -1, -1, - 313, -1, 418, 316, -1, 318, -1, -1, -1, 322, - -1, -1, 325, -1, -1, -1, -1, 330, 331, -1, - -1, 334, -1, 265, 337, 267, -1, -1, 270, -1, - -1, -1, -1, 275, -1, -1, -1, 279, -1, -1, - -1, 283, 265, -1, 267, -1, 288, 270, -1, -1, - -1, 293, 275, 295, -1, -1, 279, -1, 300, -1, - -1, -1, 304, 305, -1, 288, -1, -1, -1, -1, - -1, -1, 295, 418, 316, -1, 318, 300, -1, -1, - 322, 304, -1, -1, -1, -1, 261, -1, 330, 331, - -1, -1, 334, 316, -1, 318, -1, 272, -1, 322, - -1, -1, 277, -1, -1, 418, 281, 330, 331, 284, - -1, 334, -1, -1, 337, -1, -1, -1, -1, -1, - -1, 296, 297, -1, -1, -1, 301, 302, -1, -1, + 316, 293, 318, 295, 296, -1, 322, 323, 300, -1, + -1, -1, 304, -1, 330, 331, -1, -1, 334, -1, + -1, 337, 417, 418, 316, -1, 318, -1, -1, -1, + 322, 323, -1, -1, -1, -1, -1, -1, 330, 331, + -1, 265, 334, 267, -1, 337, 270, -1, 272, 273, + 342, 275, -1, 277, -1, 279, -1, 281, 282, 283, + -1, -1, -1, 287, 288, -1, -1, -1, -1, 293, + -1, 295, 296, -1, -1, -1, 300, -1, -1, -1, + 304, -1, -1, -1, -1, 377, -1, -1, -1, -1, + -1, -1, 316, -1, 318, -1, -1, -1, 322, 323, + -1, -1, 418, -1, -1, -1, 330, 331, -1, -1, + 334, -1, -1, 337, -1, 265, -1, 267, 342, -1, + 270, -1, -1, 273, -1, 275, 418, 277, -1, 279, + -1, 281, 282, 283, -1, -1, -1, 287, 288, -1, + -1, -1, -1, 293, -1, 295, -1, 265, -1, 267, + 300, -1, 270, -1, 304, 273, -1, 275, -1, 277, + -1, 279, -1, 281, 282, 283, 316, -1, 318, 287, + 288, -1, 322, -1, -1, 293, -1, 295, -1, -1, + 330, 331, 300, -1, 334, -1, 304, 337, -1, -1, + -1, 265, 342, 267, 418, -1, 270, -1, 316, -1, + 318, 275, -1, -1, 322, 279, -1, -1, -1, -1, + -1, -1, 330, 331, 288, -1, 334, -1, -1, 337, + -1, 295, -1, 265, 342, 267, 300, 377, 270, -1, + 304, -1, 306, 275, 308, -1, -1, 279, -1, 313, + -1, -1, 316, -1, 318, -1, 288, -1, 322, -1, + -1, 325, -1, 295, -1, -1, 330, 331, 300, -1, + 334, -1, 304, 337, 306, -1, 308, 265, 418, 267, + -1, 313, 270, -1, 316, -1, 318, 275, -1, -1, + 322, 279, -1, 325, -1, -1, -1, -1, 330, 331, + 288, -1, 334, -1, -1, 337, -1, 295, 372, -1, + 418, -1, 300, -1, -1, -1, 304, -1, 306, -1, + -1, -1, -1, -1, -1, 313, -1, -1, 316, -1, + 318, -1, -1, -1, 322, -1, -1, 325, 370, -1, + -1, -1, 330, 331, -1, -1, 334, -1, 265, 337, + 267, -1, -1, 270, 418, -1, -1, -1, 275, -1, + -1, -1, 279, -1, -1, -1, -1, -1, -1, -1, + -1, 288, -1, -1, -1, 363, -1, -1, 295, -1, + 265, -1, 267, 300, -1, 270, 418, 304, -1, 306, + 275, 308, -1, -1, 279, -1, 313, -1, -1, 316, + -1, 318, -1, 288, -1, 322, -1, -1, 325, -1, + 295, -1, -1, 330, 331, 300, -1, 334, -1, 304, + 337, 306, -1, 308, -1, -1, -1, -1, 313, -1, + 418, 316, -1, 318, -1, -1, -1, 322, -1, -1, + 325, -1, -1, -1, -1, 330, 331, -1, -1, 334, + -1, 265, 337, 267, -1, -1, 270, -1, -1, -1, + -1, 275, -1, -1, -1, 279, -1, -1, -1, 283, + -1, -1, -1, -1, 288, 265, -1, 267, -1, 293, + 270, 295, -1, -1, -1, 275, 300, -1, -1, 279, + 304, 305, -1, -1, -1, -1, -1, -1, 288, -1, + -1, 418, 316, -1, 318, 295, -1, -1, 322, -1, + 300, -1, -1, -1, 304, -1, 330, 331, -1, -1, + 334, -1, -1, 337, -1, 265, 316, 267, 318, -1, + 270, -1, 322, 418, -1, 275, -1, -1, -1, 279, + 330, 331, -1, -1, 334, -1, -1, 337, 288, 265, + -1, 267, -1, -1, 270, 295, -1, -1, -1, 275, + 300, -1, -1, 279, 304, -1, -1, -1, -1, -1, + -1, -1, 288, -1, -1, -1, 316, -1, 318, 295, + -1, -1, 322, -1, 300, -1, -1, -1, 304, -1, + 330, 331, -1, -1, 334, -1, 261, 337, -1, -1, + 316, -1, 318, -1, 418, -1, 322, 272, -1, -1, + -1, -1, 277, -1, 330, 331, 281, -1, 334, 284, + -1, 337, -1, -1, -1, -1, -1, -1, 418, -1, + -1, 296, 297, -1, -1, -1, 301, 302, -1, 261, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, - 363, -1, 317, -1, -1, -1, 321, -1, 323, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 333, -1, - 335, 336, 261, 338, -1, -1, -1, 342, -1, -1, - -1, -1, -1, 272, -1, -1, 418, -1, 277, -1, - -1, -1, 281, -1, -1, 284, -1, 362, -1, -1, - -1, -1, -1, 368, 369, 418, -1, 296, 297, -1, - -1, -1, 301, 302, 261, -1, 263, -1, 307, -1, - 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, - -1, -1, 321, -1, 323, -1, -1, 284, -1, -1, + 272, -1, 317, -1, -1, 277, 321, -1, 323, 281, + -1, -1, 284, -1, -1, -1, -1, -1, 333, -1, + 335, 336, -1, 338, 296, 297, -1, 342, 418, 301, + 302, -1, 261, -1, 263, 307, -1, 309, 310, 311, + 312, -1, -1, -1, -1, 317, -1, 362, -1, 321, + -1, 323, 418, 368, 369, 284, -1, -1, -1, -1, + -1, 333, -1, -1, 336, -1, 338, -1, 297, -1, + 342, -1, -1, 302, -1, 261, -1, -1, 307, -1, + 309, 310, 311, 312, -1, -1, 272, -1, 317, -1, + 362, 277, 321, -1, -1, 281, 368, 369, 284, -1, -1, -1, -1, -1, 333, -1, -1, 336, -1, 338, - 297, -1, -1, 342, -1, 302, -1, -1, -1, -1, - 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, - 317, -1, -1, 362, 321, -1, -1, 261, -1, 368, - 369, -1, -1, -1, -1, -1, 333, -1, 272, 336, - -1, 338, -1, 277, -1, -1, -1, 281, -1, -1, - 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 296, 297, -1, 362, -1, 301, 302, -1, - 261, 368, 369, 307, -1, 309, 310, 311, 312, -1, - -1, 272, -1, 317, -1, -1, 277, 321, -1, 323, - 281, -1, -1, 284, -1, -1, -1, -1, -1, 333, - -1, -1, 336, -1, 338, 296, 297, -1, 342, -1, - 301, 302, 261, -1, -1, -1, 307, -1, 309, 310, - 311, 312, -1, -1, -1, -1, 317, -1, 362, -1, - 321, -1, 323, -1, 368, 284, -1, -1, -1, -1, - -1, -1, 333, -1, -1, 336, -1, 338, 297, -1, - 261, 342, -1, 302, -1, -1, -1, -1, 307, -1, - 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, - -1, 362, 321, 284, -1, -1, -1, 368, -1, -1, - -1, -1, -1, -1, 333, -1, 297, 336, 261, 338, + 296, 297, -1, -1, -1, 301, 302, -1, 261, -1, + -1, 307, -1, 309, 310, 311, 312, -1, -1, 272, + -1, 317, -1, 362, 277, 321, -1, 323, 281, 368, + 369, 284, -1, -1, -1, -1, -1, 333, -1, -1, + 336, -1, 338, 296, 297, -1, 342, -1, 301, 302, + 261, -1, -1, -1, 307, -1, 309, 310, 311, 312, + -1, -1, -1, -1, 317, -1, 362, -1, 321, -1, + 323, -1, 368, 284, -1, -1, -1, -1, -1, -1, + 333, -1, -1, 336, -1, 338, 297, -1, 261, 342, -1, 302, -1, -1, -1, -1, 307, -1, 309, 310, - 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, - 321, 284, -1, 362, -1, 364, 365, -1, -1, 368, - -1, -1, 333, -1, 297, 336, 261, 338, 263, 302, + 311, 312, -1, -1, -1, -1, 317, -1, -1, 362, + 321, 284, -1, -1, -1, 368, -1, -1, -1, -1, + -1, -1, 333, -1, 297, 336, 261, 338, -1, 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, - -1, -1, 315, -1, 317, -1, -1, -1, 321, 284, + -1, -1, -1, -1, 317, -1, -1, -1, 321, 284, -1, 362, -1, 364, 365, -1, -1, 368, -1, -1, - 333, -1, 297, 336, 261, 338, -1, 302, -1, -1, + 333, -1, 297, 336, 261, 338, 263, 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, - -1, -1, 317, -1, -1, -1, 321, 284, -1, 362, - -1, -1, -1, -1, 261, 368, 263, -1, 333, -1, - 297, 336, -1, 338, -1, 302, -1, -1, -1, -1, - 307, -1, 309, 310, 311, 312, -1, 284, -1, -1, - 317, -1, -1, -1, 321, -1, -1, 362, -1, -1, - 297, -1, -1, 368, 261, 302, 333, -1, -1, 336, - 307, 338, 309, 310, 311, 312, -1, -1, 315, -1, - 317, -1, -1, -1, 321, -1, -1, 284, -1, -1, - -1, -1, -1, -1, -1, 362, 333, 364, 365, 336, - 297, 338, -1, -1, -1, 302, -1, -1, -1, -1, + 315, -1, 317, -1, -1, -1, 321, 284, -1, 362, + -1, 364, 365, -1, -1, 368, -1, -1, 333, -1, + 297, 336, 261, 338, 263, 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, - 317, -1, -1, -1, 321, 362, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, + 317, -1, -1, -1, 321, 284, -1, 362, -1, -1, + -1, -1, 261, 368, -1, -1, 333, -1, 297, 336, + -1, 338, -1, 302, -1, -1, -1, -1, 307, -1, + 309, 310, 311, 312, -1, 284, 315, -1, 317, -1, + -1, -1, 321, -1, 261, 362, -1, -1, 297, -1, + -1, 368, 301, 302, 333, -1, -1, 336, 307, 338, + 309, 310, 311, 312, -1, -1, -1, 284, 317, -1, + -1, -1, 321, -1, -1, -1, -1, -1, -1, -1, + 297, -1, -1, 362, 333, 302, -1, 336, -1, 338, + 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, + 317, -1, -1, -1, 321, -1, -1, -1, -1, -1, + -1, -1, -1, 362, -1, -1, 333, -1, -1, 336, -1, 338, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 362, }; -#line 7038 "cs-parser.jay" +#line 7153 "cs-parser.jay" // // A class used to hold info about an operator declarator diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay index d161bc9a85..f3c9ae0050 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay @@ -35,7 +35,8 @@ namespace Mono.CSharp Arglist = 1 << 5, DefaultValue = 1 << 6, - All = Ref | Out | This | Params | Arglist | DefaultValue + All = Ref | Out | This | Params | Arglist | DefaultValue, + PrimaryConstructor = Ref | Out | Params | DefaultValue } static readonly object ModifierNone = 0; @@ -926,10 +927,12 @@ class_member_declarations : class_member_declaration { lexer.parsing_modifiers = true; + lexer.parsing_block = 0; } | class_member_declarations class_member_declaration { lexer.parsing_modifiers = true; + lexer.parsing_block = 0; } ; @@ -965,16 +968,22 @@ struct_declaration type_declaration_name { lexer.ConstraintsParsing = true; + valid_param_mod = ParameterModifierType.PrimaryConstructor; push_current_container (new Struct (current_container, (MemberName) $6, (Modifiers) $2, (Attributes) $1), $3); lbag.AddMember (current_container, GetModifierLocations (), GetLocation ($4)); } + opt_primary_parameters opt_class_base opt_type_parameter_constraints_clauses { + valid_param_mod = 0; lexer.ConstraintsParsing = false; - if ($9 != null) - current_container.SetConstraints ((List) $9); + if ($8 != null) + current_type.PrimaryConstructorParameters = (ParametersCompiled) $8; + + if ($10 != null) + current_container.SetConstraints ((List) $10); if (doc_support) current_container.PartialContainer.DocComment = Lexer.consume_doc_comment (); @@ -996,9 +1005,9 @@ struct_declaration opt_semicolon { if ($16 == null) { - lbag.AppendToMember (current_container, GetLocation ($11), GetLocation ($14)); + lbag.AppendToMember (current_container, GetLocation ($12), GetLocation ($15)); } else { - lbag.AppendToMember (current_container, GetLocation ($11), GetLocation ($14), GetLocation ($16)); + lbag.AppendToMember (current_container, GetLocation ($12), GetLocation ($15), GetLocation ($17)); } $$ = pop_current_class (); } @@ -2016,10 +2025,12 @@ interface_member_declarations : interface_member_declaration { lexer.parsing_modifiers = true; + lexer.parsing_block = 0; } | interface_member_declarations interface_member_declaration { lexer.parsing_modifiers = true; + lexer.parsing_block = 0; } ; @@ -3268,6 +3279,12 @@ member_access $$ = new MemberAccess (new BaseThis (GetLocation ($1)), lt.Value, (TypeArguments) $4, lt.Location); lbag.AddLocation ($$, GetLocation ($2)); } + | AWAIT DOT identifier_inside_body opt_type_argument_list + { + var lt = (LocatedToken) $3; + $$ = new MemberAccess (new SimpleName ("await", ((LocatedToken) $1).Location), lt.Value, (TypeArguments) $4, lt.Location); + lbag.AddLocation ($$, GetLocation ($2)); + } | qualified_alias_member identifier_inside_body opt_type_argument_list { var lt1 = (LocatedToken) $1; @@ -3680,6 +3697,10 @@ anonymous_type_expression // TODO: lbag comma location lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); } + | NEW OPEN_BRACE GENERATE_COMPLETION + { + $$ = new EmptyCompletion (); + } ; anonymous_type_parameters_opt_comma @@ -3707,6 +3728,14 @@ anonymous_type_parameters $$ = a; } + | COMPLETE_COMPLETION + { + $$ = new EmptyCompletion (); + } + | anonymous_type_parameter COMPLETE_COMPLETION + { + $$ = $1; + } ; anonymous_type_parameter @@ -4245,6 +4274,16 @@ additive_expression $$ = new Is ((Expression) $1, null, GetLocation ($2)); } + | AWAIT IS type + { + var lt = (LocatedToken) $1; + $$ = new Is (new SimpleName (lt.Value, lt.Location), (Expression) $3, GetLocation ($2)); + } + | AWAIT AS type + { + var lt = (LocatedToken) $1; + $$ = new As (new SimpleName (lt.Value, lt.Location), (Expression) $3, GetLocation ($2)); + } ; shift_expression @@ -4733,6 +4772,51 @@ boolean_expression } ; +opt_primary_parameters + : /* empty */ + { + $$ = null; + } + | primary_parameters + ; + +primary_parameters + : OPEN_PARENS opt_formal_parameter_list CLOSE_PARENS + { + $$ = $2; + + // Cannot use opt_formal_parameter_list because it can be shared instance for empty parameters + lbag.AppendToMember (current_container, GetLocation ($1), GetLocation ($3)); + } + ; + +opt_primary_parameters_with_class_base + : /* empty */ + { + $$ = null; + } + | class_base + { + $$ = null; + } + | primary_parameters + { + $$ = $1; + } + | primary_parameters class_base OPEN_PARENS + { + ++lexer.parsing_block; + } + opt_argument_list CLOSE_PARENS + { + lbag.AppendToMember (current_container, GetLocation ($3), GetLocation ($6)); + ((Class)current_type).PrimaryConstructorBaseArguments = (Arguments) $5; + --lexer.parsing_block; + + $$ = $1; + } + ; + // // 10 classes // @@ -4754,12 +4838,17 @@ class_declaration push_current_container (c, $3); lbag.AddMember (current_container, GetModifierLocations (), GetLocation ($4)); + valid_param_mod = ParameterModifierType.PrimaryConstructor; } - opt_class_base + opt_primary_parameters_with_class_base opt_type_parameter_constraints_clauses { + valid_param_mod = 0; lexer.ConstraintsParsing = false; + if ($8 != null) + current_type.PrimaryConstructorParameters = (ParametersCompiled) $8; + if ($9 != null) current_container.SetConstraints ((List) $9); @@ -4912,7 +5001,11 @@ modifier opt_class_base : /* empty */ - | COLON type_list + | class_base + ; + +class_base + : COLON type_list { current_type.SetBaseTypes ((List) $2); lbag.AppendToMember (current_type, GetLocation ($1)); @@ -6108,7 +6201,8 @@ catch_clauses var l = (List) $1; Catch c = (Catch) $2; - if (l [l.Count - 1].IsGeneral) { + var prev_catch = l [l.Count - 1]; + if (prev_catch.IsGeneral && prev_catch.Filter == null) { report.Error (1017, c.loc, "Try statement already has an empty catch block"); } @@ -6123,9 +6217,11 @@ opt_identifier ; catch_clause - : CATCH block + : CATCH opt_catch_filter block { - $$ = new Catch ((ExplicitBlock) $2, GetLocation ($1)); + var c = new Catch ((ExplicitBlock) $3, GetLocation ($1)); + c.Filter = (CatchFilterExpression) $2; + $$ = c; } | CATCH open_parens_any type opt_identifier CLOSE_PARENS { @@ -6142,8 +6238,9 @@ catch_clause lbag.AddLocation (c, GetLocation ($2), GetLocation ($5)); $$ = c; } - block_prepared_strict + opt_catch_filter block_prepared { + ((Catch) $6).Filter = (CatchFilterExpression) $7; $$ = $6; } | CATCH open_parens_any error @@ -6182,6 +6279,18 @@ catch_clause } ; +opt_catch_filter + : /* empty */ + | IF open_parens_any expression CLOSE_PARENS + { + if (lang_version <= LanguageVersion.V_5) + FeatureIsNotAvailable (GetLocation ($1), "exception filter"); + + $$ = new CatchFilterExpression ((Expression) $3, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); + } + ; + checked_statement : CHECKED block { @@ -6936,6 +7045,12 @@ doc_cref module.DocumentationBuilder.ParsedParameters = (List)$2; $$ = null; } + | VOID opt_doc_method_sig + { + module.DocumentationBuilder.ParsedBuiltinType = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation ($1)); + module.DocumentationBuilder.ParsedParameters = (List)$2; + $$ = null; + } | builtin_types DOT IDENTIFIER opt_doc_method_sig { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)$1; @@ -6974,7 +7089,7 @@ doc_cref } | OPERATOR overloadable_operator opt_doc_method_sig { - var p = (List)$3 ?? new List (1); + var p = (List)$3; module.DocumentationBuilder.ParsedParameters = p; module.DocumentationBuilder.ParsedOperator = (Operator.OpType) $2; $$ = null; diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs index b0d4acbb8f..9b692bf46c 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs @@ -947,7 +947,27 @@ namespace Mono.CSharp if (c < 0x80) return false; - return Char.IsLetter (c) || Char.GetUnicodeCategory (c) == UnicodeCategory.ConnectorPunctuation; + return is_identifier_part_character_slow_part (c); + } + + static bool is_identifier_part_character_slow_part (char c) + { + if (Char.IsLetter (c)) + return true; + + switch (Char.GetUnicodeCategory (c)) { + case UnicodeCategory.ConnectorPunctuation: + + // combining-character: A Unicode character of classes Mn or Mc + case UnicodeCategory.NonSpacingMark: + case UnicodeCategory.SpacingCombiningMark: + + // decimal-digit-character: A Unicode character of the class Nd + case UnicodeCategory.DecimalDigitNumber: + return true; + } + + return false; } public static bool IsKeyword (string s) @@ -1250,7 +1270,7 @@ namespace Mono.CSharp // Tonizes `?' using custom disambiguous rules to return one // of following tokens: INTERR_NULLABLE, OP_COALESCING, INTERR // - // Tricky expression look like: + // Tricky expression looks like: // // Foo ? a = x ? b : c; // @@ -1329,18 +1349,27 @@ namespace Mono.CSharp int interrs = 1; int colons = 0; int braces = 0; + int parens = 0; // // All shorcuts failed, do it hard way // while ((ntoken = xtoken ()) != Token.EOF) { - if (ntoken == Token.OPEN_BRACE) { + switch (ntoken) { + case Token.OPEN_BRACE: ++braces; continue; - } - - if (ntoken == Token.CLOSE_BRACE) { + case Token.OPEN_PARENS: + case Token.OPEN_PARENS_CAST: + case Token.OPEN_PARENS_LAMBDA: + ++parens; + continue; + case Token.CLOSE_BRACE: --braces; continue; + case Token.CLOSE_PARENS: + if (parens > 0) + --parens; + continue; } if (braces != 0) @@ -1348,6 +1377,9 @@ namespace Mono.CSharp if (ntoken == Token.SEMICOLON) break; + + if (parens != 0) + continue; if (ntoken == Token.COLON) { if (++colons == interrs) @@ -3130,7 +3162,7 @@ namespace Mono.CSharp continue; } - } else if (Char.IsLetter ((char) c) || Char.GetUnicodeCategory ((char) c) == UnicodeCategory.ConnectorPunctuation) { + } else if (is_identifier_part_character_slow_part ((char) c)) { id_builder [pos++] = (char) c; continue; } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs index 213cd62f7f..907e6df0e0 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs @@ -446,7 +446,8 @@ namespace Mono.CSharp { public override bool ContainsEmitWithAwait () { - return false; + var instance = method_group.InstanceExpression; + return instance != null && instance.ContainsEmitWithAwait (); } public static Arguments CreateDelegateMethodArguments (ResolveContext rc, AParametersCollection pd, TypeSpec[] types, Location loc) @@ -581,6 +582,11 @@ namespace Mono.CSharp { ec.Emit (OpCodes.Newobj, constructor_method); } + public override void FlowAnalysis (FlowAnalysisContext fc) { + base.FlowAnalysis (fc); + method_group.FlowAnalysis (fc); + } + void Error_ConversionFailed (ResolveContext ec, MethodSpec method, Expression return_type) { var invoke_method = Delegate.GetInvokeMethod (type); diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs index 34faed5594..35fe585293 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs @@ -303,7 +303,7 @@ namespace Mono.CSharp TypeExpr texpr = left as TypeExpr; if (texpr != null) { - var found = MemberCache.FindNestedType (texpr.Type, ParsedName.Name, ParsedName.Arity); + var found = MemberCache.FindNestedType (texpr.Type, mn.Name, mn.Arity); if (found != null) return new TypeExpression (found, Location.Null); diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs index fc957771e4..593ab6bcbd 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs @@ -540,10 +540,16 @@ namespace Mono.CSharp { return c; } - public virtual void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public virtual void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { - rc.Module.Compiler.Report.Error (182, loc, - "An attribute argument must be a constant expression, typeof expression or array creation expression"); + if (Attribute.IsValidArgumentType (parameterType)) { + rc.Module.Compiler.Report.Error (182, loc, + "An attribute argument must be a constant expression, typeof expression or array creation expression"); + } else { + rc.Module.Compiler.Report.Error (181, loc, + "Attribute constructor parameter has type `{0}', which is not a valid attribute parameter type", + targetType.GetSignatureForError ()); + } } /// @@ -1582,9 +1588,9 @@ namespace Mono.CSharp { Child.Emit (ec); } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { - Child.EncodeAttributeValue (rc, enc, Child.Type); + Child.EncodeAttributeValue (rc, enc, Child.Type, parameterType); } public override void EmitBranchable (EmitContext ec, Label label, bool on_true) @@ -1702,16 +1708,16 @@ namespace Mono.CSharp { return this; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { // Only boxing to object type is supported if (targetType.BuiltinType != BuiltinTypeSpec.Type.Object) { - base.EncodeAttributeValue (rc, enc, targetType); + base.EncodeAttributeValue (rc, enc, targetType, parameterType); return; } enc.Encode (child.Type); - child.EncodeAttributeValue (rc, enc, child.Type); + child.EncodeAttributeValue (rc, enc, child.Type, parameterType); } public override void Emit (EmitContext ec) @@ -2113,15 +2119,15 @@ namespace Mono.CSharp { return c; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { // // LAMESPEC: Reduced conditional expression is allowed as an attribute argument // if (orig_expr is Conditional) - child.EncodeAttributeValue (rc, enc, targetType); + child.EncodeAttributeValue (rc, enc, targetType,parameterType); else - base.EncodeAttributeValue (rc, enc, targetType); + base.EncodeAttributeValue (rc, enc, targetType, parameterType); } } @@ -2780,6 +2786,17 @@ namespace Mono.CSharp { ct = ct.DeclaringType; } while (ct != null); + } else { + var cos = rc.CurrentMemberDefinition.Parent as ClassOrStruct; + if (cos != null && cos.PrimaryConstructorParameters != null) { + foreach (var p in cos.PrimaryConstructorParameters.FixedParameters) { + if (p.Name == Name) { + rc.Report.Error (9007, loc, "Primary constructor parameter `{0}' is not available in this context when using ref or out modifier", + Name); + return null; + } + } + } } if ((restrictions & MemberLookupRestrictions.InvocableOnly) == 0) { @@ -3421,14 +3438,25 @@ namespace Mono.CSharp { if (InstanceExpression == null || InstanceExpression is TypeExpr) { if (InstanceExpression != null || !This.IsThisAvailable (rc, true)) { - if (rc.HasSet (ResolveContext.Options.FieldInitializerScope)) + if (rc.HasSet (ResolveContext.Options.FieldInitializerScope)) { rc.Report.Error (236, loc, "A field initializer cannot reference the nonstatic field, method, or property `{0}'", GetSignatureForError ()); - else - rc.Report.Error (120, loc, - "An object reference is required to access non-static member `{0}'", - GetSignatureForError ()); + } else { + var fe = this as FieldExpr; + if (fe != null && fe.Spec.MemberDefinition is PrimaryConstructorField) { + if (rc.HasSet (ResolveContext.Options.BaseInitializer)) { + rc.Report.Error (9005, loc, "Constructor initializer cannot access primary constructor parameters"); + } else { + rc.Report.Error (9006, loc, "An object reference is required to access primary constructor parameter `{0}'", + fe.Name); + } + } else { + rc.Report.Error (120, loc, + "An object reference is required to access non-static member `{0}'", + GetSignatureForError ()); + } + } InstanceExpression = new CompilerGeneratedThis (rc.CurrentType, loc).Resolve (rc); return false; @@ -4460,7 +4488,7 @@ namespace Mono.CSharp { // // We have not reached end of parameters list due to params or used default parameters // - if (j < candidate_pd.Count && j < best_pd.Count) { + while (j < candidate_pd.Count && j < best_pd.Count) { var cand_param = candidate_pd.FixedParameters [j]; var best_param = best_pd.FixedParameters [j]; @@ -4468,11 +4496,16 @@ namespace Mono.CSharp { // // LAMESPEC: // - // void Foo (params int[]) is better than void Foo (int i = 0) for Foo () - // void Foo (string[] s, string value = null) is better than Foo (string s, params string[]) for Foo (null) + // void Foo (int i = 0) is better than void Foo (params int[]) for Foo () + // void Foo (string[] s, string value = null) is better than Foo (string s, params string[]) for Foo (null) or Foo () // if (cand_param.HasDefaultValue != best_param.HasDefaultValue) - return !candidate_params; + return cand_param.HasDefaultValue; + + if (cand_param.HasDefaultValue) { + ++j; + continue; + } } else { // // Neither is better when not all arguments are provided @@ -4484,6 +4517,8 @@ namespace Mono.CSharp { if (cand_param.HasDefaultValue && best_param.HasDefaultValue) return false; } + + break; } if (candidate_pd.Count != best_pd.Count) @@ -4668,7 +4703,10 @@ namespace Mono.CSharp { ++arg_count; temp = null; } else { - temp = arguments[index]; + if (index == arg_count) + return (i + 1) * 3; + + temp = arguments [index]; // The slot has been taken by positional argument if (temp != null && !(temp is NamedArgument)) @@ -5418,8 +5456,7 @@ namespace Mono.CSharp { // For candidates which match on parameters count report more details about incorrect arguments // if (pm != null) { - int unexpanded_count = ((IParametersMember) best_candidate).Parameters.HasParams ? pm.Parameters.Count - 1 : pm.Parameters.Count; - if (pm.Parameters.Count == arg_count || params_expanded || unexpanded_count == arg_count) { + if (pm.Parameters.Count == arg_count || params_expanded || HasUnfilledParams (best_candidate, pm, args)) { // Reject any inaccessible member if (!best_candidate.IsAccessible (rc) || !best_candidate.DeclaringType.IsAccessible (rc)) { rc.Report.SymbolRelatedToPreviousError (best_candidate); @@ -5473,6 +5510,39 @@ namespace Mono.CSharp { } } + static bool HasUnfilledParams (MemberSpec best_candidate, IParametersMember pm, Arguments args) + { + var p = ((IParametersMember)best_candidate).Parameters; + if (!p.HasParams) + return false; + + string name = null; + for (int i = p.Count - 1; i != 0; --i) { + var fp = p.FixedParameters [i]; + if ((fp.ModFlags & Parameter.Modifier.PARAMS) == 0) + continue; + + name = fp.Name; + break; + } + + foreach (var arg in args) { + var na = arg as NamedArgument; + if (na == null) + continue; + + if (na.Name == name) { + name = null; + break; + } + } + + if (name == null) + return false; + + return args.Count + 1 == pm.Parameters.Count; + } + bool VerifyArguments (ResolveContext ec, ref Arguments args, MemberSpec member, IParametersMember pm, bool chose_params_expanded) { var pd = pm.Parameters; @@ -5797,6 +5867,14 @@ namespace Mono.CSharp { } } + protected override void CloneTo (CloneContext clonectx, Expression target) + { + var t = (FieldExpr) target; + + if (InstanceExpression != null) + t.InstanceExpression = InstanceExpression.Clone (clonectx); + } + public override Expression CreateExpressionTree (ResolveContext ec) { return CreateExpressionTree (ec, true); @@ -6047,7 +6125,7 @@ namespace Mono.CSharp { return; } - if (TypeSpec.IsValueType (InstanceExpression.Type)) + if (TypeSpec.IsValueType (InstanceExpression.Type) && InstanceExpression is VariableReference) return; } @@ -6130,13 +6208,8 @@ namespace Mono.CSharp { public void EmitAssign (EmitContext ec, Expression source, bool leave_copy, bool isCompound) { bool has_await_source = ec.HasSet (BuilderContext.Options.AsyncBody) && source.ContainsEmitWithAwait (); - if (isCompound && !(source is DynamicExpressionStatement)) { - if (has_await_source) { - if (IsInstance) - InstanceExpression = InstanceExpression.EmitToField (ec); - } else { - prepared = true; - } + if (isCompound && !(source is DynamicExpressionStatement) && !has_await_source) { + prepared = true; } if (IsInstance) { @@ -6148,7 +6221,7 @@ namespace Mono.CSharp { source.Emit (ec); - if (leave_copy) { + if (leave_copy || ec.NotifyEvaluatorOnStore) { ec.Emit (OpCodes.Dup); if (!IsStatic) { temp = new LocalTemporary (this.Type); @@ -6165,6 +6238,16 @@ namespace Mono.CSharp { ec.Emit (OpCodes.Stsfld, spec); else ec.Emit (OpCodes.Stfld, spec); + + if (ec.NotifyEvaluatorOnStore) { + if (!IsStatic) + throw new NotImplementedException ("instance field write"); + + if (leave_copy) + ec.Emit (OpCodes.Dup); + + ec.Module.Evaluator.EmitValueChangedCallback (ec, Name, type, loc); + } if (temp != null) { temp.Emit (ec); @@ -6227,7 +6310,6 @@ namespace Mono.CSharp { var temp = ec.GetTemporaryLocal (type); ec.Emit (OpCodes.Stloc, temp); ec.Emit (OpCodes.Ldloca, temp); - ec.FreeTemporaryLocal (temp, type); return; } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs index d17dd9c406..1645b60195 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs @@ -71,6 +71,8 @@ namespace Mono.CSharp readonly ModuleContainer module; readonly ReflectionImporter importer; readonly CompilationSourceFile source_file; + + int? listener_id; public Evaluator (CompilerContext ctx) { @@ -288,6 +290,30 @@ namespace Mono.CSharp return compiled; } + static MethodInfo listener_proxy_value; + internal void EmitValueChangedCallback (EmitContext ec, string name, TypeSpec type, Location loc) + { + if (listener_id == null) + listener_id = ListenerProxy.Register (ModificationListener); + + if (listener_proxy_value == null) + listener_proxy_value = typeof (ListenerProxy).GetMethod ("ValueChanged"); + +#if STATIC + throw new NotSupportedException (); +#else + // object value, int row, int col, string name, int listenerId + if (type.IsStructOrEnum) + ec.Emit (OpCodes.Box, type); + + ec.EmitInt (loc.Row); + ec.EmitInt (loc.Column); + ec.Emit (OpCodes.Ldstr, name); + ec.EmitInt (listener_id.Value); + ec.Emit (OpCodes.Call, listener_proxy_value); +#endif + } + /// /// Evaluates and expression or statement and returns any result values. /// @@ -338,6 +364,11 @@ namespace Mono.CSharp Console.WriteLine ("Interrupted!\n{0}", e); } finally { invoking = false; + + if (listener_id != null) { + ListenerProxy.Unregister (listener_id.Value); + listener_id = null; + } } // @@ -445,6 +476,9 @@ namespace Mono.CSharp return result; } + // Experimental + public Action ModificationListener { get; set; } + enum InputKind { EOF, StatementOrExpression, @@ -734,6 +768,7 @@ namespace Mono.CSharp } module.EmitContainer (); + if (Report.Errors != 0){ if (undo != null) undo.ExecuteUndo (); @@ -1230,10 +1265,13 @@ namespace Mono.CSharp if (undo_actions == null) undo_actions = new List (); - var existing = current_container.Containers.FirstOrDefault (l => l.Basename == tc.Basename); - if (existing != null) { - current_container.RemoveContainer (existing); - undo_actions.Add (() => current_container.AddTypeContainer (existing)); + if (current_container.Containers != null) + { + var existing = current_container.Containers.FirstOrDefault (l => l.Basename == tc.Basename); + if (existing != null) { + current_container.RemoveContainer (existing); + undo_actions.Add (() => current_container.AddTypeContainer (existing)); + } } undo_actions.Add (() => current_container.RemoveContainer (tc)); @@ -1251,5 +1289,38 @@ namespace Mono.CSharp undo_actions = null; } } - + + static class ListenerProxy + { + static readonly Dictionary> listeners = new Dictionary> (); + + static int counter; + + public static int Register (Action listener) + { + lock (listeners) { + var id = counter++; + listeners.Add (id, listener); + return id; + } + } + + public static void Unregister (int listenerId) + { + lock (listeners) { + listeners.Remove (listenerId); + } + } + + public static void ValueChanged (object value, int row, int col, string name, int listenerId) + { + Action action; + lock (listeners) { + if (!listeners.TryGetValue (listenerId, out action)) + return; + } + + action (name, row, col, value); + } + } } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs index 176f5339ea..cae61ece47 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs @@ -301,10 +301,33 @@ namespace Mono.CSharp return new ULongConstant (ec.BuiltinTypes, ~((ULongConstant) e).Value, e.Location); } if (e is EnumConstant) { - e = TryReduceConstant (ec, ((EnumConstant)e).Child); - if (e != null) - e = new EnumConstant (e, expr_type); - return e; + var res = TryReduceConstant (ec, ((EnumConstant)e).Child); + if (res != null) { + // + // Numeric promotion upgraded types to int but for enum constant + // original underlying constant type is needed + // + if (res.Type.BuiltinType == BuiltinTypeSpec.Type.Int) { + int v = ((IntConstant) res).Value; + switch (((EnumConstant) e).Child.Type.BuiltinType) { + case BuiltinTypeSpec.Type.UShort: + res = new UShortConstant (ec.BuiltinTypes, (ushort) v, e.Location); + break; + case BuiltinTypeSpec.Type.Short: + res = new ShortConstant (ec.BuiltinTypes, (short) v, e.Location); + break; + case BuiltinTypeSpec.Type.Byte: + res = new ByteConstant (ec.BuiltinTypes, (byte) v, e.Location); + break; + case BuiltinTypeSpec.Type.SByte: + res = new SByteConstant (ec.BuiltinTypes, (sbyte) v, e.Location); + break; + } + } + + res = new EnumConstant (res, expr_type); + } + return res; } return null; } @@ -1406,8 +1429,9 @@ namespace Mono.CSharp return null; if (probe_type_expr.IsStatic) { - ec.Report.Error (-244, loc, "The `{0}' operator cannot be applied to an operand of a static type", - OperatorName); + ec.Report.Error (7023, loc, "The second operand of `is' or `as' operator cannot be static type `{0}'", + probe_type_expr.GetSignatureForError ()); + return null; } if (expr.Type.IsPointer || probe_type_expr.IsPointer) { @@ -1425,6 +1449,11 @@ namespace Mono.CSharp return this; } + public override void EmitSideEffect (EmitContext ec) + { + expr.EmitSideEffect (ec); + } + public override void FlowAnalysis (FlowAnalysisContext fc) { expr.FlowAnalysis (fc); @@ -1495,17 +1524,20 @@ namespace Mono.CSharp } ec.Emit (on_true ? OpCodes.Brtrue : OpCodes.Brfalse, target); } - - Expression CreateConstantResult (ResolveContext ec, bool result) + + Expression CreateConstantResult (ResolveContext rc, bool result) { if (result) - ec.Report.Warning (183, 1, loc, "The given expression is always of the provided (`{0}') type", + rc.Report.Warning (183, 1, loc, "The given expression is always of the provided (`{0}') type", probe_type_expr.GetSignatureForError ()); else - ec.Report.Warning (184, 1, loc, "The given expression is never of the provided (`{0}') type", + rc.Report.Warning (184, 1, loc, "The given expression is never of the provided (`{0}') type", probe_type_expr.GetSignatureForError ()); - return ReducedExpression.Create (new BoolConstant (ec.BuiltinTypes, result, loc), this); + var c = new BoolConstant (rc.BuiltinTypes, result, loc); + return expr.IsSideEffectFree ? + ReducedExpression.Create (c, this) : + new SideEffectConstant (c, this, loc); } protected override Expression DoResolve (ResolveContext ec) @@ -1604,12 +1636,15 @@ namespace Mono.CSharp return CreateConstantResult (ec, !c.IsNull); // - // Do not optimize for imported type + // Do not optimize for imported type or dynamic type // if (d.MemberDefinition.IsImported && d.BuiltinType != BuiltinTypeSpec.Type.None && d.MemberDefinition.DeclaringAssembly != t.MemberDefinition.DeclaringAssembly) { return this; } + + if (d.BuiltinType == BuiltinTypeSpec.Type.Dynamic) + return this; // // Turn is check into simple null check for implicitly convertible reference types @@ -2584,7 +2619,9 @@ namespace Mono.CSharp public override void FlowAnalysis (FlowAnalysisContext fc) { if ((oper & Operator.LogicalMask) == 0) { + fc.DefiniteAssignmentOnTrue = fc.DefiniteAssignmentOnFalse = fc.DefiniteAssignment; left.FlowAnalysis (fc); + fc.DefiniteAssignmentOnTrue = fc.DefiniteAssignmentOnFalse = fc.DefiniteAssignment; right.FlowAnalysis (fc); return; } @@ -2936,8 +2973,8 @@ namespace Mono.CSharp } } - left = ConvertEnumOperandToUnderlyingType (rc, left); - right = ConvertEnumOperandToUnderlyingType (rc, right); + left = ConvertEnumOperandToUnderlyingType (rc, left, r.IsNullableType); + right = ConvertEnumOperandToUnderlyingType (rc, right, l.IsNullableType); return expr; } } else if ((oper == Operator.Addition || oper == Operator.Subtraction)) { @@ -2952,8 +2989,8 @@ namespace Mono.CSharp // which is not ambiguous with predefined enum operators // if (expr != null) { - left = ConvertEnumOperandToUnderlyingType (rc, left); - right = ConvertEnumOperandToUnderlyingType (rc, right); + left = ConvertEnumOperandToUnderlyingType (rc, left, false); + right = ConvertEnumOperandToUnderlyingType (rc, right, false); return expr; } @@ -3451,6 +3488,13 @@ namespace Mono.CSharp } else { LocalVariable temp = LocalVariable.CreateCompilerGenerated (rc.BuiltinTypes.Bool, rc.CurrentBlock, loc); + if (!Convert.ImplicitConversionExists (rc, left, temp.Type) && (oper == Operator.LogicalAnd ? GetOperatorFalse (rc, left, loc) : GetOperatorTrue (rc, left, loc)) == null) { + rc.Report.Error (7083, left.Location, + "Expression must be implicitly convertible to Boolean or its type `{0}' must define operator `{1}'", + lt.GetSignatureForError (), oper == Operator.LogicalAnd ? "false" : "true"); + return null; + } + args.Add (new Argument (temp.CreateReferenceExpression (rc, loc).Resolve (rc))); args.Add (new Argument (right)); right = new DynamicExpressionStatement (this, args, loc); @@ -3756,7 +3800,7 @@ namespace Mono.CSharp return null; } - static Expression ConvertEnumOperandToUnderlyingType (ResolveContext rc, Expression expr) + static Expression ConvertEnumOperandToUnderlyingType (ResolveContext rc, Expression expr, bool liftType) { TypeSpec underlying_type; if (expr.Type.IsNullableType) { @@ -3780,7 +3824,7 @@ namespace Mono.CSharp break; } - if (expr.Type.IsNullableType) + if (expr.Type.IsNullableType || liftType) underlying_type = rc.Module.PredefinedTypes.Nullable.TypeSpec.MakeGenericType (rc.Module, new[] { underlying_type }); if (expr.Type == underlying_type) @@ -4062,12 +4106,12 @@ namespace Mono.CSharp if (!TypeSpec.IsReferenceType (l) || !TypeSpec.IsReferenceType (r)) return null; - if (l.BuiltinType == BuiltinTypeSpec.Type.String || l.BuiltinType == BuiltinTypeSpec.Type.Delegate || MemberCache.GetUserOperator (l, CSharp.Operator.OpType.Equality, false) != null) + if (l.BuiltinType == BuiltinTypeSpec.Type.String || l.BuiltinType == BuiltinTypeSpec.Type.Delegate || l.IsDelegate || MemberCache.GetUserOperator (l, CSharp.Operator.OpType.Equality, false) != null) ec.Report.Warning (253, 2, loc, "Possible unintended reference comparison. Consider casting the right side expression to type `{0}' to get value comparison", l.GetSignatureForError ()); - if (r.BuiltinType == BuiltinTypeSpec.Type.String || r.BuiltinType == BuiltinTypeSpec.Type.Delegate || MemberCache.GetUserOperator (r, CSharp.Operator.OpType.Equality, false) != null) + if (r.BuiltinType == BuiltinTypeSpec.Type.String || r.BuiltinType == BuiltinTypeSpec.Type.Delegate || r.IsDelegate || MemberCache.GetUserOperator (r, CSharp.Operator.OpType.Equality, false) != null) ec.Report.Warning (252, 2, loc, "Possible unintended reference comparison. Consider casting the left side expression to type `{0}' to get value comparison", r.GetSignatureForError ()); @@ -6746,7 +6790,7 @@ namespace Mono.CSharp if (!Emit (ec, v)) v.Emit (ec); } - + public override void EmitStatement (EmitContext ec) { LocalTemporary v = null; @@ -7552,7 +7596,9 @@ namespace Mono.CSharp public override void Emit (EmitContext ec) { - EmitToFieldSource (ec); + var await_field = EmitToFieldSource (ec); + if (await_field != null) + await_field.Emit (ec); } protected sealed override FieldExpr EmitToFieldSource (EmitContext ec) @@ -7606,18 +7652,18 @@ namespace Mono.CSharp return await_stack_field; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { // no multi dimensional or jagged arrays if (arguments.Count != 1 || array_element_type.IsArray) { - base.EncodeAttributeValue (rc, enc, targetType); + base.EncodeAttributeValue (rc, enc, targetType, parameterType); return; } // No array covariance, except for array -> object if (type != targetType) { if (targetType.BuiltinType != BuiltinTypeSpec.Type.Object) { - base.EncodeAttributeValue (rc, enc, targetType); + base.EncodeAttributeValue (rc, enc, targetType, parameterType); return; } @@ -7631,7 +7677,7 @@ namespace Mono.CSharp if (array_data == null) { IntConstant ic = arguments[0] as IntConstant; if (ic == null || !ic.IsDefaultValue) { - base.EncodeAttributeValue (rc, enc, targetType); + base.EncodeAttributeValue (rc, enc, targetType, parameterType); } else { enc.Encode (0); } @@ -7641,7 +7687,7 @@ namespace Mono.CSharp enc.Encode (array_data.Count); foreach (var element in array_data) { - element.EncodeAttributeValue (rc, enc, array_element_type); + element.EncodeAttributeValue (rc, enc, array_element_type, parameterType); } } @@ -8369,7 +8415,7 @@ namespace Mono.CSharp return false; } - public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType) + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) { // Target type is not System.Type therefore must be object // and we need to use different encoding sequence @@ -8804,7 +8850,7 @@ namespace Mono.CSharp // with disable flow analysis as we don't know whether left side expression // is used as variable or type // - if (expr is VariableReference || expr is ConstantExpr || expr is Linq.TransparentMemberAccess) { + if (expr is VariableReference || expr is ConstantExpr || expr is Linq.TransparentMemberAccess || expr is EventExpr) { expr = expr.Resolve (rc); } else if (expr is TypeParameterExpr) { expr.Error_UnexpectedKind (rc, flags, sn.Location); @@ -9429,6 +9475,10 @@ namespace Mono.CSharp { var ac = (ArrayContainer) ea.Expr.Type; + if (!has_await_args.HasValue && ec.HasSet (BuilderContext.Options.AsyncBody) && ea.Arguments.ContainsEmitWithAwait ()) { + LoadInstanceAndArguments (ec, false, true); + } + LoadInstanceAndArguments (ec, false, false); if (ac.Element.IsGenericParameter && mode == AddressOp.Load) @@ -9625,6 +9675,7 @@ namespace Mono.CSharp // CallRef (ref a[await Task.Factory.StartNew (() => 1)]); // ea.Expr = ea.Expr.EmitToField (ec); + ea.Arguments = ea.Arguments.Emit (ec, false, true); return this; } @@ -10026,6 +10077,10 @@ namespace Mono.CSharp loc = Location.Null; } + protected override void CloneTo (CloneContext clonectx, Expression target) + { + } + public override bool ContainsEmitWithAwait () { return false; @@ -11079,6 +11134,20 @@ namespace Mono.CSharp return e; } + public override void Emit (EmitContext ec) + { + if (method == null && TypeSpec.IsValueType (type) && initializers.Initializers.Count > 1 && ec.HasSet (BuilderContext.Options.AsyncBody) && initializers.ContainsEmitWithAwait ()) { + var fe = ec.GetTemporaryField (type); + + if (!Emit (ec, fe)) + fe.Emit (ec); + + return; + } + + base.Emit (ec); + } + public override bool Emit (EmitContext ec, IMemoryLocation target) { bool left_on_stack; @@ -11095,6 +11164,8 @@ namespace Mono.CSharp LocalTemporary temp = null; instance = target as LocalTemporary; + if (instance == null) + instance = target as StackFieldExpr; if (instance == null) { if (!left_on_stack) { @@ -11203,6 +11274,7 @@ namespace Mono.CSharp type.Define (); if ((ec.Report.Errors - errors) == 0) { parent.Module.AddAnonymousType (type); + type.PrepareEmit (); } return type; @@ -11333,4 +11405,13 @@ namespace Mono.CSharp Name, initializer); } } + + public class CatchFilterExpression : BooleanExpression + { + public CatchFilterExpression (Expression expr, Location loc) + : base (expr) + { + this.loc = loc; + } + } } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs index d2aa3b38ec..b7f686e027 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs @@ -222,7 +222,9 @@ namespace Mono.CSharp if (MemberType.IsStatic) Error_VariableOfStaticClass (Location, GetSignatureForError (), MemberType, Report); - CheckBase (); + if (!IsCompilerGenerated) + CheckBase (); + IsTypePermitted (); } @@ -693,4 +695,39 @@ namespace Mono.CSharp return true; } } + + class PrimaryConstructorField : Field + { + // + // Proxy resolved parameter type expression to avoid type double resolve + // and problems with correct resolve context on partial classes + // + sealed class TypeExpressionFromParameter : TypeExpr + { + Parameter parameter; + + public TypeExpressionFromParameter (Parameter parameter) + { + this.parameter = parameter; + eclass = ExprClass.Type; + loc = parameter.Location; + } + + public override TypeSpec ResolveAsType (IMemberContext mc) + { + return parameter.Type; + } + } + + public PrimaryConstructorField (TypeDefinition parent, Parameter parameter) + : base (parent, new TypeExpressionFromParameter (parameter), Modifiers.PRIVATE, new MemberName (parameter.Name, parameter.Location), null) + { + caching_flags |= Flags.IsUsed | Flags.IsAssigned; + } + + public override string GetSignatureForError () + { + return MemberName.Name; + } + } } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs index 3470c9464c..123534d9f9 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs @@ -268,8 +268,7 @@ namespace Mono.CSharp { iface_found = true; continue; } - - + var constraint_tp = type as TypeParameterSpec; if (constraint_tp != null) { if (tparam_types == null) { @@ -320,6 +319,12 @@ namespace Mono.CSharp { } } + if (constraint_tp.TypeArguments != null) { + var eb = constraint_tp.GetEffectiveBase (); + if (eb != null && !CheckConflictingInheritedConstraint (spec, eb, spec.BaseType, context, constraint.Location)) + break; + } + if (constraint_tp.HasSpecialStruct) { context.Module.Compiler.Report.Error (456, constraint.Location, "Type parameter `{0}' has the `struct' constraint, so it cannot be used as a constraint for `{1}'", @@ -770,6 +775,7 @@ namespace Mono.CSharp { int tp_pos; TypeSpec[] targs; TypeSpec[] ifaces_defined; + TypeSpec effective_base; // // Creates type owned type parameter @@ -1033,23 +1039,27 @@ namespace Mono.CSharp { return BaseType.IsStruct ? BaseType.BaseType : BaseType; } - var types = targs; - if (HasTypeConstraint) { - Array.Resize (ref types, types.Length + 1); + if (effective_base != null) + return effective_base; + + var types = new TypeSpec [HasTypeConstraint ? targs.Length + 1 : targs.Length]; - for (int i = 0; i < types.Length - 1; ++i) { - types[i] = types[i].BaseType; + for (int i = 0; i < targs.Length; ++i) { + var t = targs [i]; + + // Same issue as above, inherited constraints can be of struct type + if (t.IsStruct) { + types [i] = t.BaseType; + continue; } - types[types.Length - 1] = BaseType; - } else { - types = types.Select (l => l.BaseType).ToArray (); + types [i] = ((TypeParameterSpec)t).GetEffectiveBase (); } - if (types != null) - return Convert.FindMostEncompassedType (types); + if (HasTypeConstraint) + types [types.Length - 1] = BaseType; - return BaseType; + return effective_base = Convert.FindMostEncompassedType (types); } public override string GetSignatureForDocumentation () @@ -1313,12 +1323,17 @@ namespace Mono.CSharp { if (targs != null) { foreach (var ta in targs) { - var b_type = ta.BaseType; - if (b_type.BuiltinType != BuiltinTypeSpec.Type.Object && b_type.BuiltinType != BuiltinTypeSpec.Type.ValueType) - cache.AddBaseType (b_type); - var tps = ta as TypeParameterSpec; - var ifaces = tps != null ? tps.InterfacesDefined : ta.Interfaces; + IList ifaces; + if (tps != null) { + var b_type = tps.GetEffectiveBase (); + if (b_type != null && b_type.BuiltinType != BuiltinTypeSpec.Type.Object && b_type.BuiltinType != BuiltinTypeSpec.Type.ValueType) + cache.AddBaseType (b_type); + + ifaces = tps.InterfacesDefined; + } else { + ifaces = ta.Interfaces; + } if (ifaces != null) { foreach (var iface_type in ifaces) { @@ -1340,7 +1355,15 @@ namespace Mono.CSharp { if (TypeArguments != null) { foreach (var t in TypeArguments) { - if (((TypeParameterSpec) t).IsConvertibleToInterface (iface)) + var tps = t as TypeParameterSpec; + if (tps != null) { + if (tps.IsConvertibleToInterface (iface)) + return true; + + continue; + } + + if (t.ImplementsInterface (iface, false)) return true; } } @@ -1448,13 +1471,18 @@ namespace Mono.CSharp { if (tp != null) return Inflate (tp); - var ac = type as ArrayContainer; - if (ac != null) { - var et = Inflate (ac.Element); - if (et != ac.Element) - return ArrayContainer.MakeType (context.Module, et, ac.Rank); + var ec = type as ElementTypeSpec; + if (ec != null) { + var et = Inflate (ec.Element); + if (et != ec.Element) { + var ac = ec as ArrayContainer; + if (ac != null) + return ArrayContainer.MakeType (context.Module, et, ac.Rank); + + throw new NotImplementedException (); + } - return ac; + return ec; } if (type.Kind == MemberKind.MissingType) @@ -2163,6 +2191,8 @@ namespace Mono.CSharp { atypes = new TypeSpec [count]; + var errors = ec.Module.Compiler.Report.Errors; + for (int i = 0; i < count; i++){ var te = args[i].ResolveAsType (ec); if (te == null) { @@ -2186,7 +2216,7 @@ namespace Mono.CSharp { } } - if (!ok) + if (!ok || errors != ec.Module.Compiler.Report.Errors) atypes = null; return ok; @@ -2406,6 +2436,8 @@ namespace Mono.CSharp { return null; TypeSpec[] atypes = args.Arguments; + if (atypes == null) + return null; // // Now bind the parameters diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs index 0d3c19af9a..8b45f88a91 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs @@ -204,10 +204,13 @@ namespace Mono.CSharp protected StateMachine (ParametersBlock block, TypeDefinition parent, MemberBase host, TypeParameters tparams, string name, MemberKind kind) : base (block, parent, host, tparams, name, kind) { + OriginalTypeParameters = tparams; } #region Properties + public TypeParameters OriginalTypeParameters { get; private set; } + public StateMachineMethod StateMachineMethod { get { return method; @@ -721,7 +724,6 @@ namespace Mono.CSharp // The state as we generate the machine // Label move_next_ok; - Label iterator_body_end; protected Label move_next_error; LocalBuilder skip_finally; protected LocalBuilder current_pc; @@ -735,11 +737,7 @@ namespace Mono.CSharp #region Properties - public Label BodyEnd { - get { - return iterator_body_end; - } - } + public Label BodyEnd { get; set; } public LocalBuilder CurrentPC { @@ -827,11 +825,11 @@ namespace Mono.CSharp // We only care if the PC is zero (start executing) or non-zero (don't do anything) ec.Emit (OpCodes.Brtrue, move_next_error); - iterator_body_end = ec.DefineLabel (); + BodyEnd = ec.DefineLabel (); block.EmitEmbedded (ec); - ec.MarkLabel (iterator_body_end); + ec.MarkLabel (BodyEnd); EmitMoveNextEpilogue (ec); @@ -890,11 +888,11 @@ namespace Mono.CSharp ec.MarkLabel (labels[0]); - iterator_body_end = ec.DefineLabel (); + BodyEnd = ec.DefineLabel (); block.EmitEmbedded (ec); - ec.MarkLabel (iterator_body_end); + ec.MarkLabel (BodyEnd); if (async_init != null) { var catch_value = LocalVariable.CreateCompilerGenerated (ec.Module.Compiler.BuiltinTypes.Exception, block, Location); diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs index 5b9d6e6479..82acb67b16 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs @@ -566,11 +566,7 @@ namespace Mono.CSharp { for (int i = 0; i < applicable.Count; ++i) { var entry = applicable [i]; - if ((entry.Modifiers & Modifiers.PRIVATE) != 0) - continue; - - if ((entry.Modifiers & Modifiers.AccessibilityMask) == Modifiers.INTERNAL && - !entry.DeclaringType.MemberDefinition.IsInternalAsPublic (member.Module.DeclaringAssembly)) + if ((entry.Modifiers & Modifiers.PUBLIC) == 0 && !entry.IsAccessible (member)) continue; // @@ -701,6 +697,14 @@ namespace Mono.CSharp { if ((name_entry.Modifiers & Modifiers.STATIC) != 0) continue; + // + // Ignore user private fields for definite assignment. This is sort of unexpected but + // rationale is to have consistent results when using reference assemblies which don't + // include any private fields and full assemblies + // + if ((name_entry.Modifiers & (Modifiers.PRIVATE | Modifiers.BACKING_FIELD)) == Modifiers.PRIVATE) + continue; + // // Fixed size buffers are not subject to definite assignment checking // diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs index 86b4d8e765..c74e7f3f33 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs @@ -563,6 +563,12 @@ namespace Mono.CSharp { if ((ModFlags & extern_static) != extern_static) { Report.Error (601, a.Location, "The DllImport attribute must be specified on a method marked `static' and `extern'"); } + + if (MemberName.IsGeneric || Parent.IsGenericOrParentIsGeneric) { + Report.Error (7042, a.Location, + "The DllImport attribute cannot be applied to a method that is generic or contained in a generic type"); + } + is_external_implementation = true; } @@ -719,6 +725,11 @@ namespace Mono.CSharp { if (MethodData != null) MethodData.Emit (Parent); + if (block != null && block.StateMachine is AsyncTaskStorey) { + var psm = Module.PredefinedAttributes.AsyncStateMachine; + psm.EmitAttribute (MethodBuilder, block.StateMachine); + } + if ((ModFlags & Modifiers.PARTIAL) == 0) Block = null; } @@ -1101,61 +1112,61 @@ namespace Mono.CSharp { } for (int i = 0; i < tparams.Count; ++i) { - var tp = tparams[i]; + var tp = tparams [i]; - if (!tp.ResolveConstraints (this)) + if (base_tparams == null) { + tp.ResolveConstraints (this); continue; + } // // Copy base constraints for override/explicit methods // - if (base_tparams != null) { - var base_tparam = base_tparams[i]; - var local_tparam = tp.Type; - local_tparam.SpecialConstraint = base_tparam.SpecialConstraint; + var base_tparam = base_tparams [i]; + var local_tparam = tp.Type; + local_tparam.SpecialConstraint = base_tparam.SpecialConstraint; - var inflator = new TypeParameterInflator (this, CurrentType, base_decl_tparams, base_targs); - base_tparam.InflateConstraints (inflator, local_tparam); + var inflator = new TypeParameterInflator (this, CurrentType, base_decl_tparams, base_targs); + base_tparam.InflateConstraints (inflator, local_tparam); - // - // Check all type argument constraints for possible collision or unification - // introduced by inflating inherited constraints in this context - // - // Conflict example: - // - // class A { virtual void Foo () where U : class, T {} } - // class B : A { override void Foo {} } - // - var local_tparam_targs = local_tparam.TypeArguments; - if (local_tparam_targs != null) { - for (int ii = 0; ii < local_tparam_targs.Length; ++ii) { - var ta = local_tparam_targs [ii]; - if (!ta.IsClass && !ta.IsStruct) - continue; - - TypeSpec[] unique_tparams = null; - for (int iii = ii + 1; iii < local_tparam_targs.Length; ++iii) { - // - // Remove any identical or unified constraint types - // - var tparam_checked = local_tparam_targs[iii]; - if (TypeSpecComparer.IsEqual (ta, tparam_checked) || TypeSpec.IsBaseClass (ta, tparam_checked, false)) { - unique_tparams = new TypeSpec[local_tparam_targs.Length - 1]; - Array.Copy (local_tparam_targs, 0, unique_tparams, 0, iii); - Array.Copy (local_tparam_targs, iii + 1, unique_tparams, iii, local_tparam_targs.Length - iii - 1); - } else if (!TypeSpec.IsBaseClass (tparam_checked, ta, false)) { - Constraints.Error_ConflictingConstraints (this, local_tparam, ta, tparam_checked, Location); - } - } - - if (unique_tparams != null) { - local_tparam_targs = unique_tparams; - local_tparam.TypeArguments = local_tparam_targs; - continue; + // + // Check all type argument constraints for possible collision or unification + // introduced by inflating inherited constraints in this context + // + // Conflict example: + // + // class A { virtual void Foo () where U : class, T {} } + // class B : A { override void Foo {} } + // + var local_tparam_targs = local_tparam.TypeArguments; + if (local_tparam_targs != null) { + for (int ii = 0; ii < local_tparam_targs.Length; ++ii) { + var ta = local_tparam_targs [ii]; + if (!ta.IsClass && !ta.IsStruct) + continue; + + TypeSpec[] unique_tparams = null; + for (int iii = ii + 1; iii < local_tparam_targs.Length; ++iii) { + // + // Remove any identical or unified constraint types + // + var tparam_checked = local_tparam_targs [iii]; + if (TypeSpecComparer.IsEqual (ta, tparam_checked) || TypeSpec.IsBaseClass (ta, tparam_checked, false)) { + unique_tparams = new TypeSpec[local_tparam_targs.Length - 1]; + Array.Copy (local_tparam_targs, 0, unique_tparams, 0, iii); + Array.Copy (local_tparam_targs, iii + 1, unique_tparams, iii, local_tparam_targs.Length - iii - 1); + } else if (!TypeSpec.IsBaseClass (tparam_checked, ta, false)) { + Constraints.Error_ConflictingConstraints (this, local_tparam, ta, tparam_checked, Location); } + } - Constraints.CheckConflictingInheritedConstraint (local_tparam, ta, this, Location); + if (unique_tparams != null) { + local_tparam_targs = unique_tparams; + local_tparam.TypeArguments = local_tparam_targs; + continue; } + + Constraints.CheckConflictingInheritedConstraint (local_tparam, ta, this, Location); } } } @@ -1343,12 +1354,6 @@ namespace Mono.CSharp { } } - if (block != null && block.StateMachine is AsyncTaskStorey) { - var psm = Module.PredefinedAttributes.AsyncStateMachine; - - psm.EmitAttribute (MethodBuilder, block.StateMachine); - } - if ((ModFlags & Modifiers.METHOD_EXTENSION) != 0) Module.PredefinedAttributes.Extension.EmitAttribute (MethodBuilder); @@ -1524,8 +1529,8 @@ namespace Mono.CSharp { } class GeneratedBaseInitializer: ConstructorBaseInitializer { - public GeneratedBaseInitializer (Location loc): - base (null, loc) + public GeneratedBaseInitializer (Location loc, Arguments arguments) + : base (arguments, loc) { } } @@ -1585,6 +1590,8 @@ namespace Mono.CSharp { } } + public bool IsPrimaryConstructor { get; set; } + MethodBase IMethodDefinition.Metadata { get { @@ -1673,6 +1680,16 @@ namespace Mono.CSharp { if (!CheckBase ()) return false; + if (Parent.PrimaryConstructorParameters != null && !IsPrimaryConstructor) { + if (Parent.Kind == MemberKind.Struct) { + Report.Error (9009, Location, "`{0}': Structs with primary constructor cannot have explicit constructor", + GetSignatureForError ()); + } else if (Initializer == null || Initializer is ConstructorBaseInitializer) { + Report.Error (9002, Location, "`{0}': Instance constructor of type with primary constructor must specify `this' constructor initializer", + GetSignatureForError ()); + } + } + var ca = ModifiersExtensions.MethodAttr (ModFlags) | MethodAttributes.RTSpecialName | MethodAttributes.SpecialName; ConstructorBuilder = Parent.TypeBuilder.DefineConstructor ( @@ -1744,7 +1761,7 @@ namespace Mono.CSharp { // block.AddThisVariable (bc); } else if (Parent.PartialContainer.Kind == MemberKind.Class) { - Initializer = new GeneratedBaseInitializer (Location); + Initializer = new GeneratedBaseInitializer (Location, null); } } @@ -1975,7 +1992,7 @@ namespace Mono.CSharp { return false; } } else { - if (implementing != null) { + if (implementing != null && !optional) { if (!method.IsAccessor) { if (implementing.IsAccessor) { container.Compiler.Report.SymbolRelatedToPreviousError (implementing); @@ -2461,6 +2478,11 @@ namespace Mono.CSharp { return false; } + public void PrepareEmit () + { + method_data.DefineMethodBuilder (Parent.PartialContainer, ParameterInfo); + } + public override void WriteDebugSymbol (MonoSymbolFile file) { if (method_data != null) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs index 19ec40870e..566c62af3a 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs @@ -529,6 +529,11 @@ namespace Mono.CSharp.Nullable return null; Expression res = base.ResolveOperator (ec, unwrap); + if (res == null) { + Error_OperatorCannotBeApplied (ec, loc, OperName (Oper), Expr.Type); + return null; + } + if (res != this) { if (user_operator == null) return res; @@ -1153,26 +1158,25 @@ namespace Mono.CSharp.Nullable // Constant lc = left as Constant; if (lc != null && !lc.IsDefaultValue) - return ReducedExpression.Create (lc, this); + return ReducedExpression.Create (lc, this, false); // // Reduce (left ?? null) to left OR (null-constant ?? right) to right // - if (right.IsNull || lc != null) - return ReducedExpression.Create (lc != null ? right : left, this); + if (right.IsNull || lc != null) { + // + // Special case null ?? null + // + if (right.IsNull && ltype == right.Type) + return null; + + return ReducedExpression.Create (lc != null ? right : left, this, false); + } right = Convert.ImplicitConversion (ec, right, ltype, loc); type = ltype; return this; } - - // - // Special case null ?? null - // - if (ltype == right.Type) { - type = ltype; - return this; - } } else { return null; } @@ -1185,7 +1189,7 @@ namespace Mono.CSharp.Nullable // Reduce (null ?? right) to right // if (left.IsNull) - return ReducedExpression.Create (right, this).Resolve (ec); + return ReducedExpression.Create (right, this, false).Resolve (ec); left = Convert.ImplicitConversion (ec, unwrap ?? left, rtype, loc); type = rtype; @@ -1229,7 +1233,15 @@ namespace Mono.CSharp.Nullable unwrap.EmitCheck (ec); ec.Emit (OpCodes.Brfalse, is_null_label); - left.Emit (ec); + // + // When both expressions are nullable the unwrap + // is needed only for null check not for value uwrap + // + if (type.IsNullableType && TypeSpecComparer.IsEqual (NullableInfo.GetUnderlyingType (type), unwrap.Type)) + unwrap.Load (ec); + else + left.Emit (ec); + ec.Emit (OpCodes.Br, end_label); ec.MarkLabel (is_null_label); diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs index da2b13e4ab..f1215173cb 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs @@ -223,6 +223,7 @@ namespace Mono.CSharp { } static readonly string[] attribute_targets = new string[] { "param" }; + static readonly string[] attribute_targets_primary = new string[] { "param", "field" }; FullNamedExpression texpr; Modifier modFlags; @@ -233,6 +234,7 @@ namespace Mono.CSharp { protected int idx; public bool HasAddressTaken; + Constructor primary_constructor; TemporaryVariableReference expr_tree_variable; HoistedParameter hoisted_variant; @@ -307,7 +309,7 @@ namespace Mono.CSharp { public override string[] ValidAttributeTargets { get { - return attribute_targets; + return primary_constructor != null ? attribute_targets_primary : attribute_targets; } } @@ -315,6 +317,12 @@ namespace Mono.CSharp { public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) { + if (a.Target == AttributeTargets.Field) { + var field = MemberCache.FindMember (primary_constructor.Spec.DeclaringType, MemberFilter.Field (name, parameter_type), BindingRestriction.DeclaredOnly); + ((Field)field.MemberDefinition).ApplyAttributeBuilder (a, ctor, cdata, pa); + return; + } + if (a.Type == pa.In && ModFlags == Modifier.OUT) { a.Report.Error (36, a.Location, "An out parameter cannot have the `In' attribute"); return; @@ -371,6 +379,15 @@ namespace Mono.CSharp { return member.IsAccessibleAs (parameter_type); } + bool IsValidCallerContext (MemberCore memberContext) + { + var m = memberContext as Method; + if (m != null) + return !m.IsPartialImplementation; + + return true; + } + // // Resolve is used in method definitions // @@ -382,6 +399,10 @@ namespace Mono.CSharp { if (attributes != null) attributes.AttachTo (this, rc); + var ctor = rc.CurrentMemberDefinition as Constructor; + if (ctor != null && ctor.IsPrimaryConstructor) + primary_constructor = ctor; + parameter_type = texpr.ResolveAsType (rc); if (parameter_type == null) return null; @@ -416,6 +437,7 @@ namespace Mono.CSharp { { var pa = rc.Module.PredefinedAttributes; TypeSpec caller_type; + Attribute callerMemberName = null, callerFilePath = null; foreach (var attr in attributes.Attrs) { var atype = attr.ResolveTypeForComparison (); @@ -430,7 +452,14 @@ namespace Mono.CSharp { caller_type.GetSignatureForError (), parameter_type.GetSignatureForError ()); } + if (!IsValidCallerContext (rc.CurrentMemberDefinition)) { + rc.Report.Warning (4026, 1, attr.Location, + "The CallerMemberName applied to parameter `{0}' will have no effect because it applies to a member that is used in context that do not allow optional arguments", + name); + } + modFlags |= Modifier.CallerMemberName; + callerMemberName = attr; continue; } @@ -438,10 +467,16 @@ namespace Mono.CSharp { caller_type = rc.BuiltinTypes.Int; if (caller_type != parameter_type && !Convert.ImplicitNumericConversionExists (caller_type, parameter_type)) { rc.Report.Error (4017, attr.Location, - "The CallerMemberName attribute cannot be applied because there is no standard conversion from `{0}' to `{1}'", + "The CallerLineNumberAttribute attribute cannot be applied because there is no standard conversion from `{0}' to `{1}'", caller_type.GetSignatureForError (), parameter_type.GetSignatureForError ()); } + if (!IsValidCallerContext (rc.CurrentMemberDefinition)) { + rc.Report.Warning (4024, 1, attr.Location, + "The CallerLineNumberAttribute applied to parameter `{0}' will have no effect because it applies to a member that is used in context that do not allow optional arguments", + name); + } + modFlags |= Modifier.CallerLineNumber; continue; } @@ -454,10 +489,40 @@ namespace Mono.CSharp { caller_type.GetSignatureForError (), parameter_type.GetSignatureForError ()); } + if (!IsValidCallerContext (rc.CurrentMemberDefinition)) { + rc.Report.Warning (4025, 1, attr.Location, + "The CallerFilePath applied to parameter `{0}' will have no effect because it applies to a member that is used in context that do not allow optional arguments", + name); + } + modFlags |= Modifier.CallerFilePath; + callerFilePath = attr; continue; } } + + if ((modFlags & Modifier.CallerLineNumber) != 0) { + if (callerMemberName != null) { + rc.Report.Warning (7081, 1, callerMemberName.Location, + "The CallerMemberNameAttribute applied to parameter `{0}' will have no effect. It is overridden by the CallerLineNumberAttribute", + Name); + } + + if (callerFilePath != null) { + rc.Report.Warning (7082, 1, callerFilePath.Location, + "The CallerFilePathAttribute applied to parameter `{0}' will have no effect. It is overridden by the CallerLineNumberAttribute", + name); + } + } + + if ((modFlags & Modifier.CallerMemberName) != 0) { + if (callerFilePath != null) { + rc.Report.Warning (7080, 1, callerFilePath.Location, + "The CallerMemberNameAttribute applied to parameter `{0}' will have no effect. It is overridden by the CallerFilePathAttribute", + name); + } + + } } public void ResolveDefaultValue (ResolveContext rc) @@ -648,9 +713,9 @@ namespace Mono.CSharp { } else { builder.SetConstant (c.GetValue ()); } - } else if (default_expr.Type.IsStruct) { + } else if (default_expr.Type.IsStruct || default_expr.Type.IsGenericParameter) { // - // Handles special case where default expression is used with value-type + // Handles special case where default expression is used with value-type or type parameter // // void Foo (S s = default (S)) {} // diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs index 1d8c7e4fa1..b27566e025 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs @@ -82,6 +82,8 @@ namespace Mono.CSharp } } + public abstract void PrepareEmit (); + protected override bool VerifyClsCompliance () { if (!base.VerifyClsCompliance ()) @@ -197,7 +199,7 @@ namespace Mono.CSharp { } - public override MethodBuilder Define (TypeContainer parent) + public override void Define (TypeContainer parent) { base.Define (parent); @@ -205,12 +207,7 @@ namespace Mono.CSharp method_data = new MethodData (method, ModFlags, flags, this); - if (!method_data.Define (parent.PartialContainer, method.GetFullName (MemberName))) - return null; - - method_data.DefineMethodBuilder (parent.PartialContainer, ParameterInfo); - - return method_data.MethodBuilder; + method_data.Define (parent.PartialContainer, method.GetFullName (MemberName)); } public override TypeSpec ReturnType { @@ -262,7 +259,7 @@ namespace Mono.CSharp } } - public override MethodBuilder Define (TypeContainer parent) + public override void Define (TypeContainer parent) { parameters.Resolve (this); @@ -272,12 +269,7 @@ namespace Mono.CSharp method_data = new MethodData (method, ModFlags, flags, this); - if (!method_data.Define (parent.PartialContainer, method.GetFullName (MemberName))) - return null; - - method_data.DefineMethodBuilder (parent.PartialContainer, ParameterInfo); - - return method_data.MethodBuilder; + method_data.Define (parent.PartialContainer, method.GetFullName (MemberName)); } public override TypeSpec ReturnType { @@ -334,7 +326,7 @@ namespace Mono.CSharp return method.IsClsComplianceRequired (); } - public virtual MethodBuilder Define (TypeContainer parent) + public virtual void Define (TypeContainer parent) { var container = parent.PartialContainer; @@ -369,8 +361,6 @@ namespace Mono.CSharp if (Compiler.Settings.WriteMetadataOnly) block = null; } - - return null; } public bool HasCustomAccessModifier { @@ -522,7 +512,16 @@ namespace Mono.CSharp // Check base property accessors conflict // var base_prop = (PropertySpec) base_member; - if (Get != null) { + if (Get == null) { + if ((ModFlags & Modifiers.SEALED) != 0 && base_prop.HasGet && !base_prop.Get.IsAccessible (this)) { + // TODO: Should be different error code but csc uses for some reason same + Report.SymbolRelatedToPreviousError (base_prop); + Report.Error (545, Location, + "`{0}': cannot override because `{1}' does not have accessible get accessor", + GetSignatureForError (), base_prop.GetSignatureForError ()); + ok = false; + } + } else { if (!base_prop.HasGet) { if (ok) { Report.SymbolRelatedToPreviousError (base_prop); @@ -539,7 +538,16 @@ namespace Mono.CSharp } } - if (Set != null) { + if (Set == null) { + if ((ModFlags & Modifiers.SEALED) != 0 && base_prop.HasSet && !base_prop.Set.IsAccessible (this)) { + // TODO: Should be different error code but csc uses for some reason same + Report.SymbolRelatedToPreviousError (base_prop); + Report.Error (546, Location, + "`{0}': cannot override because `{1}' does not have accessible set accessor", + GetSignatureForError (), base_prop.GetSignatureForError ()); + ok = false; + } + } else { if (!base_prop.HasSet) { if (ok) { Report.SymbolRelatedToPreviousError (base_prop); @@ -624,24 +632,14 @@ namespace Mono.CSharp if (Get != null) { spec.Get = Get.Spec; - - var method = Get.Spec.GetMetaInfo () as MethodBuilder; - if (method != null) { - PropertyBuilder.SetGetMethod (method); - Parent.MemberCache.AddMember (this, method.Name, Get.Spec); - } + Parent.MemberCache.AddMember (this, Get.Spec.Name, Get.Spec); } else { CheckMissingAccessor (kind, parameters, true); } if (Set != null) { spec.Set = Set.Spec; - - var method = Set.Spec.GetMetaInfo () as MethodBuilder; - if (method != null) { - PropertyBuilder.SetSetMethod (method); - Parent.MemberCache.AddMember (this, method.Name, Set.Spec); - } + Parent.MemberCache.AddMember (this, Set.Spec.Name, Set.Spec); } else { CheckMissingAccessor (kind, parameters, false); } @@ -681,6 +679,25 @@ namespace Mono.CSharp } } + public override void PrepareEmit () + { + AccessorFirst.PrepareEmit (); + if (AccessorSecond != null) + AccessorSecond.PrepareEmit (); + + if (get != null) { + var method = Get.Spec.GetMetaInfo () as MethodBuilder; + if (method != null) + PropertyBuilder.SetGetMethod (method); + } + + if (set != null) { + var method = Set.Spec.GetMetaInfo () as MethodBuilder; + if (method != null) + PropertyBuilder.SetSetMethod (method); + } + } + protected override void SetMemberName (MemberName new_name) { base.SetMemberName (new_name); @@ -859,10 +876,10 @@ namespace Mono.CSharp { } - public override MethodBuilder Define (TypeContainer ds) + public override void Define (TypeContainer ds) { CheckAbstractAndExtern (block != null); - return base.Define (ds); + base.Define (ds); } public override string GetSignatureForError () @@ -1129,9 +1146,6 @@ namespace Mono.CSharp return true; } - if (Add.IsInterfaceImplementation) - SetIsUsed (); - backing_field = new Field (Parent, new TypeExpression (MemberType, Location), Modifiers.BACKING_FIELD | Modifiers.COMPILER_GENERATED | Modifiers.PRIVATE | (ModFlags & (Modifiers.STATIC | Modifiers.UNSAFE)), @@ -1205,7 +1219,7 @@ namespace Mono.CSharp return method.IsClsComplianceRequired (); } - public virtual MethodBuilder Define (TypeContainer parent) + public virtual void Define (TypeContainer parent) { // Fill in already resolved event type to speed things up and // avoid confusing duplicate errors @@ -1216,17 +1230,13 @@ namespace Mono.CSharp method.flags | MethodAttributes.HideBySig | MethodAttributes.SpecialName, this); if (!method_data.Define (parent.PartialContainer, method.GetFullName (MemberName))) - return null; - - method_data.DefineMethodBuilder (parent.PartialContainer, ParameterInfo); + return; if (Compiler.Settings.WriteMetadataOnly) block = null; Spec = new MethodSpec (MemberKind.Method, parent.PartialContainer.Definition, this, ReturnType, ParameterInfo, method.ModFlags); Spec.IsAccessor = true; - - return method_data.MethodBuilder; } public override TypeSpec ReturnType { @@ -1240,6 +1250,12 @@ namespace Mono.CSharp return method.GetAttributeObsolete (); } + public MethodData MethodData { + get { + return method_data; + } + } + public override string[] ValidAttributeTargets { get { return attribute_targets; @@ -1338,23 +1354,16 @@ namespace Mono.CSharp // // Now define the accessors // - var AddBuilder = Add.Define (Parent); - if (AddBuilder == null) - return false; - - var RemoveBuilder = remove.Define (Parent); - if (RemoveBuilder == null) - return false; + add.Define (Parent); + remove.Define (Parent); EventBuilder = Parent.TypeBuilder.DefineEvent (GetFullName (MemberName), EventAttributes.None, MemberType.GetMetaInfo ()); - EventBuilder.SetAddOnMethod (AddBuilder); - EventBuilder.SetRemoveOnMethod (RemoveBuilder); spec = new EventSpec (Parent.Definition, this, MemberType, ModFlags, Add.Spec, remove.Spec); Parent.MemberCache.AddMember (this, GetFullName (MemberName), spec); - Parent.MemberCache.AddMember (this, AddBuilder.Name, Add.Spec); - Parent.MemberCache.AddMember (this, RemoveBuilder.Name, remove.Spec); + Parent.MemberCache.AddMember (this, Add.Spec.Name, Add.Spec); + Parent.MemberCache.AddMember (this, Remove.Spec.Name, remove.Spec); return true; } @@ -1376,6 +1385,15 @@ namespace Mono.CSharp base.Emit (); } + public override void PrepareEmit () + { + add.PrepareEmit (); + remove.PrepareEmit (); + + EventBuilder.SetAddOnMethod (add.MethodData.MethodBuilder); + EventBuilder.SetRemoveOnMethod (remove.MethodData.MethodBuilder); + } + public override void WriteDebugSymbol (MonoSymbolFile file) { add.WriteDebugSymbol (file); @@ -1465,7 +1483,7 @@ namespace Mono.CSharp this.parameters = parameters; } - public override MethodBuilder Define (TypeContainer parent) + public override void Define (TypeContainer parent) { // Disable reporting, parameters are resolved twice Report.DisableReporting (); @@ -1475,7 +1493,7 @@ namespace Mono.CSharp Report.EnableReporting (); } - return base.Define (parent); + base.Define (parent); } public override ParametersCompiled ParameterInfo { diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs index 009007b0d5..5ae47d8a0d 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs @@ -56,7 +56,9 @@ namespace Mono.CSharp { 3000, 3001, 3002, 3003, 3005, 3006, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3021, 3022, 3023, 3024, 3026, 3027, - 4014 + 4014, 4024, 4025, 4026, + 7035, 7080, 7081, 7082, 7095, + 8009, }; static HashSet AllWarningsHashSet; diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs index dc097dbc60..3c7f13bdb1 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs @@ -28,9 +28,10 @@ namespace Mono.CSharp { V_3 = 3, V_4 = 4, V_5 = 5, + V_6 = 6, Future = 100, - Default = LanguageVersion.V_5, + Default = LanguageVersion.Future, } public enum RuntimeVersion @@ -1136,11 +1137,13 @@ namespace Mono.CSharp { switch (value.ToLowerInvariant ()) { case "iso-1": + case "1": settings.Version = LanguageVersion.ISO_1; return ParseResult.Success; case "default": settings.Version = LanguageVersion.Default; return ParseResult.Success; + case "2": case "iso-2": settings.Version = LanguageVersion.ISO_2; return ParseResult.Success; @@ -1153,12 +1156,15 @@ namespace Mono.CSharp { case "5": settings.Version = LanguageVersion.V_5; return ParseResult.Success; + case "6": + settings.Version = LanguageVersion.V_6; + return ParseResult.Success; case "future": settings.Version = LanguageVersion.Future; return ParseResult.Success; } - report.Error (1617, "Invalid -langversion option `{0}'. It must be `ISO-1', `ISO-2', `3', `4', `5', `Default' or `Future'", value); + report.Error (1617, "Invalid -langversion option `{0}'. It must be `ISO-1', `ISO-2', Default or value in range 1 to 6", value); return ParseResult.Error; case "/codepage": diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs index ed4160aa45..e7a360db67 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs @@ -101,7 +101,7 @@ namespace Mono.CSharp { return DoFlowAnalysis (fc); } - if (this is EmptyStatement) + if (this is EmptyStatement || loc.IsNull) return true; if (fc.UnreachableReported) @@ -688,11 +688,7 @@ namespace Mono.CSharp { infinite = true; } - base.Resolve (bc); - - Iterator.Resolve (bc); - - return true; + return base.Resolve (bc) && Iterator.Resolve (bc); } protected override bool DoFlowAnalysis (FlowAnalysisContext fc) @@ -859,11 +855,11 @@ namespace Mono.CSharp { var prev_loop = bc.EnclosingLoop; var prev_los = bc.EnclosingLoopOrSwitch; bc.EnclosingLoopOrSwitch = bc.EnclosingLoop = this; - Statement.Resolve (bc); + var ok = Statement.Resolve (bc); bc.EnclosingLoopOrSwitch = prev_los; bc.EnclosingLoop = prev_loop; - return true; + return ok; } // @@ -1202,15 +1198,16 @@ namespace Mono.CSharp { var async_type = storey.ReturnType; if (async_type == null && async_block.ReturnTypeInference != null) { - async_block.ReturnTypeInference.AddCommonTypeBoundAsync (expr.Type); + if (expr.Type.Kind == MemberKind.Void && !(this is ContextualReturn)) + ec.Report.Error (4029, loc, "Cannot return an expression of type `void'"); + else + async_block.ReturnTypeInference.AddCommonTypeBoundAsync (expr.Type); return true; } if (async_type.Kind == MemberKind.Void) { - ec.Report.Error (127, loc, - "`{0}': A return keyword must not be followed by any expression when method returns void", - ec.GetSignatureForError ()); - + ec.Report.Error (8030, loc, + "Anonymous function or lambda expression converted to a void returning delegate cannot return a value"); return false; } @@ -1218,18 +1215,14 @@ namespace Mono.CSharp { if (this is ContextualReturn) return true; - // Same error code as .NET but better error message if (async_block.DelegateType != null) { - ec.Report.Error (1997, loc, - "`{0}': A return keyword must not be followed by an expression when async delegate returns `Task'. Consider using `Task' return type", - async_block.DelegateType.GetSignatureForError ()); + ec.Report.Error (8031, loc, + "Async lambda expression or anonymous method converted to a `Task' cannot return a value. Consider returning `Task'"); } else { ec.Report.Error (1997, loc, "`{0}': A return keyword must not be followed by an expression when async method returns `Task'. Consider using `Task' return type", ec.GetSignatureForError ()); - } - return false; } @@ -1245,12 +1238,9 @@ namespace Mono.CSharp { } } } else { - // Same error code as .NET but better error message if (block_return_type.Kind == MemberKind.Void) { - ec.Report.Error (127, loc, - "`{0}': A return keyword must not be followed by any expression when delegate returns void", - am.GetSignatureForError ()); - + ec.Report.Error (8030, loc, + "Anonymous function or lambda expression converted to a void returning delegate cannot return a value"); return false; } @@ -1294,23 +1284,42 @@ namespace Mono.CSharp { protected override void DoEmit (EmitContext ec) { if (expr != null) { - expr.Emit (ec); var async_body = ec.CurrentAnonymousMethod as AsyncInitializer; if (async_body != null) { - var async_return = ((AsyncTaskStorey) async_body.Storey).HoistedReturn; + var storey = (AsyncTaskStorey)async_body.Storey; + Label exit_label = async_body.BodyEnd; + // // It's null for await without async - if (async_return != null) { - async_return.EmitAssign (ec); + // + if (storey.HoistedReturnValue != null) { + // + // Special case hoisted return value (happens in try/finally scenario) + // + if (ec.TryFinallyUnwind != null) { + if (storey.HoistedReturnValue is VariableReference) { + storey.HoistedReturnValue = ec.GetTemporaryField (storey.HoistedReturnValue.Type); + } + + exit_label = TryFinally.EmitRedirectedReturn (ec, async_body); + } + var async_return = (IAssignMethod)storey.HoistedReturnValue; + async_return.EmitAssign (ec, expr, false, false); ec.EmitEpilogue (); + } else { + expr.Emit (ec); + + if (ec.TryFinallyUnwind != null) + exit_label = TryFinally.EmitRedirectedReturn (ec, async_body); } - ec.Emit (OpCodes.Leave, async_body.BodyEnd); + ec.Emit (OpCodes.Leave, exit_label); return; } + expr.Emit (ec); ec.EmitEpilogue (); if (unwind_protect || ec.EmitAccurateDebugInfo) @@ -1431,8 +1440,6 @@ namespace Mono.CSharp { } else { label.AddGotoReference (rc, true); } - - try_finally = null; } else { label.AddGotoReference (rc, false); } @@ -1451,8 +1458,27 @@ namespace Mono.CSharp { throw new InternalErrorException ("goto emitted before target resolved"); Label l = label.LabelTarget (ec); + + if (ec.TryFinallyUnwind != null && IsLeavingFinally (label.Block)) { + var async_body = (AsyncInitializer) ec.CurrentAnonymousMethod; + l = TryFinally.EmitRedirectedJump (ec, async_body, l, label.Block); + } + ec.Emit (unwind_protect ? OpCodes.Leave : OpCodes.Br, l); } + + bool IsLeavingFinally (Block labelBlock) + { + var b = try_finally.Statement as Block; + while (b != null) { + if (b == labelBlock) + return true; + + b = b.Parent; + } + + return false; + } public override object Accept (StructuralVisitor visitor) { @@ -1791,9 +1817,20 @@ namespace Mono.CSharp { protected override void DoEmit (EmitContext ec) { - if (expr == null) - ec.Emit (OpCodes.Rethrow); - else { + if (expr == null) { + var atv = ec.AsyncThrowVariable; + if (atv != null) { + if (atv.HoistedVariant != null) { + atv.HoistedVariant.Emit (ec); + } else { + atv.Emit (ec); + } + + ec.Emit (OpCodes.Throw); + } else { + ec.Emit (OpCodes.Rethrow); + } + } else { expr.Emit (ec); ec.Emit (OpCodes.Throw); @@ -1842,7 +1879,14 @@ namespace Mono.CSharp { protected override void DoEmit (EmitContext ec) { - ec.Emit (unwind_protect ? OpCodes.Leave : OpCodes.Br, ec.LoopEnd); + var l = ec.LoopEnd; + + if (ec.TryFinallyUnwind != null) { + var async_body = (AsyncInitializer) ec.CurrentAnonymousMethod; + l = TryFinally.EmitRedirectedJump (ec, async_body, l, enclosing_loop.Statement as Block); + } + + ec.Emit (unwind_protect ? OpCodes.Leave : OpCodes.Br, l); } protected override bool DoFlowAnalysis (FlowAnalysisContext fc) @@ -1883,7 +1927,14 @@ namespace Mono.CSharp { protected override void DoEmit (EmitContext ec) { - ec.Emit (unwind_protect ? OpCodes.Leave : OpCodes.Br, ec.LoopBegin); + var l = ec.LoopBegin; + + if (ec.TryFinallyUnwind != null) { + var async_body = (AsyncInitializer) ec.CurrentAnonymousMethod; + l = TryFinally.EmitRedirectedJump (ec, async_body, l, enclosing_loop.Statement as Block); + } + + ec.Emit (unwind_protect ? OpCodes.Leave : OpCodes.Br, l); } protected override bool DoResolve (BlockContext bc) @@ -2185,13 +2236,13 @@ namespace Mono.CSharp { { li.CreateBuilder (ec); - if (Initializer != null) + if (Initializer != null && !IsUnreachable) ((ExpressionStatement) Initializer).EmitStatement (ec); if (declarators != null) { foreach (var d in declarators) { d.Variable.CreateBuilder (ec); - if (d.Initializer != null) { + if (d.Initializer != null && !IsUnreachable) { ec.Mark (d.Variable.Location); ((ExpressionStatement) d.Initializer).EmitStatement (ec); } @@ -2521,6 +2572,10 @@ namespace Mono.CSharp { public void EmitAddressOf (EmitContext ec) { + // TODO: Need something better for temporary variables + if ((flags & Flags.CompilerGenerated) != 0) + CreateBuilder (ec); + ec.Emit (OpCodes.Ldloca, builder); } @@ -2622,7 +2677,8 @@ namespace Mono.CSharp { FinallyBlock = 1 << 14, CatchBlock = 1 << 15, Iterator = 1 << 20, - NoFlowAnalysis = 1 << 21 + NoFlowAnalysis = 1 << 21, + InitializationEmitted = 1 << 22 } public Block Parent; @@ -2922,7 +2978,7 @@ namespace Mono.CSharp { end_unreachable = s.FlowAnalysis (fc); if (s.IsUnreachable) { - statements[startIndex] = new EmptyStatement (s.loc); + statements [startIndex] = RewriteUnreachableStatement (s); continue; } @@ -2949,7 +3005,7 @@ namespace Mono.CSharp { if (s.IsUnreachable) { s.FlowAnalysis (fc); - statements[startIndex] = new EmptyStatement (s.loc); + statements [startIndex] = RewriteUnreachableStatement (s); } } } @@ -2964,6 +3020,24 @@ namespace Mono.CSharp { return !Explicit.HasReachableClosingBrace; } + static Statement RewriteUnreachableStatement (Statement s) + { + // LAMESPEC: It's not clear whether declararion statement should be part of reachability + // analysis. Even csc report unreachable warning for it but it's actually used hence + // we try to emulate this behaviour + // + // Consider: + // goto L; + // int v; + // L: + // v = 1; + + if (s is BlockVariable) + return s; + + return new EmptyStatement (s.loc); + } + public void ScanGotoJump (Statement label) { int i; @@ -3121,8 +3195,11 @@ namespace Mono.CSharp { return am_storey; } - public override void Emit (EmitContext ec) + public void EmitScopeInitialization (EmitContext ec) { + if ((flags & Flags.InitializationEmitted) != 0) + return; + if (am_storey != null) { DefineStoreyContainer (ec, am_storey); am_storey.EmitStoreyInstantiation (ec, this); @@ -3131,6 +3208,13 @@ namespace Mono.CSharp { if (scope_initializers != null) EmitScopeInitializers (ec); + flags |= Flags.InitializationEmitted; + } + + public override void Emit (EmitContext ec) + { + EmitScopeInitialization (ec); + if (ec.EmitAccurateDebugInfo && !IsCompilerGenerated && ec.Mark (StartLocation)) { ec.Emit (OpCodes.Nop); } @@ -3209,8 +3293,9 @@ namespace Mono.CSharp { for (ExplicitBlock b = ref_block; b.AnonymousMethodStorey != storey; b = b.Parent.Explicit) { ParametersBlock pb; + AnonymousMethodStorey b_storey = b.AnonymousMethodStorey; - if (b.AnonymousMethodStorey != null) { + if (b_storey != null) { // // Don't add storey cross reference for `this' when the storey ends up not // beeing attached to any parent @@ -3229,21 +3314,23 @@ namespace Mono.CSharp { b.AnonymousMethodStorey.AddCapturedThisField (ec, parent); break; } - } - b.AnonymousMethodStorey.AddParentStoreyReference (ec, storey); - b.AnonymousMethodStorey.HoistedThis = storey.HoistedThis; + } // // Stop propagation inside same top block // - if (b.ParametersBlock == ParametersBlock.Original) + if (b.ParametersBlock == ParametersBlock.Original) { + b_storey.AddParentStoreyReference (ec, storey); +// b_storey.HoistedThis = storey.HoistedThis; break; + } - b = b.ParametersBlock; + b = pb = b.ParametersBlock; + } else { + pb = b as ParametersBlock; } - pb = b as ParametersBlock; if (pb != null && pb.StateMachine != null) { if (pb.StateMachine == storey) break; @@ -3268,8 +3355,14 @@ namespace Mono.CSharp { pb.StateMachine.AddParentStoreyReference (ec, storey); } - - b.HasCapturedVariable = true; + + // + // Add parent storey reference only when this is not captured directly + // + if (b_storey != null) { + b_storey.AddParentStoreyReference (ec, storey); + b_storey.HoistedThis = storey.HoistedThis; + } } } } @@ -3717,16 +3810,14 @@ namespace Mono.CSharp { var label = value as LabeledStatement; Block b = block; if (label != null) { - do { - if (label.Block == b) - return label; - b = b.Parent; - } while (b != null); + if (IsLabelVisible (label, b)) + return label; + } else { List list = (List) value; for (int i = 0; i < list.Count; ++i) { label = list[i]; - if (label.Block == b) + if (IsLabelVisible (label, b)) return label; } } @@ -3734,6 +3825,17 @@ namespace Mono.CSharp { return null; } + static bool IsLabelVisible (LabeledStatement label, Block b) + { + do { + if (label.Block == b) + return true; + b = b.Parent; + } while (b != null); + + return false; + } + public ParameterInfo GetParameterInfo (Parameter p) { for (int i = 0; i < parameters.Count; ++i) { @@ -5449,10 +5551,10 @@ namespace Mono.CSharp { EmitTryBodyPrepare (ec); EmitTryBody (ec); - ec.BeginFinallyBlock (); + bool beginFinally = EmitBeginFinallyBlock (ec); Label start_finally = ec.DefineLabel (); - if (resume_points != null) { + if (resume_points != null && beginFinally) { var state_machine = (StateMachineInitializer) ec.CurrentAnonymousMethod; ec.Emit (OpCodes.Ldloc, state_machine.SkipFinally); @@ -5477,7 +5579,8 @@ namespace Mono.CSharp { EmitFinallyBody (ec); } - ec.EndExceptionBlock (); + if (beginFinally) + ec.EndExceptionBlock (); } public override void EmitForDispose (EmitContext ec, LocalBuilder pc, Label end, bool have_dispatcher) @@ -5551,6 +5654,12 @@ namespace Mono.CSharp { return res; } + protected virtual bool EmitBeginFinallyBlock (EmitContext ec) + { + ec.BeginFinallyBlock (); + return true; + } + public override Reachability MarkReachable (Reachability rc) { base.MarkReachable (rc); @@ -6255,12 +6364,76 @@ namespace Mono.CSharp { public class Catch : Statement { + class FilterStatement : Statement + { + readonly Catch ctch; + + public FilterStatement (Catch ctch) + { + this.ctch = ctch; + } + + protected override void CloneTo (CloneContext clonectx, Statement target) + { + } + + protected override void DoEmit (EmitContext ec) + { + if (ctch.li != null) { + if (ctch.hoisted_temp != null) + ctch.hoisted_temp.Emit (ec); + else + ctch.li.Emit (ec); + } + + var expr_start = ec.DefineLabel (); + var end = ec.DefineLabel (); + + ec.Emit (OpCodes.Brtrue_S, expr_start); + ec.EmitInt (0); + ec.Emit (OpCodes.Br, end); + ec.MarkLabel (expr_start); + + ctch.Filter.Emit (ec); + + ec.MarkLabel (end); + ec.Emit (OpCodes.Endfilter); + ec.BeginFilterHandler (); + ec.Emit (OpCodes.Pop); + } + + protected override bool DoFlowAnalysis (FlowAnalysisContext fc) + { + ctch.Filter.FlowAnalysis (fc); + return true; + } + + public override bool Resolve (BlockContext bc) + { + ctch.Filter = ctch.Filter.Resolve (bc); + + if (ctch.Filter != null) { + if (ctch.Filter.ContainsEmitWithAwait ()) { + bc.Report.Error (7094, ctch.Filter.Location, "The `await' operator cannot be used in the filter expression of a catch clause"); + } + + var c = ctch.Filter as Constant; + if (c != null && !c.IsDefaultValue) { + bc.Report.Warning (7095, 1, ctch.Filter.Location, "Exception filter expression is a constant"); + } + } + + return true; + } + } + ExplicitBlock block; LocalVariable li; FullNamedExpression type_expr; CompilerAssign assign; TypeSpec type; - + LocalTemporary hoisted_temp; + public Catch (ExplicitBlock block, Location loc) { this.block = block; @@ -6281,6 +6454,10 @@ namespace Mono.CSharp { } } + public Expression Filter { + get; set; + } + public bool IsGeneral { get { return type_expr == null; @@ -6309,46 +6486,77 @@ namespace Mono.CSharp { protected override void DoEmit (EmitContext ec) { + if (Filter != null) { + ec.BeginExceptionFilterBlock (); + ec.Emit (OpCodes.Isinst, IsGeneral ? ec.BuiltinTypes.Object : CatchType); + + if (li != null) + EmitCatchVariableStore (ec); + + if (Block.HasAwait) { + Block.EmitScopeInitialization (ec); + } else { + Block.Emit (ec); + } + + return; + } + if (IsGeneral) ec.BeginCatchBlock (ec.BuiltinTypes.Object); else ec.BeginCatchBlock (CatchType); if (li != null) { - li.CreateBuilder (ec); - - // - // Special case hoisted catch variable, we have to use a temporary variable - // to pass via anonymous storey initialization with the value still on top - // of the stack - // - if (li.HoistedVariant != null) { - LocalTemporary lt = new LocalTemporary (li.Type); - lt.Store (ec); - - // switch to assigning from the temporary variable and not from top of the stack - assign.UpdateSource (lt); - } + EmitCatchVariableStore (ec); } else { ec.Emit (OpCodes.Pop); } - Block.Emit (ec); + if (!Block.HasAwait) + Block.Emit (ec); } - public override bool Resolve (BlockContext ec) + void EmitCatchVariableStore (EmitContext ec) { - using (ec.Set (ResolveContext.Options.CatchScope)) { - if (type_expr != null) { - type = type_expr.ResolveAsType (ec); + li.CreateBuilder (ec); + + // + // Special case hoisted catch variable, we have to use a temporary variable + // to pass via anonymous storey initialization with the value still on top + // of the stack + // + if (li.HoistedVariant != null) { + hoisted_temp = new LocalTemporary (li.Type); + hoisted_temp.Store (ec); + + // switch to assignment from temporary variable and not from top of the stack + assign.UpdateSource (hoisted_temp); + } + } + + public override bool Resolve (BlockContext bc) + { + using (bc.Set (ResolveContext.Options.CatchScope)) { + if (type_expr == null) { + if (CreateExceptionVariable (bc.Module.Compiler.BuiltinTypes.Object)) { + Expression source = new EmptyExpression (li.Type); + assign = new CompilerAssign (new LocalVariableReference (li, Location.Null), source, Location.Null); + Block.AddScopeStatement (new StatementExpression (assign, Location.Null)); + } + } else { + type = type_expr.ResolveAsType (bc); if (type == null) return false; - if (type.BuiltinType != BuiltinTypeSpec.Type.Exception && !TypeSpec.IsBaseClass (type, ec.BuiltinTypes.Exception, false)) { - ec.Report.Error (155, loc, "The type caught or thrown must be derived from System.Exception"); + if (li == null) + CreateExceptionVariable (type); + + if (type.BuiltinType != BuiltinTypeSpec.Type.Exception && !TypeSpec.IsBaseClass (type, bc.BuiltinTypes.Exception, false)) { + bc.Report.Error (155, loc, "The type caught or thrown must be derived from System.Exception"); } else if (li != null) { li.Type = type; - li.PrepareAssignmentAnalysis (ec); + li.PrepareAssignmentAnalysis (bc); // source variable is at the top of the stack Expression source = new EmptyExpression (li.Type); @@ -6363,14 +6571,31 @@ namespace Mono.CSharp { } } + if (Filter != null) { + Block.AddScopeStatement (new FilterStatement (this)); + } + Block.SetCatchBlock (); - return Block.Resolve (ec); + return Block.Resolve (bc); } } + bool CreateExceptionVariable (TypeSpec type) + { + if (!Block.HasAwait) + return false; + + // TODO: Scan the block for rethrow expression + //if (!Block.HasRethrow) + // return; + + li = LocalVariable.CreateCompilerGenerated (type, block, Location.Null); + return true; + } + protected override bool DoFlowAnalysis (FlowAnalysisContext fc) { - if (li != null) { + if (li != null && !li.IsCompilerGenerated) { fc.SetVariableAssigned (li.VariableInfo, true); } @@ -6381,6 +6606,10 @@ namespace Mono.CSharp { { base.MarkReachable (rc); + var c = Filter as Constant; + if (c != null && c.IsDefaultValue) + return Reachability.CreateUnreachable (); + return block.MarkReachable (rc); } @@ -6391,6 +6620,9 @@ namespace Mono.CSharp { if (type_expr != null) target.type_expr = (FullNamedExpression) type_expr.Clone (clonectx); + if (Filter != null) + target.Filter = Filter.Clone (clonectx); + target.block = (ExplicitBlock) clonectx.LookupBlock (block); } } @@ -6399,6 +6631,8 @@ namespace Mono.CSharp { { ExplicitBlock fini; List try_exit_dat; + List /// /// - public sealed class TextSegmentCollection : ICollection, IReadOnlyCollection, ISegmentTree, IWeakEventListener where T : TextSegment + public sealed class TextSegmentCollection : ICollection, ISegmentTree, IWeakEventListener where T : TextSegment { // Implementation: this is basically a mixture of an augmented interval tree // and the TextAnchorTree. diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextSourceVersionProvider.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextSourceVersionProvider.cs new file mode 100644 index 0000000000..c2dffc19ad --- /dev/null +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextSourceVersionProvider.cs @@ -0,0 +1,136 @@ +// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this +// software and associated documentation files (the "Software"), to deal in the Software +// without restriction, including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +// to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using ICSharpCode.AvalonEdit.Utils; + +namespace ICSharpCode.AvalonEdit.Document +{ + #if !NREFACTORY + /// + /// Provides ITextSourceVersion instances. + /// + public class TextSourceVersionProvider + { + Version currentVersion; + + /// + /// Creates a new TextSourceVersionProvider instance. + /// + public TextSourceVersionProvider() + { + this.currentVersion = new Version(this); + } + + /// + /// Gets the current version. + /// + public ITextSourceVersion CurrentVersion { + get { return currentVersion; } + } + + /// + /// Replaces the current version with a new version. + /// + /// Change from current version to new version + public void AppendChange(TextChangeEventArgs change) + { + if (change == null) + throw new ArgumentNullException("change"); + currentVersion.change = change; + currentVersion.next = new Version(currentVersion); + currentVersion = currentVersion.next; + } + + [DebuggerDisplay("Version #{id}")] + sealed class Version : ITextSourceVersion + { + // Reference back to the provider. + // Used to determine if two checkpoints belong to the same document. + readonly TextSourceVersionProvider provider; + // ID used for CompareAge() + readonly int id; + + // the change from this version to the next version + internal TextChangeEventArgs change; + internal Version next; + + internal Version(TextSourceVersionProvider provider) + { + this.provider = provider; + } + + internal Version(Version prev) + { + this.provider = prev.provider; + this.id = unchecked( prev.id + 1 ); + } + + public bool BelongsToSameDocumentAs(ITextSourceVersion other) + { + Version o = other as Version; + return o != null && provider == o.provider; + } + + public int CompareAge(ITextSourceVersion other) + { + if (other == null) + throw new ArgumentNullException("other"); + Version o = other as Version; + if (o == null || provider != o.provider) + throw new ArgumentException("Versions do not belong to the same document."); + // We will allow overflows, but assume that the maximum distance between checkpoints is 2^31-1. + // This is guaranteed on x86 because so many checkpoints don't fit into memory. + return Math.Sign(unchecked( this.id - o.id )); + } + + public IEnumerable GetChangesTo(ITextSourceVersion other) + { + int result = CompareAge(other); + Version o = (Version)other; + if (result < 0) + return GetForwardChanges(o); + else if (result > 0) + return o.GetForwardChanges(this).Reverse().Select(change => change.Invert()); + else + return Empty.Array; + } + + IEnumerable GetForwardChanges(Version other) + { + // Return changes from this(inclusive) to other(exclusive). + for (Version node = this; node != other; node = node.next) { + yield return node.change; + } + } + + public int MoveOffsetTo(ITextSourceVersion other, int oldOffset, AnchorMovementType movement) + { + int offset = oldOffset; + foreach (var e in GetChangesTo(other)) { + offset = e.GetNewOffset(offset, movement); + } + return offset; + } + } + } + #endif +} diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextUtilities.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextUtilities.cs index 3dd0e647e7..2d6f757843 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextUtilities.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextUtilities.cs @@ -19,7 +19,9 @@ using System; using System.Globalization; using System.Windows.Documents; +#if NREFACTORY using ICSharpCode.NRefactory.Editor; +#endif namespace ICSharpCode.AvalonEdit.Document { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs index badc106212..7f33289f1c 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs @@ -27,8 +27,10 @@ using System.Windows.Threading; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Rendering; using ICSharpCode.AvalonEdit.Utils; +#if NREFACTORY using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Editor; +#endif namespace ICSharpCode.AvalonEdit.Editing { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs index 247f03adff..9666e044d9 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs @@ -29,7 +29,9 @@ using System.Windows.Input; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Highlighting; using ICSharpCode.AvalonEdit.Utils; +#if NREFACTORY using ICSharpCode.NRefactory.Editor; +#endif namespace ICSharpCode.AvalonEdit.Editing { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EmptySelection.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EmptySelection.cs index 2cef05f068..1f43206181 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EmptySelection.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EmptySelection.cs @@ -22,8 +22,10 @@ using System.Runtime.CompilerServices; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Utils; +#if NREFACTORY using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Editor; +#endif namespace ICSharpCode.AvalonEdit.Editing { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/IReadOnlySectionProvider.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/IReadOnlySectionProvider.cs index daf8458b3c..5f37fc3668 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/IReadOnlySectionProvider.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/IReadOnlySectionProvider.cs @@ -18,7 +18,11 @@ using System; using System.Collections.Generic; +#if NREFACTORY using ICSharpCode.NRefactory.Editor; +#else +using ICSharpCode.AvalonEdit.Document; +#endif namespace ICSharpCode.AvalonEdit.Editing { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/NoReadOnlySections.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/NoReadOnlySections.cs index 98ebf022f7..dbafa600f2 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/NoReadOnlySections.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/NoReadOnlySections.cs @@ -19,8 +19,9 @@ using System; using System.Collections.Generic; using System.Linq; -using ICSharpCode.AvalonEdit.Utils; +using ICSharpCode.AvalonEdit.Document; using ICSharpCode.NRefactory.Editor; +using ICSharpCode.AvalonEdit.Utils; namespace ICSharpCode.AvalonEdit.Editing { @@ -48,9 +49,9 @@ namespace ICSharpCode.AvalonEdit.Editing /// /// that completely disables editing. /// - sealed class ReadOnlyDocument : IReadOnlySectionProvider + sealed class ReadOnlySectionDocument : IReadOnlySectionProvider { - public static readonly ReadOnlyDocument Instance = new ReadOnlyDocument(); + public static readonly ReadOnlySectionDocument Instance = new ReadOnlySectionDocument(); public bool CanInsert(int offset) { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/RectangleSelection.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/RectangleSelection.cs index abaa80d797..8d6a991388 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/RectangleSelection.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/RectangleSelection.cs @@ -28,8 +28,10 @@ using System.Windows.Media.TextFormatting; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Rendering; using ICSharpCode.AvalonEdit.Utils; +#if NREFACTORY using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Editor; +#endif namespace ICSharpCode.AvalonEdit.Editing { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Selection.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Selection.cs index ba4034accf..b25a31b050 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Selection.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Selection.cs @@ -24,7 +24,9 @@ using System.Windows; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Highlighting; using ICSharpCode.AvalonEdit.Utils; +#if NREFACTORY using ICSharpCode.NRefactory.Editor; +#endif namespace ICSharpCode.AvalonEdit.Editing { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SelectionColorizer.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SelectionColorizer.cs index 17c1c842ba..3c6be06c86 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SelectionColorizer.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SelectionColorizer.cs @@ -18,7 +18,9 @@ using System; using ICSharpCode.AvalonEdit.Rendering; +#if NREFACTORY using ICSharpCode.NRefactory.Editor; +#endif namespace ICSharpCode.AvalonEdit.Editing { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SelectionMouseHandler.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SelectionMouseHandler.cs index 6fde39781d..dcb2f16149 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SelectionMouseHandler.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SelectionMouseHandler.cs @@ -29,7 +29,9 @@ using System.Windows.Threading; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Rendering; using ICSharpCode.AvalonEdit.Utils; +#if NREFACTORY using ICSharpCode.NRefactory.Editor; +#endif namespace ICSharpCode.AvalonEdit.Editing { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SelectionSegment.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SelectionSegment.cs index 8b258dc6e3..6c0b1e7a34 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SelectionSegment.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SelectionSegment.cs @@ -17,7 +17,11 @@ // DEALINGS IN THE SOFTWARE. using System; +#if NREFACTORY using ICSharpCode.NRefactory.Editor; +#else +using ICSharpCode.AvalonEdit.Document; +#endif namespace ICSharpCode.AvalonEdit.Editing { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SimpleSelection.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SimpleSelection.cs index abbbe0b7cc..24f27825db 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SimpleSelection.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/SimpleSelection.cs @@ -20,7 +20,9 @@ using System; using System.Collections.Generic; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Utils; +#if NREFACTORY using ICSharpCode.NRefactory.Editor; +#endif namespace ICSharpCode.AvalonEdit.Editing { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextArea.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextArea.cs index d4eb99264a..11dcf3e70a 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextArea.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextArea.cs @@ -35,7 +35,6 @@ using ICSharpCode.AvalonEdit.Rendering; using ICSharpCode.AvalonEdit.Utils; using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Editor; -using ICSharpCode.NRefactory.Utils; namespace ICSharpCode.AvalonEdit.Editing { @@ -1023,9 +1022,11 @@ namespace ICSharpCode.AvalonEdit.Editing this.MouseEnter += delegate { ShowMouseCursor(); }; this.MouseLeave += delegate { ShowMouseCursor(); }; this.PreviewMouseMove += delegate { ShowMouseCursor(); }; + #if DOTNET4 this.TouchEnter += delegate { ShowMouseCursor(); }; this.TouchLeave += delegate { ShowMouseCursor(); }; this.PreviewTouchMove += delegate { ShowMouseCursor(); }; + #endif } void ShowMouseCursor() diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextSegmentReadOnlySectionProvider.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextSegmentReadOnlySectionProvider.cs index 09c50f8ab8..fb26624710 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextSegmentReadOnlySectionProvider.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextSegmentReadOnlySectionProvider.cs @@ -19,7 +19,9 @@ using System; using System.Collections.Generic; using ICSharpCode.AvalonEdit.Document; +#if NREFACTORY using ICSharpCode.NRefactory.Editor; +#endif namespace ICSharpCode.AvalonEdit.Editing { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/FoldingSection.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/FoldingSection.cs index 78791398d4..c84a962f8e 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/FoldingSection.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/FoldingSection.cs @@ -19,7 +19,9 @@ using System; using System.Diagnostics; using System.Text; +#if NREFACTORY using ICSharpCode.NRefactory.Editor; +#endif using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Rendering; using ICSharpCode.AvalonEdit.Utils; diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/NewFolding.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/NewFolding.cs index 0491ace072..5e6205a508 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/NewFolding.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/NewFolding.cs @@ -17,7 +17,11 @@ // DEALINGS IN THE SOFTWARE. using System; +#if NREFACTORY using ICSharpCode.NRefactory.Editor; +#else +using ICSharpCode.AvalonEdit.Document; +#endif namespace ICSharpCode.AvalonEdit.Folding { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/DocumentHighlighter.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/DocumentHighlighter.cs index 96afdbfcda..8ba6c044c8 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/DocumentHighlighter.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/DocumentHighlighter.cs @@ -20,12 +20,10 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using System.Text.RegularExpressions; +using ICSharpCode.NRefactory.Editor; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Utils; -using ICSharpCode.NRefactory.Editor; -using ICSharpCode.NRefactory.Utils; -using SpanStack = ICSharpCode.NRefactory.Utils.ImmutableStack; +using SpanStack = ICSharpCode.AvalonEdit.Utils.ImmutableStack; namespace ICSharpCode.AvalonEdit.Highlighting { @@ -74,6 +72,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting InvalidateHighlighting(); } + #if NREFACTORY /// /// Creates a new DocumentHighlighter instance. /// @@ -88,6 +87,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting this.engine = new HighlightingEngine(definition.MainRuleSet); InvalidateHighlighting(); } + #endif /// /// Disposes the document highlighter. diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedInlineBuilder.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedInlineBuilder.cs index c48a97bc9f..e5f2e24bba 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedInlineBuilder.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedInlineBuilder.cs @@ -24,7 +24,7 @@ using System.Text; using System.Windows; using System.Windows.Documents; using System.Windows.Media; -using ICSharpCode.NRefactory.TypeSystem.Implementation; +using ICSharpCode.AvalonEdit.Utils; namespace ICSharpCode.AvalonEdit.Highlighting { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedLine.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedLine.cs index 0d42809431..55842a1d8e 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedLine.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedLine.cs @@ -18,7 +18,6 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedSection.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedSection.cs index b42abb43f3..f1ffdfd9ea 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedSection.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightedSection.cs @@ -17,7 +17,11 @@ // DEALINGS IN THE SOFTWARE. using System; +#if NREFACTORY using ICSharpCode.NRefactory.Editor; +#else +using ICSharpCode.AvalonEdit.Document; +#endif namespace ICSharpCode.AvalonEdit.Highlighting { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColor.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColor.cs index 067e75693c..f8f13182a7 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColor.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColor.cs @@ -23,8 +23,7 @@ using System.Security.Permissions; using System.Text; using System.Windows; using System.Windows.Media; -using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.TypeSystem.Implementation; +using ICSharpCode.AvalonEdit.Utils; namespace ICSharpCode.AvalonEdit.Highlighting { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColorizer.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColorizer.cs index 1754d3d4b0..68a625745e 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColorizer.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColorizer.cs @@ -289,7 +289,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting // If the highlighting state change applies to the lines below, too, the construction of each line // will invalidate the next line, and the construction pass will regenerate all lines. - Debug.WriteLine("OnHighlightStateChanged forces redraw of lines {0} to {1}", fromLineNumber, toLineNumber); + Debug.WriteLine(string.Format("OnHighlightStateChanged forces redraw of lines {0} to {1}", fromLineNumber, toLineNumber)); // If the VisualLine construction is in progress, we have to avoid sending redraw commands for // anything above the line currently being constructed. diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingEngine.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingEngine.cs index b80d9ac9a3..e08753130d 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingEngine.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingEngine.cs @@ -21,9 +21,13 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text.RegularExpressions; +#if NREFACTORY using ICSharpCode.NRefactory.Editor; +#else +using ICSharpCode.AvalonEdit.Document; +#endif using ICSharpCode.AvalonEdit.Utils; -using SpanStack = ICSharpCode.NRefactory.Utils.ImmutableStack; +using SpanStack = ICSharpCode.AvalonEdit.Utils.ImmutableStack; namespace ICSharpCode.AvalonEdit.Highlighting { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingManager.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingManager.cs index 37b666b7b7..c9ea32f074 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingManager.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingManager.cs @@ -22,8 +22,7 @@ using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Xml; - -using ICSharpCode.NRefactory.Utils; +using ICSharpCode.AvalonEdit.Utils; namespace ICSharpCode.AvalonEdit.Highlighting { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlClipboard.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlClipboard.cs index 68eba79c3e..eb0afc0c24 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlClipboard.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlClipboard.cs @@ -19,7 +19,6 @@ using System; using System.Diagnostics; using System.Globalization; -using System.IO; using System.Text; using System.Windows; using ICSharpCode.AvalonEdit.Document; diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlOptions.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlOptions.cs index c3458a7015..13c76c2415 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlOptions.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlOptions.cs @@ -18,7 +18,11 @@ using System; using System.IO; +#if DOTNET4 using System.Net; +#else +using System.Web; +#endif namespace ICSharpCode.AvalonEdit.Highlighting { @@ -60,7 +64,11 @@ namespace ICSharpCode.AvalonEdit.Highlighting if (color == null) throw new ArgumentNullException("color"); writer.Write(" style=\""); + #if DOTNET4 WebUtility.HtmlEncode(color.ToCss(), writer); + #else + HttpUtility.HtmlEncode(color.ToCss(), writer); + #endif writer.Write('"'); } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlRichTextWriter.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlRichTextWriter.cs index d1ec19709a..b29d452a3d 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlRichTextWriter.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlRichTextWriter.cs @@ -19,7 +19,11 @@ using System; using System.Collections.Generic; using System.IO; +#if DOTNET4 using System.Net; +#else +using System.Web; +#endif using System.Text; using System.Windows; using System.Windows.Media; @@ -132,7 +136,11 @@ namespace ICSharpCode.AvalonEdit.Highlighting needIndentation = true; break; default: + #if DOTNET4 WebUtility.HtmlEncode(c.ToString(), htmlWriter); + #else + HttpUtility.HtmlEncode(c.ToString(), htmlWriter); + #endif break; } // If we just handled a space by setting hasSpace = true, @@ -173,7 +181,11 @@ namespace ICSharpCode.AvalonEdit.Highlighting if (value.Length == 0) return; WriteIndentationAndSpace(); + #if DOTNET4 WebUtility.HtmlEncode(value, htmlWriter); + #else + HttpUtility.HtmlEncode(value, htmlWriter); + #endif } /// @@ -244,7 +256,12 @@ namespace ICSharpCode.AvalonEdit.Highlighting public override void BeginHyperlinkSpan(Uri uri) { WriteIndentationAndSpace(); - htmlWriter.Write(""); + #if DOTNET4 + string link = WebUtility.HtmlEncode(uri.ToString()); + #else + string link = HttpUtility.HtmlEncode(uri.ToString()); + #endif + htmlWriter.Write(""); endTagStack.Push(""); } } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/IHighlighter.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/IHighlighter.cs index 8edbd89061..66702adf92 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/IHighlighter.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/IHighlighter.cs @@ -18,7 +18,11 @@ using System; using System.Collections.Generic; +#if NREFACTORY using ICSharpCode.NRefactory.Editor; +#else +using ICSharpCode.AvalonEdit.Document; +#endif namespace ICSharpCode.AvalonEdit.Highlighting { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/RichTextModel.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/RichTextModel.cs index b41012bee0..10c018e98e 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/RichTextModel.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/RichTextModel.cs @@ -17,24 +17,20 @@ // DEALINGS IN THE SOFTWARE. using System; -using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Windows; using System.Windows.Documents; -using System.Windows.Media; -using ICSharpCode.NRefactory.Editor; -using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.AvalonEdit.Document; -using ICSharpCode.AvalonEdit.Utils; +using ICSharpCode.NRefactory.Editor; namespace ICSharpCode.AvalonEdit.Highlighting { /// /// Stores rich-text formatting. /// - public sealed class RichTextModel : AbstractFreezable + public sealed class RichTextModel { List stateChangeOffsets = new List(); List stateChanges = new List(); diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/RichTextModelWriter.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/RichTextModelWriter.cs index c965343be7..66c455e269 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/RichTextModelWriter.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/RichTextModelWriter.cs @@ -18,8 +18,6 @@ using System; using System.Collections.Generic; -using System.Diagnostics; -using System.IO; using System.Windows; using System.Windows.Media; using ICSharpCode.NRefactory.Editor; diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj index ff6cf09d56..52536368c3 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj @@ -3,52 +3,72 @@ {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} Debug - AnyCPU + Net40 Library ICSharpCode.AvalonEdit ICSharpCode.AvalonEdit - v4.5 Properties - "C:\Program Files\SharpDevelop\3.0\bin\..\AddIns\AddIns\Misc\SourceAnalysis\Settings.SourceAnalysis" False False 4 - false + False True ICSharpCode.AvalonEdit.snk False File False -Microsoft.Design#CA1020;-Microsoft.Design#CA1033;-Microsoft.Performance#CA1805;-Microsoft.Performance#CA1810 - ..\..\..\..\bin\ - ..\..\..\..\bin\ICSharpCode.AvalonEdit.xml 1607 + False + obj\$(Configuration)\ + False + Auto + 4194304 + AnyCPU + 4096 + + + v3.5 + + + v4.0 + DOTNET4 + + + v4.5 + DOTNET4;NREFACTORY + bin\Debug\ + bin\Debug\ICSharpCode.AvalonEdit.xml true - Full False True - DEBUG;TRACE;DOTNET4 + obj\ + Full + + + bin\Release\ + bin\Release\ICSharpCode.AvalonEdit.xml false - PdbOnly True False - TRACE;DOTNET4 - - - False - Auto - 4194304 - AnyCPU - 4096 + Full + + + {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} + ICSharpCode.NRefactory + + + 4.0 + 3.0 @@ -67,6 +87,7 @@ 3.0 + 4.0 @@ -86,9 +107,6 @@ - - Properties\GlobalAssemblyInfo.cs - @@ -97,7 +115,6 @@ Code - @@ -106,7 +123,10 @@ UndoStack.cs + + + @@ -120,6 +140,7 @@ TextDocument.cs + @@ -129,6 +150,7 @@ TextAnchor.cs + UndoStack.cs @@ -355,6 +377,7 @@ + @@ -364,6 +387,8 @@ + + @@ -412,51 +437,10 @@ - - - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} - ICSharpCode.Core - false - - - {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} - ICSharpCode.NRefactory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Indentation/DefaultIndentationStrategy.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Indentation/DefaultIndentationStrategy.cs index b84853ab7d..2ac7c2e485 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Indentation/DefaultIndentationStrategy.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Indentation/DefaultIndentationStrategy.cs @@ -17,8 +17,8 @@ // DEALINGS IN THE SOFTWARE. using System; -using ICSharpCode.AvalonEdit.Document; using ICSharpCode.NRefactory.Editor; +using ICSharpCode.AvalonEdit.Document; namespace ICSharpCode.AvalonEdit.Indentation { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Properties/AssemblyInfo.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Properties/AssemblyInfo.cs index 1d9f84ff64..21160ccbc5 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Properties/AssemblyInfo.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Properties/AssemblyInfo.cs @@ -50,6 +50,13 @@ using System.Windows.Markup; // app, or any theme specific resource dictionaries) )] +[assembly: System.Runtime.InteropServices.ComVisible(false)] +[assembly: AssemblyCompany("ic#code")] +[assembly: AssemblyProduct("SharpDevelop")] +[assembly: AssemblyCopyright("2000-2014 AlphaSierraPapa for the SharpDevelop Team")] +[assembly: AssemblyVersion("5.0.1")] +[assembly: NeutralResourcesLanguage("en-US")] + [assembly: XmlnsPrefix("http://icsharpcode.net/sharpdevelop/avalonedit", "avalonedit")] [assembly: XmlnsDefinition("http://icsharpcode.net/sharpdevelop/avalonedit", "ICSharpCode.AvalonEdit")] @@ -57,3 +64,8 @@ using System.Windows.Markup; [assembly: XmlnsDefinition("http://icsharpcode.net/sharpdevelop/avalonedit", "ICSharpCode.AvalonEdit.Rendering")] [assembly: XmlnsDefinition("http://icsharpcode.net/sharpdevelop/avalonedit", "ICSharpCode.AvalonEdit.Highlighting")] [assembly: XmlnsDefinition("http://icsharpcode.net/sharpdevelop/avalonedit", "ICSharpCode.AvalonEdit.Search")] + +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2243:AttributeStringLiteralsShouldParseCorrectly", + Justification = "AssemblyInformationalVersion does not need to be a parsable version")] + +namespace ICSharpCode.NRefactory.Editor {} diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/BackgroundGeometryBuilder.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/BackgroundGeometryBuilder.cs index cde47d1ef1..73f135cfe3 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/BackgroundGeometryBuilder.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/BackgroundGeometryBuilder.cs @@ -23,9 +23,10 @@ using System.Windows; using System.Windows.Controls.Primitives; using System.Windows.Media; using System.Windows.Media.TextFormatting; +using ICSharpCode.NRefactory.Editor; +using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Editing; using ICSharpCode.AvalonEdit.Utils; -using ICSharpCode.NRefactory.Editor; namespace ICSharpCode.AvalonEdit.Rendering { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs index 2871c38fe4..516c0a4623 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs @@ -31,10 +31,9 @@ using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.TextFormatting; using System.Windows.Threading; +using ICSharpCode.NRefactory.Editor; using ICSharpCode.AvalonEdit.Document; -using ICSharpCode.AvalonEdit.Editing; using ICSharpCode.AvalonEdit.Utils; -using ICSharpCode.NRefactory.Editor; namespace ICSharpCode.AvalonEdit.Rendering { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/DropDownButton.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/DropDownButton.cs index cf7d5d1c35..31cb5f9963 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/DropDownButton.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/DropDownButton.cs @@ -18,26 +18,33 @@ using System; using System.Windows; -using System.Windows.Controls; using System.Windows.Controls.Primitives; -using System.Windows.Input; namespace ICSharpCode.AvalonEdit.Search { /// /// A button that opens a drop-down menu when clicked. /// - class DropDownButton : ButtonBase + public class DropDownButton : ButtonBase { + /// + /// Identifies the  dependency property. + /// public static readonly DependencyProperty DropDownContentProperty - = DependencyProperty.Register("DropDownContent", typeof(Popup), - typeof(DropDownButton), new FrameworkPropertyMetadata(null)); + = DependencyProperty.Register("DropDownContent", typeof(Popup), + typeof(DropDownButton), new FrameworkPropertyMetadata(null)); + /// + /// The key that identifies the  dependency property. + /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")] protected static readonly DependencyPropertyKey IsDropDownContentOpenPropertyKey - = DependencyProperty.RegisterReadOnly("IsDropDownContentOpen", typeof(bool), - typeof(DropDownButton), new FrameworkPropertyMetadata(false)); + = DependencyProperty.RegisterReadOnly("IsDropDownContentOpen", typeof(bool), + typeof(DropDownButton), new FrameworkPropertyMetadata(false)); + /// + /// Identifies the  dependency property. + /// public static readonly DependencyProperty IsDropDownContentOpenProperty = IsDropDownContentOpenPropertyKey.DependencyProperty; static DropDownButton() @@ -45,16 +52,23 @@ namespace ICSharpCode.AvalonEdit.Search DefaultStyleKeyProperty.OverrideMetadata(typeof(DropDownButton), new FrameworkPropertyMetadata(typeof(DropDownButton))); } + /// + /// Gets/Sets the popup that is used as drop-down content. + /// public Popup DropDownContent { get { return (Popup)GetValue(DropDownContentProperty); } set { SetValue(DropDownContentProperty, value); } } + /// + /// Gets whether the drop-down is opened. + /// public bool IsDropDownContentOpen { get { return (bool)GetValue(IsDropDownContentOpenProperty); } protected set { SetValue(IsDropDownContentOpenPropertyKey, value); } } + /// protected override void OnClick() { if (DropDownContent != null && !IsDropDownContentOpen) { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/ISearchStrategy.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/ISearchStrategy.cs index 77f80fc33d..9121a454ad 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/ISearchStrategy.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/ISearchStrategy.cs @@ -19,8 +19,8 @@ using System; using System.Collections.Generic; using System.Runtime.Serialization; - using ICSharpCode.NRefactory.Editor; +using ICSharpCode.AvalonEdit.Document; namespace ICSharpCode.AvalonEdit.Search { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/RegexSearchStrategy.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/RegexSearchStrategy.cs index 44bf6d22d1..47bde5af07 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/RegexSearchStrategy.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/RegexSearchStrategy.cs @@ -22,7 +22,6 @@ using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Windows.Documents; - using ICSharpCode.AvalonEdit.Document; using ICSharpCode.NRefactory.Editor; diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs index b4444e331d..03057f3321 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs @@ -86,9 +86,9 @@ namespace ICSharpCode.AvalonEdit.Search void RegisterCommands(ICollection commandBindings) { commandBindings.Add(new CommandBinding(ApplicationCommands.Find, ExecuteFind)); - commandBindings.Add(new CommandBinding(SearchCommands.FindNext, ExecuteFindNext)); - commandBindings.Add(new CommandBinding(SearchCommands.FindPrevious, ExecuteFindPrevious)); - commandBindings.Add(new CommandBinding(SearchCommands.CloseSearchPanel, ExecuteCloseSearchPanel)); + commandBindings.Add(new CommandBinding(SearchCommands.FindNext, ExecuteFindNext, CanExecuteWithOpenSearchPanel)); + commandBindings.Add(new CommandBinding(SearchCommands.FindPrevious, ExecuteFindPrevious, CanExecuteWithOpenSearchPanel)); + commandBindings.Add(new CommandBinding(SearchCommands.CloseSearchPanel, ExecuteCloseSearchPanel, CanExecuteWithOpenSearchPanel)); } SearchPanel panel; @@ -100,20 +100,41 @@ namespace ICSharpCode.AvalonEdit.Search panel.SearchPattern = TextArea.Selection.GetText(); Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Input, (Action)delegate { panel.Reactivate(); }); } + + void CanExecuteWithOpenSearchPanel(object sender, CanExecuteRoutedEventArgs e) + { + if (panel.IsClosed) { + e.CanExecute = false; + // Continue routing so that the key gesture can be consumed by another component. + e.ContinueRouting = true; + } else { + e.CanExecute = true; + e.Handled = true; + } + } void ExecuteFindNext(object sender, ExecutedRoutedEventArgs e) { - panel.FindNext(); + if (!panel.IsClosed) { + panel.FindNext(); + e.Handled = true; + } } void ExecuteFindPrevious(object sender, ExecutedRoutedEventArgs e) { - panel.FindPrevious(); + if (!panel.IsClosed) { + panel.FindPrevious(); + e.Handled = true; + } } void ExecuteCloseSearchPanel(object sender, ExecutedRoutedEventArgs e) { - panel.Close(); + if (!panel.IsClosed) { + panel.Close(); + e.Handled = true; + } } /// diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/IActiveElement.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/IActiveElement.cs index 02466ce7a6..1c566d7c5c 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/IActiveElement.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/IActiveElement.cs @@ -18,6 +18,7 @@ using System; using ICSharpCode.NRefactory.Editor; +using ICSharpCode.AvalonEdit.Document; namespace ICSharpCode.AvalonEdit.Snippets { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/InsertionContext.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/InsertionContext.cs index 3130a97ca1..17438c6af4 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/InsertionContext.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/InsertionContext.cs @@ -19,9 +19,9 @@ using System; using System.Collections.Generic; using System.Windows; +using ICSharpCode.NRefactory.Editor; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Editing; -using ICSharpCode.NRefactory.Editor; namespace ICSharpCode.AvalonEdit.Snippets { @@ -70,7 +70,7 @@ namespace ICSharpCode.AvalonEdit.Snippets /// /// Gets the text document. /// - public TextDocument Document { get; private set; } + public ICSharpCode.AvalonEdit.Document.TextDocument Document { get; private set; } /// /// Gets the text that was selected before the insertion of the snippet. @@ -98,7 +98,7 @@ namespace ICSharpCode.AvalonEdit.Snippets public int InsertionPosition { get; set; } readonly int startPosition; - AnchorSegment wholeSnippetAnchor; + ICSharpCode.AvalonEdit.Document.AnchorSegment wholeSnippetAnchor; bool deactivateIfSnippetEmpty; /// diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/Snippet.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/Snippet.cs index 619e7c2f39..ebc2771bfc 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/Snippet.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/Snippet.cs @@ -17,9 +17,9 @@ // DEALINGS IN THE SOFTWARE. using System; +using ICSharpCode.NRefactory.Editor; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Editing; -using ICSharpCode.NRefactory.Editor; namespace ICSharpCode.AvalonEdit.Snippets { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetCaretElement.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetCaretElement.cs index f3efd15adc..0fd8ac05de 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetCaretElement.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetCaretElement.cs @@ -18,9 +18,8 @@ using System; using System.Runtime.Serialization; -using System.Windows.Input; -using ICSharpCode.AvalonEdit.Document; using ICSharpCode.NRefactory.Editor; +using ICSharpCode.AvalonEdit.Document; namespace ICSharpCode.AvalonEdit.Snippets { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetReplaceableTextElement.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetReplaceableTextElement.cs index 65af6935e2..e07b2843b7 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetReplaceableTextElement.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetReplaceableTextElement.cs @@ -21,9 +21,9 @@ using System.Linq; using System.Windows; using System.Windows.Documents; using System.Windows.Media; +using ICSharpCode.NRefactory.Editor; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Rendering; -using ICSharpCode.NRefactory.Editor; namespace ICSharpCode.AvalonEdit.Snippets { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditor.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditor.cs index a69bd2e831..91e183d46d 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditor.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditor.cs @@ -408,7 +408,7 @@ namespace ICSharpCode.AvalonEdit TextEditor editor = d as TextEditor; if (editor != null) { if ((bool)e.NewValue) - editor.TextArea.ReadOnlySectionProvider = ReadOnlyDocument.Instance; + editor.TextArea.ReadOnlySectionProvider = ReadOnlySectionDocument.Instance; else editor.TextArea.ReadOnlySectionProvider = NoReadOnlySections.Instance; @@ -905,7 +905,7 @@ namespace ICSharpCode.AvalonEdit if (start < 0 || start > documentLength) throw new ArgumentOutOfRangeException("start", start, "Value must be between 0 and " + documentLength); if (length < 0 || start + length > documentLength) - throw new ArgumentOutOfRangeException("length", length, "Value must be between 0 and " + (documentLength - length)); + throw new ArgumentOutOfRangeException("length", length, "Value must be between 0 and " + (documentLength - start)); textArea.Selection = SimpleSelection.Create(textArea, start, start + length); textArea.Caret.Offset = start + length; } @@ -944,9 +944,9 @@ namespace ICSharpCode.AvalonEdit { using (StreamReader reader = FileReader.OpenStream(stream, this.Encoding ?? Encoding.UTF8)) { this.Text = reader.ReadToEnd(); - this.Encoding = reader.CurrentEncoding; // assign encoding after ReadToEnd() so that the StreamReader can autodetect the encoding + SetCurrentValue(EncodingProperty, reader.CurrentEncoding); // assign encoding after ReadToEnd() so that the StreamReader can autodetect the encoding } - this.IsModified = false; + SetCurrentValue(IsModifiedProperty, Boxes.False); } /// @@ -997,7 +997,7 @@ namespace ICSharpCode.AvalonEdit document.WriteTextTo(writer); writer.Flush(); // do not close the stream - this.IsModified = false; + SetCurrentValue(IsModifiedProperty, Boxes.False); } /// diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditorOptions.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditorOptions.cs index e771f10e3c..5b0fa5538e 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditorOptions.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditorOptions.cs @@ -264,19 +264,11 @@ namespace ICSharpCode.AvalonEdit /// Gets text required to indent from the specified to the next indentation level. /// public virtual string GetIndentationString(int column) - { - return GetIndentationString(column, IndentationSize, ConvertTabsToSpaces); - } - - /// - /// Gets text required to indent from the specified to the next indentation level, - /// considering given and settings. - /// - public static string GetIndentationString(int column, int indentationSize, bool convertTabsToSpaces) { if (column < 1) throw new ArgumentOutOfRangeException("column", column, "Value must be at least 1."); - if (convertTabsToSpaces) { + int indentationSize = this.IndentationSize; + if (ConvertTabsToSpaces) { return new string(' ', indentationSize - ((column - 1) % indentationSize)); } else { return "\t"; diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextViewPosition.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextViewPosition.cs index 635e116277..3fcbfbf5fa 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextViewPosition.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextViewPosition.cs @@ -19,6 +19,7 @@ using System; using System.Globalization; using ICSharpCode.NRefactory; +using ICSharpCode.AvalonEdit.Document; namespace ICSharpCode.AvalonEdit { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/CallbackOnDispose.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/CallbackOnDispose.cs new file mode 100644 index 0000000000..ffcc717c11 --- /dev/null +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/CallbackOnDispose.cs @@ -0,0 +1,101 @@ +// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this +// software and associated documentation files (the "Software"), to deal in the Software +// without restriction, including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +// to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +using System; +using System.Collections.Generic; +using System.Threading; + +namespace ICSharpCode.AvalonEdit.Utils +{ + /// + /// Invokes an action when it is disposed. + /// + /// + /// This class ensures the callback is invoked at most once, + /// even when Dispose is called on multiple threads. + /// + sealed class CallbackOnDispose : IDisposable + { + Action action; + + public CallbackOnDispose(Action action) + { + if (action == null) + throw new ArgumentNullException("action"); + this.action = action; + } + + public void Dispose() + { + Action a = Interlocked.Exchange(ref action, null); + if (a != null) { + a(); + } + } + } + + /// + /// This class is used to prevent stack overflows by representing a 'busy' flag + /// that prevents reentrance when another call is running. + /// However, using a simple 'bool busy' is not thread-safe, so we use a + /// thread-static BusyManager. + /// + static class BusyManager + { + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes")] + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible", + Justification = "Should always be used with 'var'")] + public struct BusyLock : IDisposable + { + public static readonly BusyLock Failed = new BusyLock(null); + + readonly List objectList; + + internal BusyLock(List objectList) + { + this.objectList = objectList; + } + + public bool Success { + get { return objectList != null; } + } + + public void Dispose() + { + if (objectList != null) { + objectList.RemoveAt(objectList.Count - 1); + } + } + } + + [ThreadStatic] static List _activeObjects; + + public static BusyLock Enter(object obj) + { + List activeObjects = _activeObjects; + if (activeObjects == null) + activeObjects = _activeObjects = new List(); + for (int i = 0; i < activeObjects.Count; i++) { + if (activeObjects[i] == obj) + return BusyLock.Failed; + } + activeObjects.Add(obj); + return new BusyLock(activeObjects); + } + } +} diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs index 964c6833db..d67a6b17b2 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs @@ -27,7 +27,7 @@ namespace ICSharpCode.AvalonEdit.Utils /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")] [Serializable] - public sealed class Deque : ICollection, IReadOnlyCollection + public sealed class Deque : ICollection { T[] arr = Empty.Array; int size, head, tail; diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/DocumentPrinter.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/DocumentPrinter.cs index f92e36d649..49d3abc79a 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/DocumentPrinter.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/DocumentPrinter.cs @@ -18,17 +18,12 @@ using System; using System.Collections.Generic; -using System.IO; -using System.IO.Packaging; -using System.Printing; using System.Windows; -using System.Windows.Controls; using System.Windows.Documents; -using System.Windows.Xps; +using ICSharpCode.NRefactory.Editor; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Highlighting; -using ICSharpCode.NRefactory.Editor; namespace ICSharpCode.AvalonEdit.Utils { @@ -37,6 +32,7 @@ namespace ICSharpCode.AvalonEdit.Utils /// public static class DocumentPrinter { + #if NREFACTORY /// /// Converts a readonly TextDocument to a Block and applies the provided highlighting definition. /// @@ -49,6 +45,7 @@ namespace ICSharpCode.AvalonEdit.Utils highlighter = null; return ConvertTextDocumentToBlock(document, highlighter); } + #endif /// /// Converts an IDocument to a Block and applies the provided highlighter. @@ -73,6 +70,7 @@ namespace ICSharpCode.AvalonEdit.Utils return p; } + #if NREFACTORY /// /// Converts a readonly TextDocument to a RichText and applies the provided highlighting definition. /// @@ -85,6 +83,7 @@ namespace ICSharpCode.AvalonEdit.Utils highlighter = null; return ConvertTextDocumentToRichText(document, highlighter); } + #endif /// /// Converts an IDocument to a RichText and applies the provided highlighter. diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/IFreezable.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/IFreezable.cs new file mode 100644 index 0000000000..1529e29428 --- /dev/null +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/IFreezable.cs @@ -0,0 +1,123 @@ +// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this +// software and associated documentation files (the "Software"), to deal in the Software +// without restriction, including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +// to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; + +namespace ICSharpCode.AvalonEdit.Utils +{ + interface IFreezable + { + /// + /// Gets if this instance is frozen. Frozen instances are immutable and thus thread-safe. + /// + bool IsFrozen { get; } + + /// + /// Freezes this instance. + /// + void Freeze(); + } + + static class FreezableHelper + { + public static void ThrowIfFrozen(IFreezable freezable) + { + if (freezable.IsFrozen) + throw new InvalidOperationException("Cannot mutate frozen " + freezable.GetType().Name); + } + + public static IList FreezeListAndElements(IList list) + { + if (list != null) { + foreach (T item in list) + Freeze(item); + } + return FreezeList(list); + } + + public static IList FreezeList(IList list) + { + if (list == null || list.Count == 0) + return Empty.Array; + if (list.IsReadOnly) { + // If the list is already read-only, return it directly. + // This is important, otherwise we might undo the effects of interning. + return list; + } else { + return new ReadOnlyCollection(list.ToArray()); + } + } + + public static void Freeze(object item) + { + IFreezable f = item as IFreezable; + if (f != null) + f.Freeze(); + } + + public static T FreezeAndReturn(T item) where T : IFreezable + { + item.Freeze(); + return item; + } + + /// + /// If the item is not frozen, this method creates and returns a frozen clone. + /// If the item is already frozen, it is returned without creating a clone. + /// + public static T GetFrozenClone(T item) where T : IFreezable, ICloneable + { + if (!item.IsFrozen) { + item = (T)item.Clone(); + item.Freeze(); + } + return item; + } + } + + [Serializable] + abstract class AbstractFreezable : IFreezable + { + bool isFrozen; + + /// + /// Gets if this instance is frozen. Frozen instances are immutable and thus thread-safe. + /// + public bool IsFrozen { + get { return isFrozen; } + } + + /// + /// Freezes this instance. + /// + public void Freeze() + { + if (!isFrozen) { + FreezeInternal(); + isFrozen = true; + } + } + + protected virtual void FreezeInternal() + { + } + } +} \ No newline at end of file diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/ImmutableStack.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/ImmutableStack.cs new file mode 100644 index 0000000000..17e717d283 --- /dev/null +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/ImmutableStack.cs @@ -0,0 +1,132 @@ +// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this +// software and associated documentation files (the "Software"), to deal in the Software +// without restriction, including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +// to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; + +namespace ICSharpCode.AvalonEdit.Utils +{ + /// + /// An immutable stack. + /// + /// Using 'foreach' on the stack will return the items from top to bottom (in the order they would be popped). + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")] + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1711:IdentifiersShouldNotHaveIncorrectSuffix")] + [Serializable] + public sealed class ImmutableStack : IEnumerable + { + /// + /// Gets the empty stack instance. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes", Justification = "ImmutableStack is immutable")] + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1000:DoNotDeclareStaticMembersOnGenericTypes")] + public static readonly ImmutableStack Empty = new ImmutableStack(); + + readonly T value; + readonly ImmutableStack next; + + private ImmutableStack() + { + } + + private ImmutableStack(T value, ImmutableStack next) + { + this.value = value; + this.next = next; + } + + /// + /// Pushes an item on the stack. This does not modify the stack itself, but returns a new + /// one with the value pushed. + /// + public ImmutableStack Push(T item) + { + return new ImmutableStack(item, this); + } + + /// + /// Gets the item on the top of the stack. + /// + /// The stack is empty. + public T Peek() + { + if (IsEmpty) + throw new InvalidOperationException("Operation not valid on empty stack."); + return value; + } + + /// + /// Gets the item on the top of the stack. + /// Returns default(T) if the stack is empty. + /// + public T PeekOrDefault() + { + return value; + } + + /// + /// Gets the stack with the top item removed. + /// + /// The stack is empty. + public ImmutableStack Pop() + { + if (IsEmpty) + throw new InvalidOperationException("Operation not valid on empty stack."); + return next; + } + + /// + /// Gets if this stack is empty. + /// + public bool IsEmpty { + get { return next == null; } + } + + /// + /// Gets an enumerator that iterates through the stack top-to-bottom. + /// + public IEnumerator GetEnumerator() + { + ImmutableStack t = this; + while (!t.IsEmpty) { + yield return t.value; + t = t.next; + } + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } + + /// + public override string ToString() + { + StringBuilder b = new StringBuilder("[Stack"); + foreach (T val in this) { + b.Append(' '); + b.Append(val); + } + b.Append(']'); + return b.ToString(); + } + } +} \ No newline at end of file diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Rope.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Rope.cs index e45df86b55..2e489c2369 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Rope.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Rope.cs @@ -23,7 +23,6 @@ using System.Diagnostics; using System.Globalization; using System.Runtime.Serialization; using System.Text; -using ICSharpCode.NRefactory.Utils; namespace ICSharpCode.AvalonEdit.Utils { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Class.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/Class.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Class.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/Class.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/CompletionImage.cs b/src/Main/Base/Project/Editor/CodeCompletion/Images/CompletionImage.cs similarity index 98% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/CompletionImage.cs rename to src/Main/Base/Project/Editor/CodeCompletion/Images/CompletionImage.cs index 3691fac331..e45926db42 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/CompletionImage.cs +++ b/src/Main/Base/Project/Editor/CodeCompletion/Images/CompletionImage.cs @@ -25,7 +25,7 @@ using System.Windows.Media.Imaging; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem.Implementation; -namespace ICSharpCode.AvalonEdit.CodeCompletion +namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion { /// /// Provides icons for code-completion. @@ -44,7 +44,7 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion static BitmapImage LoadBitmap(string name) { - BitmapImage image = new BitmapImage(new Uri("pack://application:,,,/ICSharpCode.AvalonEdit;component/CodeCompletion/Images/" + name + ".png")); + BitmapImage image = new BitmapImage(new Uri("pack://application:,,,/ICSharpCode.SharpDevelop;component/Editor/CodeCompletion/Images/" + name + ".png")); image.Freeze(); return image; } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Constructor.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/Constructor.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Constructor.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/Constructor.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Delegate.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/Delegate.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Delegate.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/Delegate.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Enum.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/Enum.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Enum.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/Enum.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/EnumValue.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/EnumValue.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/EnumValue.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/EnumValue.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Event.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/Event.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Event.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/Event.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/ExtensionMethod.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/ExtensionMethod.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/ExtensionMethod.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/ExtensionMethod.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Field.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/Field.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Field.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/Field.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/FieldReadOnly.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/FieldReadOnly.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/FieldReadOnly.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/FieldReadOnly.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Indexer.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/Indexer.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Indexer.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/Indexer.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Interface.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/Interface.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Interface.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/Interface.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Literal.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/Literal.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Literal.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/Literal.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Method.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/Method.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Method.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/Method.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/NameSpace.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/NameSpace.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/NameSpace.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/NameSpace.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Operator.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/Operator.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Operator.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/Operator.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/OverlayInternal.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/OverlayInternal.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/OverlayInternal.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/OverlayInternal.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/OverlayPrivate.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/OverlayPrivate.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/OverlayPrivate.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/OverlayPrivate.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/OverlayProtected.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/OverlayProtected.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/OverlayProtected.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/OverlayProtected.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/OverlayProtectedInternal.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/OverlayProtectedInternal.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/OverlayProtectedInternal.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/OverlayProtectedInternal.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/OverlayStatic.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/OverlayStatic.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/OverlayStatic.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/OverlayStatic.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/PInvokeMethod.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/PInvokeMethod.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/PInvokeMethod.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/PInvokeMethod.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Property.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/Property.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Property.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/Property.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/StaticClass.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/StaticClass.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/StaticClass.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/StaticClass.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Struct.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/Struct.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/Struct.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/Struct.png diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/VirtualMethod.png b/src/Main/Base/Project/Editor/CodeCompletion/Images/VirtualMethod.png similarity index 100% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/Images/VirtualMethod.png rename to src/Main/Base/Project/Editor/CodeCompletion/Images/VirtualMethod.png diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index 07b470e716..ee778929a9 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -140,6 +140,7 @@ + @@ -380,6 +381,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + ExtractInterfaceDialog.cs @@ -854,6 +880,7 @@ + diff --git a/src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs b/src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs index d7cb76e052..4bf0774962 100644 --- a/src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs +++ b/src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs @@ -24,6 +24,7 @@ using System.Windows.Forms; using System.Windows.Media; using ICSharpCode.AvalonEdit.CodeCompletion; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.SharpDevelop.Editor.CodeCompletion; namespace ICSharpCode.SharpDevelop { From 53860bfd63c6706c8598fa30902cef1f61572090 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 28 Jun 2014 15:47:56 +0200 Subject: [PATCH 045/575] AvalonEdit: use NRefactory public key in the WithNRefactory-version --- .../ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj | 1 + src/Main/SharpDevelop/app.template.config | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj index 52536368c3..df226bd6bd 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj @@ -39,6 +39,7 @@ v4.5 DOTNET4;NREFACTORY + ..\..\NRefactory\ICSharpCode.NRefactory.snk bin\Debug\ diff --git a/src/Main/SharpDevelop/app.template.config b/src/Main/SharpDevelop/app.template.config index 5896802746..40a0be1c0b 100644 --- a/src/Main/SharpDevelop/app.template.config +++ b/src/Main/SharpDevelop/app.template.config @@ -43,8 +43,8 @@ - - + + From e3899d10802bdd1155cc61cabed08101e2d58e8d Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 28 Jun 2014 16:13:10 +0200 Subject: [PATCH 046/575] Fix ArgumentOutOfRangeException in DefaultCompletionContextProvider --- .../Completion/ICompletionContextProvider.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/ICompletionContextProvider.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/ICompletionContextProvider.cs index ed70580e66..b6e9822eec 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/ICompletionContextProvider.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Completion/ICompletionContextProvider.cs @@ -124,6 +124,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion bool IsInsideType (IUnresolvedEntity currentType, TextLocation location) { + if (currentType.Region.IsEmpty) + return false; int startOffset = document.GetOffset (currentType.Region.Begin); int endOffset = document.GetOffset (location); //bool foundEndBracket = false; From a65ad389187042c149479132dea406e60c93d262 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 28 Jun 2014 16:25:08 +0200 Subject: [PATCH 047/575] Fix NullReferenceException in SymbolCollector --- .../Analysis/SymbolCollector.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs index 7a8959e885..e63b616389 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs @@ -129,10 +129,13 @@ namespace ICSharpCode.NRefactory.Analysis } if (member.DeclaringType.Kind == TypeKind.Interface) { - foreach (var derivedType in g.GetNode (member.DeclaringTypeDefinition).DerivedTypes) { - var mem = SearchMember (derivedType.TypeDefinition, member); - if (mem != null) - symbols.Add (mem); + var declaringTypeNode = g.GetNode(member.DeclaringTypeDefinition); + if (declaringTypeNode != null) { + foreach (var derivedType in declaringTypeNode.DerivedTypes) { + var mem = SearchMember (derivedType.TypeDefinition, member); + if (mem != null) + symbols.Add (mem); + } } } From 3b03e243562d315b651b07171e61664759a647c5 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 28 Jun 2014 16:36:39 +0200 Subject: [PATCH 048/575] Pass conditional symbols to completion engine. --- .../Project/Src/Completion/CSharpCompletionContext.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionContext.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionContext.cs index 7d45f6f541..007b2e2078 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionContext.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionContext.cs @@ -90,6 +90,7 @@ namespace CSharpBinding.Completion this.ProjectContent = projectContent; this.TypeResolveContextAtCaret = parseInfo.UnresolvedFile.GetTypeResolveContext(compilation, caretLocation); this.CompletionContextProvider = new DefaultCompletionContextProvider(document, parseInfo.UnresolvedFile); + this.CompletionContextProvider.ConditionalSymbols.AddRange(parseInfo.SyntaxTree.ConditionalSymbols); } } } From 84853183962255f80e2999f3284514a42f8d68e9 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 28 Jun 2014 16:44:56 +0200 Subject: [PATCH 049/575] Fix cutting text from editor when the Clipboard class throws an ExternalException. http://community.sharpdevelop.net/forums/t/21713.aspx --- .../ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs index 9666e044d9..91140970a5 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs @@ -342,7 +342,6 @@ namespace ICSharpCode.AvalonEdit.Editing } catch (ExternalException) { // Apparently this exception sometimes happens randomly. // The MS controls just ignore it, so we'll do the same. - return false; } string text = textArea.Selection.GetText(); From 3e5b969d09158a241f684887c1e9752910ac915e Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Sat, 28 Jun 2014 17:04:00 +0200 Subject: [PATCH 050/575] Reduced unneeded lookup iterations when several symbol searches have the same search term. --- .../CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs index df942efb17..fbd05adfc5 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs @@ -131,7 +131,7 @@ namespace CSharpBinding if (textSource == null) return; if (searchScopeList != null) { - if (!searchScopeList.Any( + if (!searchScopeList.DistinctBy(scope => scope.SearchTerm ?? String.Empty).Any( scope => (scope.SearchTerm == null) || (textSource.IndexOf(scope.SearchTerm, 0, textSource.TextLength, StringComparison.Ordinal) >= 0))) return; } @@ -216,7 +216,7 @@ namespace CSharpBinding if (textSource == null) return; if (searchScopeList != null) { - if (!searchScopeList.Any( + if (!searchScopeList.DistinctBy(scope => scope.SearchTerm ?? String.Empty).Any( scope => (scope.SearchTerm == null) || (textSource.IndexOf(scope.SearchTerm, 0, textSource.TextLength, StringComparison.Ordinal) >= 0))) return; } From 72b0f87b8e46e1505d398b08f503df386e59f86d Mon Sep 17 00:00:00 2001 From: gumme Date: Tue, 1 Jul 2014 11:22:12 +0200 Subject: [PATCH 051/575] Setting error sink to handle errors when pasting items. --- .../WpfDesign/WpfDesign.XamlDom/Project/XamlParser.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlParser.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlParser.cs index 7006c57cf7..003b9ef987 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlParser.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlParser.cs @@ -726,6 +726,7 @@ namespace ICSharpCode.WpfDesign.XamlDom XamlParser parser = new XamlParser(); parser.settings = settings; + parser.errorSink = (IXamlErrorSink)settings.ServiceProvider.GetService(typeof(IXamlErrorSink)); parser.document = root.OwnerDocument; var xamlObject = parser.ParseObject(element as XmlElement); if (xamlObject != null) From 5a599d21e9d4b5a80daf58a8a4ab9f37c4d30c9a Mon Sep 17 00:00:00 2001 From: gumme Date: Tue, 1 Jul 2014 11:51:29 +0200 Subject: [PATCH 052/575] Added check if parent view is ContentControl to avoid exception when pasting on for example a Border, that have a content property but is not a ContentControl. --- .../WpfDesign.Designer/Project/Xaml/XamlEditOperations.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlEditOperations.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlEditOperations.cs index 7f414eb460..e50b2798c2 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlEditOperations.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlEditOperations.cs @@ -131,7 +131,7 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml AddInParent(parent, pastedItems); pasted = true; } - } else if (pastedItems.Count == 1 && parent.ContentProperty.Value == null && parent.ContentProperty.ValueOnInstance == null && DefaultPlacementBehavior.CanContentControlAdd((ContentControl)parent.View)) { + } else if (pastedItems.Count == 1 && parent.ContentProperty.Value == null && parent.ContentProperty.ValueOnInstance == null && parent.View is ContentControl && DefaultPlacementBehavior.CanContentControlAdd((ContentControl)parent.View)) { AddInParent(parent, pastedItems); pasted = true; } From 8fdacbc4c0dd1d43aff34a8be30e0a460db90ead Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Wed, 2 Jul 2014 02:00:03 +0200 Subject: [PATCH 053/575] Fix #105: Toggling multiple block comments --- .../Project/Src/Editor/IFormattingStrategy.cs | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/Main/Base/Project/Src/Editor/IFormattingStrategy.cs b/src/Main/Base/Project/Src/Editor/IFormattingStrategy.cs index d688dcecdc..d8fbb21a8e 100644 --- a/src/Main/Base/Project/Src/Editor/IFormattingStrategy.cs +++ b/src/Main/Base/Project/Src/Editor/IFormattingStrategy.cs @@ -154,10 +154,10 @@ namespace ICSharpCode.SharpDevelop.Editor editor.Select(region.EndOffset, selectionLength); region = FindSelectedCommentRegion(editor, blockStart, blockEnd); } else { - region = null; + region = null; } } while(region != null); - + } else { editor.Document.Insert(endOffset, blockEnd); editor.Document.Insert(startOffset, blockStart); @@ -187,8 +187,16 @@ namespace ICSharpCode.SharpDevelop.Editor if (commentStartOffset >= 0) { commentEndOffset = selectedText.IndexOf(commentEnd, commentStartOffset + commentStart.Length - editor.SelectionStart); - } else { - commentEndOffset = selectedText.IndexOf(commentEnd); + } + + // Try to search end of comment in whole selection + bool startAfterEnd = false; + int commentEndOffsetWholeText = selectedText.IndexOf(commentEnd); + if ((commentEndOffsetWholeText >= 0) && (commentEndOffsetWholeText < (commentStartOffset - editor.SelectionStart))) { + // There seems to be an end offset before the start offset in selection + commentStartOffset = -1; + startAfterEnd = true; + commentEndOffset = commentEndOffsetWholeText; } if (commentEndOffset >= 0) { @@ -205,7 +213,11 @@ namespace ICSharpCode.SharpDevelop.Editor offset = document.TextLength; } string text = document.GetText(0, offset); - commentStartOffset = text.LastIndexOf(commentStart); + if (startAfterEnd) { + commentStartOffset = text.LastIndexOf(commentStart, editor.SelectionStart); + } else { + commentStartOffset = text.LastIndexOf(commentStart); + } if (commentStartOffset >= 0) { // Find end of comment before comment start. commentEndBeforeStartOffset = text.IndexOf(commentEnd, commentStartOffset, editor.SelectionStart - commentStartOffset); From 13277b4906f7fede95f7099ead64e54f2b18d34d Mon Sep 17 00:00:00 2001 From: gumme Date: Wed, 2 Jul 2014 11:07:57 +0200 Subject: [PATCH 054/575] Fixed bug where resizing right and bottom edges on controls did not snap properly. --- .../Project/Extensions/SnaplinePlacementBehavior.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs index f48ca4ab07..90520ca808 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs @@ -121,7 +121,6 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions } else { bounds.Height = Math.Max(0, bounds.Height + delta); } - bounds.Height = Math.Max(0, bounds.Height - delta); info.Bounds = bounds; } else { foreach (var item in operation.PlacedItems) { @@ -145,7 +144,6 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions } else { bounds.Width = Math.Max(0, bounds.Width + delta); } - bounds.Width = Math.Max(0, bounds.Width - delta); info.Bounds = bounds; } else { foreach (var item in operation.PlacedItems) { From f071ff561888b0c409678bc1cd4a8dd494a12084 Mon Sep 17 00:00:00 2001 From: gumme Date: Wed, 2 Jul 2014 14:19:27 +0200 Subject: [PATCH 055/575] Modified precision for element positioning and boundaries to use 0 decimals. --- .../WpfDesign/WpfDesign/Project/PlacementInformation.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PlacementInformation.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PlacementInformation.cs index 34832763b3..4bae5b1140 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PlacementInformation.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PlacementInformation.cs @@ -28,9 +28,9 @@ namespace ICSharpCode.WpfDesign { /// /// The designer rounds bounds to this number of digits to avoid floating point errors. - /// Value: 1 + /// Value: 0 /// - public const int BoundsPrecision = 1; + public const int BoundsPrecision = 0; Rect originalBounds, bounds; readonly DesignItem item; From 43aecafb420180875c12c6ad23e49c5e0ffc65ba Mon Sep 17 00:00:00 2001 From: gumme Date: Wed, 2 Jul 2014 15:44:16 +0200 Subject: [PATCH 056/575] StackPanel no longer removes properties that are used in the panel. --- .../Project/Extensions/StackPanelPlacementSupport.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/StackPanelPlacementSupport.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/StackPanelPlacementSupport.cs index 1656e5c0ea..3180cbb3a4 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/StackPanelPlacementSupport.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/StackPanelPlacementSupport.cs @@ -89,11 +89,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions public override void EnterContainer(PlacementOperation operation) { base.EnterContainer(operation); - foreach (var info in operation.PlacedItems) { - info.Item.Properties[FrameworkElement.MarginProperty].Reset(); - info.Item.Properties[FrameworkElement.HorizontalAlignmentProperty].Reset(); - info.Item.Properties[FrameworkElement.VerticalAlignmentProperty].Reset(); - } + _rectangle.Visibility = Visibility.Visible; } From dd292ff7f0076d0119b11a772fb388d47125f688 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Thu, 3 Jul 2014 01:38:11 +0200 Subject: [PATCH 057/575] Fix #506: Tabs/spaces not shown in text editor for C# files --- .../Project/Src/CSharpLanguageBinding.cs | 238 ++++++------------ 1 file changed, 79 insertions(+), 159 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs index 48103a5acf..99e66e6178 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs @@ -20,6 +20,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Reflection; using System.Threading; using ICSharpCode.AvalonEdit; using ICSharpCode.AvalonEdit.Highlighting; @@ -83,9 +84,9 @@ namespace CSharpBinding // Create instance of options adapter and register it as service var formattingPolicy = CSharpFormattingPolicies.Instance.GetProjectOptions( SD.ProjectService.FindProjectContainingFile(editor.FileName)); - options = new CodeEditorFormattingOptionsAdapter(editor.Options, formattingPolicy.OptionsContainer); var textEditor = editor.GetService(); if (textEditor != null) { + options = new CodeEditorFormattingOptionsAdapter(textEditor.Options, editor.Options, formattingPolicy.OptionsContainer); var textViewServices = textEditor.TextArea.TextView.Services; // Unregister any previous ITextEditorOptions instance from editor, if existing, register our impl. @@ -94,7 +95,7 @@ namespace CSharpBinding // Set TextEditor's options to same object originalEditorOptions = textEditor.Options; - textEditor.Options = options; + textEditor.Options = options.TextEditorOptions; } } @@ -110,7 +111,7 @@ namespace CSharpBinding textView.Services.RemoveService(typeof(ITextEditorOptions)); // Reset TextEditor options, too? - if ((textEditor.Options != null) && (textEditor.Options == options)) + if ((textEditor.Options != null) && (textEditor.Options == options.TextEditorOptions)) textEditor.Options = originalEditorOptions; } @@ -128,225 +129,144 @@ namespace CSharpBinding } } - class CodeEditorFormattingOptionsAdapter : TextEditorOptions, ITextEditorOptions, ICodeEditorOptions + class CodeEditorFormattingOptionsAdapter : ITextEditorOptions, INotifyPropertyChanged { CSharpFormattingOptionsContainer container; - readonly ITextEditorOptions globalOptions; - readonly ICodeEditorOptions globalCodeEditorOptions; + readonly TextEditorOptions avalonEditOptions; + readonly TextEditorOptions originalAvalonEditOptions; + readonly ITextEditorOptions originalSDOptions; - public CodeEditorFormattingOptionsAdapter(ITextEditorOptions globalOptions, CSharpFormattingOptionsContainer container) + public CodeEditorFormattingOptionsAdapter(TextEditorOptions originalAvalonEditOptions, ITextEditorOptions originalSDOptions, CSharpFormattingOptionsContainer container) { - if (globalOptions == null) - throw new ArgumentNullException("globalOptions"); + if (originalAvalonEditOptions == null) + throw new ArgumentNullException("originalAvalonEditOptions"); + if (originalSDOptions == null) + throw new ArgumentNullException("originalSDOptions"); if (container == null) throw new ArgumentNullException("container"); - this.globalOptions = globalOptions; - this.globalCodeEditorOptions = globalOptions as ICodeEditorOptions; + this.originalAvalonEditOptions = originalAvalonEditOptions; + this.avalonEditOptions = new TextEditorOptions(originalAvalonEditOptions); + this.originalSDOptions = originalSDOptions; this.container = container; + // Update overridden options once + UpdateOverriddenProperties(); + CSharpFormattingPolicies.Instance.FormattingPolicyUpdated += OnFormattingPolicyUpdated; - globalOptions.PropertyChanged += OnGlobalOptionsPropertyChanged; + this.originalAvalonEditOptions.PropertyChanged += OnOrigAvalonOptionsPropertyChanged; + this.originalSDOptions.PropertyChanged += OnSDOptionsPropertyChanged; } void OnFormattingPolicyUpdated(object sender, CSharpBinding.FormattingStrategy.CSharpFormattingPolicyUpdateEventArgs e) { + // Update editor options from changed policy + UpdateOverriddenProperties(); + OnPropertyChanged("IndentationSize"); + OnPropertyChanged("IndentationString"); OnPropertyChanged("ConvertTabsToSpaces"); } - - void OnGlobalOptionsPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + + void UpdateOverriddenProperties() { - OnPropertyChanged(e.PropertyName); + avalonEditOptions.IndentationSize = container.GetEffectiveIndentationSize() ?? originalSDOptions.IndentationSize; + avalonEditOptions.ConvertTabsToSpaces = container.GetEffectiveConvertTabsToSpaces() ?? originalSDOptions.ConvertTabsToSpaces; } - - #region ITextEditorOptions implementation - public override int IndentationSize { - get { - return container.GetEffectiveIndentationSize() ?? globalOptions.IndentationSize; + void OnOrigAvalonOptionsPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + if ((e.PropertyName != "IndentationSize") && (e.PropertyName != "IndentationString") && (e.PropertyName != "ConvertTabsToSpaces")) { + // Update values in our own TextEditorOptions instance + PropertyInfo propertyInfo = typeof(TextEditorOptions).GetProperty(e.PropertyName); + if (propertyInfo != null) { + propertyInfo.SetValue(avalonEditOptions, propertyInfo.GetValue(originalAvalonEditOptions)); + } + } else { + UpdateOverriddenProperties(); } + OnPropertyChanged(e.PropertyName); } - public override bool ConvertTabsToSpaces { - get { - return container.GetEffectiveConvertTabsToSpaces() ?? globalOptions.ConvertTabsToSpaces; - } + void OnSDOptionsPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + OnPropertyChanged(e.PropertyName); } - - public bool AutoInsertBlockEnd { - get { - return globalOptions.AutoInsertBlockEnd; + + public event PropertyChangedEventHandler PropertyChanged; + + void OnPropertyChanged(string propertyName) + { + if (PropertyChanged != null) { + PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } - - public int VerticalRulerColumn { + + public TextEditorOptions TextEditorOptions + { get { - return globalOptions.VerticalRulerColumn; + return avalonEditOptions; } } - public bool UnderlineErrors { + #region Overridden properties + + public int IndentationSize { get { - return globalOptions.UnderlineErrors; + // Get value from own TextEditorOptions instance + return avalonEditOptions.IndentationSize; } } - public string FontFamily { + public string IndentationString { get { - return globalOptions.FontFamily; + // Get value from own TextEditorOptions instance + return avalonEditOptions.IndentationString; } } - public double FontSize { + public bool ConvertTabsToSpaces { get { - return globalOptions.FontSize; + // Get value from own TextEditorOptions instance + return avalonEditOptions.ConvertTabsToSpaces; } } - + #endregion + + #region Rest of ITextEditorOptions implementation - public override bool AllowScrollBelowDocument { - get { - return (globalCodeEditorOptions != null) ? globalCodeEditorOptions.AllowScrollBelowDocument : default(bool); - } - set { - if (globalCodeEditorOptions != null) { - globalCodeEditorOptions.AllowScrollBelowDocument = value; - } - } - } - - public bool ShowLineNumbers { - get { - return (globalCodeEditorOptions != null) ? globalCodeEditorOptions.ShowLineNumbers : default(bool); - } - set { - if (globalCodeEditorOptions != null) { - globalCodeEditorOptions.ShowLineNumbers = value; - } - } - } - - public bool EnableChangeMarkerMargin { - get { - return (globalCodeEditorOptions != null) ? globalCodeEditorOptions.EnableChangeMarkerMargin : default(bool); - } - set { - if (globalCodeEditorOptions != null) { - globalCodeEditorOptions.EnableChangeMarkerMargin = value; - } - } - } - - public bool WordWrap { - get { - return (globalCodeEditorOptions != null) ? globalCodeEditorOptions.WordWrap : default(bool); - } - set { - if (globalCodeEditorOptions != null) { - globalCodeEditorOptions.WordWrap = value; - } - } - } - - public bool CtrlClickGoToDefinition { - get { - return (globalCodeEditorOptions != null) ? globalCodeEditorOptions.CtrlClickGoToDefinition : default(bool); - } - set { - if (globalCodeEditorOptions != null) { - globalCodeEditorOptions.CtrlClickGoToDefinition = value; - } - } - } - - public bool MouseWheelZoom { - get { - return (globalCodeEditorOptions != null) ? globalCodeEditorOptions.MouseWheelZoom : default(bool); - } - set { - if (globalCodeEditorOptions != null) { - globalCodeEditorOptions.MouseWheelZoom = value; - } - } - } - - public bool HighlightBrackets { + public bool AutoInsertBlockEnd { get { - return (globalCodeEditorOptions != null) ? globalCodeEditorOptions.HighlightBrackets : default(bool); - } - set { - if (globalCodeEditorOptions != null) { - globalCodeEditorOptions.HighlightBrackets = value; - } + return originalSDOptions.AutoInsertBlockEnd; } } - public bool HighlightSymbol { + public int VerticalRulerColumn { get { - return (globalCodeEditorOptions != null) ? globalCodeEditorOptions.HighlightSymbol : default(bool); - } - set { - if (globalCodeEditorOptions != null) { - globalCodeEditorOptions.HighlightSymbol = value; - } + return originalSDOptions.VerticalRulerColumn; } } - public bool EnableAnimations { + public bool UnderlineErrors { get { - return (globalCodeEditorOptions != null) ? globalCodeEditorOptions.EnableAnimations : default(bool); - } - set { - if (globalCodeEditorOptions != null) { - globalCodeEditorOptions.EnableAnimations = value; - } + return originalSDOptions.UnderlineErrors; } } - public bool UseSmartIndentation { + public string FontFamily { get { - return (globalCodeEditorOptions != null) ? globalCodeEditorOptions.UseSmartIndentation : default(bool); - } - set { - if (globalCodeEditorOptions != null) { - globalCodeEditorOptions.UseSmartIndentation = value; - } + return originalSDOptions.FontFamily; } } - public bool EnableFolding { + public double FontSize { get { - return (globalCodeEditorOptions != null) ? globalCodeEditorOptions.EnableFolding : default(bool); - } - set { - if (globalCodeEditorOptions != null) { - globalCodeEditorOptions.EnableFolding = value; - } + return originalSDOptions.FontSize; } } - public bool EnableQuickClassBrowser { - get { - return (globalCodeEditorOptions != null) ? globalCodeEditorOptions.EnableQuickClassBrowser : default(bool); - } - set { - if (globalCodeEditorOptions != null) { - globalCodeEditorOptions.EnableQuickClassBrowser = value; - } - } - } + #endregion - public bool ShowHiddenDefinitions { - get { - return (globalCodeEditorOptions != null) ? globalCodeEditorOptions.ShowHiddenDefinitions : default(bool); - } - set { - if (globalCodeEditorOptions != null) { - globalCodeEditorOptions.ShowHiddenDefinitions = value; - } - } - } } } From f2568c1f8253f55863ab7165a633bf7d9d09db5b Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Thu, 3 Jul 2014 20:05:00 +0100 Subject: [PATCH 058/575] Fix ReflectionTypeLoadException in WPF designer. The Xceed.Wpf.Toolkit.dll file needed by the WPF designer was not included in the installer. --- src/Setup/Files.wxs | 3 +++ src/Setup/Setup.wxs | 1 + 2 files changed, 4 insertions(+) diff --git a/src/Setup/Files.wxs b/src/Setup/Files.wxs index c9aaef23c8..d23a95d9fc 100644 --- a/src/Setup/Files.wxs +++ b/src/Setup/Files.wxs @@ -1342,6 +1342,9 @@ + + + diff --git a/src/Setup/Setup.wxs b/src/Setup/Setup.wxs index 1633ffb543..d32bd32c2c 100644 --- a/src/Setup/Setup.wxs +++ b/src/Setup/Setup.wxs @@ -436,6 +436,7 @@ + From 0c7ba630e4b17bc0e36502c52094ef747e87fd8c Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sat, 5 Jul 2014 10:23:10 +0200 Subject: [PATCH 059/575] fix #498: Additional problems in DebuggerDotCompletion fix #460: Debugger console: No completion inside constructors --- .../Project/CSharpBinding.csproj | 1 + .../Project/Src/CSharpLanguageBinding.cs | 280 +++++------------- .../Project/Src/CSharpTextEditorExtension.cs | 253 ++++++++++++++++ .../Src/Completion/CSharpCompletionBinding.cs | 2 - .../Src/Completion/CSharpCompletionContext.cs | 49 ++- .../Completion/CSharpCompletionDataFactory.cs | 2 +- .../Breakpoints/BreakpointEditorPopup.xaml.cs | 3 +- .../Pads/AutoCompleteTextBox.cs | 18 +- .../Debugger.AddIn/Pads/ConsolePad.cs | 5 +- .../Pads/DebuggerDotCompletion.cs | 156 +--------- .../LanguageBinding/DefaultLanguageBinding.cs | 2 +- .../LanguageBinding/ILanguageBinding.cs | 5 +- 12 files changed, 388 insertions(+), 388 deletions(-) create mode 100644 src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpTextEditorExtension.cs diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj index dbbd1b7739..970be27a88 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj @@ -91,6 +91,7 @@ CSharpSemanticHighlighter.cs + diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs index 99e66e6178..548fddd585 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs @@ -20,13 +20,18 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Linq; using System.Reflection; using System.Threading; using ICSharpCode.AvalonEdit; using ICSharpCode.AvalonEdit.Highlighting; using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.CSharp.Refactoring; +using ICSharpCode.NRefactory.Editor; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.SharpDevelop.Editor.CodeCompletion; +using ICSharpCode.SharpDevelop.Project; using CSharpBinding.Completion; using CSharpBinding.FormattingStrategy; using CSharpBinding.Refactoring; @@ -50,223 +55,98 @@ namespace CSharpBinding this.container.AddService(typeof(System.CodeDom.Compiler.CodeDomProvider), new Microsoft.CSharp.CSharpCodeProvider()); } - public override ICodeCompletionBinding CreateCompletionBinding(FileName fileName, TextLocation currentLocation, ICSharpCode.NRefactory.Editor.ITextSource fileContent) + public override ICodeCompletionBinding CreateCompletionBinding(string expressionToComplete, FileName fileName, TextLocation location, ICodeContext context) { if (fileName == null) throw new ArgumentNullException("fileName"); - return new CSharpCompletionBinding(fileName, currentLocation, fileContent); - } - } - - public class CSharpTextEditorExtension : ITextEditorExtension - { - ITextEditor editor; - IssueManager inspectionManager; - IList contextActionProviders; - CodeManipulation codeManipulation; - CaretReferenceHighlightRenderer renderer; - CodeEditorFormattingOptionsAdapter options; - TextEditorOptions originalEditorOptions; - - public void Attach(ITextEditor editor) - { - this.editor = editor; - inspectionManager = new IssueManager(editor); - codeManipulation = new CodeManipulation(editor); - renderer = new CaretReferenceHighlightRenderer(editor); - - // Patch editor options (indentation) to project-specific settings - if (!editor.ContextActionProviders.IsReadOnly) { - contextActionProviders = AddInTree.BuildItems("/SharpDevelop/ViewContent/TextEditor/C#/ContextActions", null); - editor.ContextActionProviders.AddRange(contextActionProviders); - } - - // Create instance of options adapter and register it as service - var formattingPolicy = CSharpFormattingPolicies.Instance.GetProjectOptions( - SD.ProjectService.FindProjectContainingFile(editor.FileName)); - var textEditor = editor.GetService(); - if (textEditor != null) { - options = new CodeEditorFormattingOptionsAdapter(textEditor.Options, editor.Options, formattingPolicy.OptionsContainer); - var textViewServices = textEditor.TextArea.TextView.Services; - - // Unregister any previous ITextEditorOptions instance from editor, if existing, register our impl. - textViewServices.RemoveService(typeof(ITextEditorOptions)); - textViewServices.AddService(typeof(ITextEditorOptions), options); - - // Set TextEditor's options to same object - originalEditorOptions = textEditor.Options; - textEditor.Options = options.TextEditorOptions; - } + if (context == null) + throw new ArgumentNullException("context"); + string content = GeneratePartialClassContextStub(fileName, location, context); + const string caretPoint = "$__Caret_Point__$;"; + int caretOffset = content.IndexOf(caretPoint, StringComparison.Ordinal) + expressionToComplete.Length; + SD.Log.DebugFormatted("context used for dot completion: {0}", content.Replace(caretPoint, "$" + expressionToComplete + "|$")); + var doc = new ReadOnlyDocument(content.Replace(caretPoint, expressionToComplete)); + return new CSharpCompletionBinding(fileName, doc.GetLocation(caretOffset), doc.CreateSnapshot()); } - public void Detach() + static string GeneratePartialClassContextStub(FileName fileName, TextLocation location, ICodeContext context) { - var textEditor = editor.GetService(); - if (textEditor != null) { - var textView = textEditor.TextArea.TextView; - - // Unregister our ITextEditorOptions instance from editor - var optionsService = textView.GetService(); - if ((optionsService != null) && (optionsService == options)) - textView.Services.RemoveService(typeof(ITextEditorOptions)); - - // Reset TextEditor options, too? - if ((textEditor.Options != null) && (textEditor.Options == options.TextEditorOptions)) - textEditor.Options = originalEditorOptions; - } - - codeManipulation.Dispose(); - if (inspectionManager != null) { - inspectionManager.Dispose(); - inspectionManager = null; - } - if (contextActionProviders != null) { - editor.ContextActionProviders.RemoveAll(contextActionProviders.Contains); + var compilation = SD.ParserService.GetCompilationForFile(fileName); + var file = SD.ParserService.GetExistingUnresolvedFile(fileName); + if (compilation == null || file == null) + return ""; + var unresolvedMember = file.GetMember(location); + if (unresolvedMember == null) + return ""; + var member = unresolvedMember.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)); + if (member == null) + return ""; + var builder = new TypeSystemAstBuilder(); + MethodDeclaration decl; + if (unresolvedMember is IMethod) { + // If it's a method, convert it directly (including parameters + type parameters) + decl = (MethodDeclaration)builder.ConvertEntity(member); + } else { + // Otherwise, create a method anyways, and copy the parameters + decl = new MethodDeclaration(); + if (member is IParameterizedMember) { + foreach (var p in ((IParameterizedMember)member).Parameters) { + decl.Parameters.Add(builder.ConvertParameter(p)); + } + } } - renderer.Dispose(); - options = null; - this.editor = null; - } - } - - class CodeEditorFormattingOptionsAdapter : ITextEditorOptions, INotifyPropertyChanged - { - CSharpFormattingOptionsContainer container; - readonly TextEditorOptions avalonEditOptions; - readonly TextEditorOptions originalAvalonEditOptions; - readonly ITextEditorOptions originalSDOptions; - - public CodeEditorFormattingOptionsAdapter(TextEditorOptions originalAvalonEditOptions, ITextEditorOptions originalSDOptions, CSharpFormattingOptionsContainer container) - { - if (originalAvalonEditOptions == null) - throw new ArgumentNullException("originalAvalonEditOptions"); - if (originalSDOptions == null) - throw new ArgumentNullException("originalSDOptions"); - if (container == null) - throw new ArgumentNullException("container"); - - this.originalAvalonEditOptions = originalAvalonEditOptions; - this.avalonEditOptions = new TextEditorOptions(originalAvalonEditOptions); - this.originalSDOptions = originalSDOptions; - this.container = container; - - // Update overridden options once - UpdateOverriddenProperties(); - - CSharpFormattingPolicies.Instance.FormattingPolicyUpdated += OnFormattingPolicyUpdated; - this.originalAvalonEditOptions.PropertyChanged += OnOrigAvalonOptionsPropertyChanged; - this.originalSDOptions.PropertyChanged += OnSDOptionsPropertyChanged; - } - - void OnFormattingPolicyUpdated(object sender, CSharpBinding.FormattingStrategy.CSharpFormattingPolicyUpdateEventArgs e) - { - // Update editor options from changed policy - UpdateOverriddenProperties(); - - OnPropertyChanged("IndentationSize"); - OnPropertyChanged("IndentationString"); - OnPropertyChanged("ConvertTabsToSpaces"); + decl.Name = "__DebuggerStub__"; + decl.ReturnType = builder.ConvertType(member.ReturnType); + decl.Modifiers = unresolvedMember.IsStatic ? Modifiers.Static : Modifiers.None; + // Make the method look like an explicit interface implementation so that it doesn't appear in CC + decl.PrivateImplementationType = new SimpleType("__DummyType__"); + decl.Body = GenerateBodyFromContext(builder, context.LocalVariables.ToArray()); + return WrapInType(unresolvedMember.DeclaringTypeDefinition, decl).ToString(); } - - void UpdateOverriddenProperties() + + static BlockStatement GenerateBodyFromContext(TypeSystemAstBuilder builder, IVariable[] variables) { - avalonEditOptions.IndentationSize = container.GetEffectiveIndentationSize() ?? originalSDOptions.IndentationSize; - avalonEditOptions.ConvertTabsToSpaces = container.GetEffectiveConvertTabsToSpaces() ?? originalSDOptions.ConvertTabsToSpaces; + var body = new BlockStatement(); + foreach (var v in variables) + body.Statements.Add(new VariableDeclarationStatement(builder.ConvertType(v.Type), v.Name)); + body.Statements.Add(new ExpressionStatement(new IdentifierExpression("$__Caret_Point__$"))); + return body; } - void OnOrigAvalonOptionsPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + static AstNode WrapInType(IUnresolvedTypeDefinition entity, EntityDeclaration decl) { - if ((e.PropertyName != "IndentationSize") && (e.PropertyName != "IndentationString") && (e.PropertyName != "ConvertTabsToSpaces")) { - // Update values in our own TextEditorOptions instance - PropertyInfo propertyInfo = typeof(TextEditorOptions).GetProperty(e.PropertyName); - if (propertyInfo != null) { - propertyInfo.SetValue(avalonEditOptions, propertyInfo.GetValue(originalAvalonEditOptions)); + if (entity == null) + return decl; + // Wrap decl in TypeDeclaration + decl = new TypeDeclaration { + ClassType = GetClassType(entity), + Modifiers = Modifiers.Partial, + Name = entity.Name, + Members = { decl } + }; + if (entity.DeclaringTypeDefinition != null) { + // Handle nested types + return WrapInType(entity.DeclaringTypeDefinition, decl); + } + if (string.IsNullOrEmpty(entity.Namespace)) + return decl; + return new NamespaceDeclaration(entity.Namespace) { + Members = { + decl } - } else { - UpdateOverriddenProperties(); - } - OnPropertyChanged(e.PropertyName); + }; } - void OnSDOptionsPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) - { - OnPropertyChanged(e.PropertyName); - } - - public event PropertyChangedEventHandler PropertyChanged; - - void OnPropertyChanged(string propertyName) - { - if (PropertyChanged != null) { - PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); - } - } - - public TextEditorOptions TextEditorOptions + static ClassType GetClassType(IUnresolvedTypeDefinition entity) { - get { - return avalonEditOptions; - } - } - - #region Overridden properties - - public int IndentationSize { - get { - // Get value from own TextEditorOptions instance - return avalonEditOptions.IndentationSize; - } - } - - public string IndentationString { - get { - // Get value from own TextEditorOptions instance - return avalonEditOptions.IndentationString; - } - } - - public bool ConvertTabsToSpaces { - get { - // Get value from own TextEditorOptions instance - return avalonEditOptions.ConvertTabsToSpaces; - } - } - - #endregion - - #region Rest of ITextEditorOptions implementation - - public bool AutoInsertBlockEnd { - get { - return originalSDOptions.AutoInsertBlockEnd; - } - } - - public int VerticalRulerColumn { - get { - return originalSDOptions.VerticalRulerColumn; + switch (entity.Kind) { + case TypeKind.Interface: + return ClassType.Interface; + case TypeKind.Struct: + return ClassType.Struct; + default: + return ClassType.Class; } } - - public bool UnderlineErrors { - get { - return originalSDOptions.UnderlineErrors; - } - } - - public string FontFamily { - get { - return originalSDOptions.FontFamily; - } - } - - public double FontSize { - get { - return originalSDOptions.FontSize; - } - } - - #endregion - } } diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpTextEditorExtension.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpTextEditorExtension.cs new file mode 100644 index 0000000000..f308877041 --- /dev/null +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpTextEditorExtension.cs @@ -0,0 +1,253 @@ +// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this +// software and associated documentation files (the "Software"), to deal in the Software +// without restriction, including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +// to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Reflection; +using ICSharpCode.AvalonEdit; +using CSharpBinding.FormattingStrategy; +using CSharpBinding.Refactoring; +using ICSharpCode.Core; +using ICSharpCode.SharpDevelop; +using ICSharpCode.SharpDevelop.Editor; +using ICSharpCode.SharpDevelop.Refactoring; +namespace CSharpBinding +{ + public class CSharpTextEditorExtension : ITextEditorExtension + { + ITextEditor editor; + + IssueManager inspectionManager; + + IList contextActionProviders; + + CodeManipulation codeManipulation; + + CaretReferenceHighlightRenderer renderer; + + CodeEditorFormattingOptionsAdapter options; + + TextEditorOptions originalEditorOptions; + + public void Attach(ITextEditor editor) + { + this.editor = editor; + inspectionManager = new IssueManager(editor); + codeManipulation = new CodeManipulation(editor); + renderer = new CaretReferenceHighlightRenderer(editor); + + // Patch editor options (indentation) to project-specific settings + if (!editor.ContextActionProviders.IsReadOnly) { + contextActionProviders = AddInTree.BuildItems("/SharpDevelop/ViewContent/TextEditor/C#/ContextActions", null); + editor.ContextActionProviders.AddRange(contextActionProviders); + } + + // Create instance of options adapter and register it as service + var formattingPolicy = CSharpFormattingPolicies.Instance.GetProjectOptions(SD.ProjectService.FindProjectContainingFile(editor.FileName)); + var textEditor = editor.GetService(); + + if (textEditor != null) { + options = new CodeEditorFormattingOptionsAdapter(textEditor.Options, editor.Options, formattingPolicy.OptionsContainer); + var textViewServices = textEditor.TextArea.TextView.Services; + + // Unregister any previous ITextEditorOptions instance from editor, if existing, register our impl. + textViewServices.RemoveService(typeof(ITextEditorOptions)); + textViewServices.AddService(typeof(ITextEditorOptions), options); + + // Set TextEditor's options to same object + originalEditorOptions = textEditor.Options; + textEditor.Options = options.TextEditorOptions; + } + } + + public void Detach() + { + var textEditor = editor.GetService(); + if (textEditor != null) { + var textView = textEditor.TextArea.TextView; + // Unregister our ITextEditorOptions instance from editor + var optionsService = textView.GetService(); + if ((optionsService != null) && (optionsService == options)) + textView.Services.RemoveService(typeof(ITextEditorOptions)); + // Reset TextEditor options, too? + if ((textEditor.Options != null) && (textEditor.Options == options.TextEditorOptions)) + textEditor.Options = originalEditorOptions; + } + + codeManipulation.Dispose(); + + if (inspectionManager != null) { + inspectionManager.Dispose(); + inspectionManager = null; + } + + if (contextActionProviders != null) { + editor.ContextActionProviders.RemoveAll(contextActionProviders.Contains); + } + + renderer.Dispose(); + options = null; + this.editor = null; + } + } + + class CodeEditorFormattingOptionsAdapter : ITextEditorOptions, INotifyPropertyChanged + { + CSharpFormattingOptionsContainer container; + readonly TextEditorOptions avalonEditOptions; + readonly TextEditorOptions originalAvalonEditOptions; + readonly ITextEditorOptions originalSDOptions; + + public CodeEditorFormattingOptionsAdapter(TextEditorOptions originalAvalonEditOptions, ITextEditorOptions originalSDOptions, CSharpFormattingOptionsContainer container) + { + if (originalAvalonEditOptions == null) + throw new ArgumentNullException("originalAvalonEditOptions"); + if (originalSDOptions == null) + throw new ArgumentNullException("originalSDOptions"); + if (container == null) + throw new ArgumentNullException("container"); + + this.originalAvalonEditOptions = originalAvalonEditOptions; + this.avalonEditOptions = new TextEditorOptions(originalAvalonEditOptions); + this.originalSDOptions = originalSDOptions; + this.container = container; + + // Update overridden options once + UpdateOverriddenProperties(); + + CSharpFormattingPolicies.Instance.FormattingPolicyUpdated += OnFormattingPolicyUpdated; + this.originalAvalonEditOptions.PropertyChanged += OnOrigAvalonOptionsPropertyChanged; + this.originalSDOptions.PropertyChanged += OnSDOptionsPropertyChanged; + } + + void OnFormattingPolicyUpdated(object sender, CSharpBinding.FormattingStrategy.CSharpFormattingPolicyUpdateEventArgs e) + { + // Update editor options from changed policy + UpdateOverriddenProperties(); + + OnPropertyChanged("IndentationSize"); + OnPropertyChanged("IndentationString"); + OnPropertyChanged("ConvertTabsToSpaces"); + } + + void UpdateOverriddenProperties() + { + avalonEditOptions.IndentationSize = container.GetEffectiveIndentationSize() ?? originalSDOptions.IndentationSize; + avalonEditOptions.ConvertTabsToSpaces = container.GetEffectiveConvertTabsToSpaces() ?? originalSDOptions.ConvertTabsToSpaces; + } + + void OnOrigAvalonOptionsPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + if ((e.PropertyName != "IndentationSize") && (e.PropertyName != "IndentationString") && (e.PropertyName != "ConvertTabsToSpaces")) { + // Update values in our own TextEditorOptions instance + PropertyInfo propertyInfo = typeof(TextEditorOptions).GetProperty(e.PropertyName); + if (propertyInfo != null) { + propertyInfo.SetValue(avalonEditOptions, propertyInfo.GetValue(originalAvalonEditOptions)); + } + } else { + UpdateOverriddenProperties(); + } + OnPropertyChanged(e.PropertyName); + } + + void OnSDOptionsPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + OnPropertyChanged(e.PropertyName); + } + + public event PropertyChangedEventHandler PropertyChanged; + + void OnPropertyChanged(string propertyName) + { + if (PropertyChanged != null) { + PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); + } + } + + public ICSharpCode.AvalonEdit.TextEditorOptions TextEditorOptions + { + get { + return avalonEditOptions; + } + } + + #region Overridden properties + + public int IndentationSize { + get { + // Get value from own TextEditorOptions instance + return avalonEditOptions.IndentationSize; + } + } + + public string IndentationString { + get { + // Get value from own TextEditorOptions instance + return avalonEditOptions.IndentationString; + } + } + + public bool ConvertTabsToSpaces { + get { + // Get value from own TextEditorOptions instance + return avalonEditOptions.ConvertTabsToSpaces; + } + } + + #endregion + + #region Rest of ITextEditorOptions implementation + + public bool AutoInsertBlockEnd { + get { + return originalSDOptions.AutoInsertBlockEnd; + } + } + + public int VerticalRulerColumn { + get { + return originalSDOptions.VerticalRulerColumn; + } + } + + public bool UnderlineErrors { + get { + return originalSDOptions.UnderlineErrors; + } + } + + public string FontFamily { + get { + return originalSDOptions.FontFamily; + } + } + + public double FontSize { + get { + return originalSDOptions.FontSize; + } + } + + #endregion + + } +} + + diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs index c81f2b3349..3f71a528d1 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs @@ -24,10 +24,8 @@ using ICSharpCode.Core; using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Completion; -using ICSharpCode.NRefactory.CSharp; using ICSharpCode.NRefactory.CSharp.Completion; using ICSharpCode.NRefactory.Editor; -using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Editor; using ICSharpCode.SharpDevelop.Editor.CodeCompletion; diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionContext.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionContext.cs index 007b2e2078..ae654a0d81 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionContext.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionContext.cs @@ -17,17 +17,19 @@ // DEALINGS IN THE SOFTWARE. using System; +using System.Collections.Generic; using System.Diagnostics; +using System.IO; using ICSharpCode.Core; using ICSharpCode.NRefactory; -using ICSharpCode.NRefactory.Editor; -using ICSharpCode.SharpDevelop.Project; -using CSharpBinding.Parser; +using ICSharpCode.NRefactory.CSharp; using ICSharpCode.NRefactory.CSharp.Completion; using ICSharpCode.NRefactory.CSharp.TypeSystem; +using ICSharpCode.NRefactory.Editor; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Editor; +using CSharpBinding.Parser; namespace CSharpBinding.Completion { @@ -35,7 +37,7 @@ namespace CSharpBinding.Completion { public readonly ITextEditor Editor; public readonly IDocument Document; - public readonly CSharpFullParseInformation ParseInformation; + public readonly IList ConditionalSymbols; public readonly ICompilation Compilation; public readonly IProjectContent ProjectContent; public readonly CSharpTypeResolveContext TypeResolveContextAtCaret; @@ -56,7 +58,7 @@ namespace CSharpBinding.Completion if (projectContent == null) return null; - return new CSharpCompletionContext(editor, parseInfo, compilation, projectContent, editor.Document, editor.Caret.Location); + return new CSharpCompletionContext(editor, parseInfo.SyntaxTree.ConditionalSymbols, compilation, projectContent, editor.Document, parseInfo.UnresolvedFile, editor.Caret.Location); } public static CSharpCompletionContext Get(ITextEditor editor, ITextSource fileContent, TextLocation currentLocation, FileName fileName) @@ -64,33 +66,50 @@ namespace CSharpBinding.Completion IDocument document = new ReadOnlyDocument(fileContent); // Don't require the very latest parse information, an older cached version is OK. - var parseInfo = SD.ParserService.Parse(fileName, document) as CSharpFullParseInformation; + var parseInfo = SD.ParserService.GetCachedParseInformation(fileName) as CSharpFullParseInformation; + if (parseInfo == null) { + parseInfo = SD.ParserService.Parse(fileName) as CSharpFullParseInformation; + } if (parseInfo == null) return null; - ICompilation compilation = SD.ParserService.GetCompilationForFile(fileName); - var projectContent = compilation.MainAssembly.UnresolvedAssembly as IProjectContent; + + var project = SD.ProjectService.FindProjectContainingFile(fileName)as CSharpProject; + if (project == null) + return null; + + var solutionSnapshot = SD.ParserService.GetCurrentSolutionSnapshot(); + var projectContent = solutionSnapshot.GetProjectContent(project); if (projectContent == null) return null; - return new CSharpCompletionContext(editor, parseInfo, compilation, projectContent, document, currentLocation); + CSharpParser parser = new CSharpParser(project.CompilerSettings); + parser.GenerateTypeSystemMode = false; + + SyntaxTree cu = parser.Parse(fileContent, Path.GetRandomFileName() + ".cs"); + cu.Freeze(); + + CSharpUnresolvedFile unresolvedFile = cu.ToTypeSystem(); + ICompilation compilation = projectContent.AddOrUpdateFiles(unresolvedFile).CreateCompilation(solutionSnapshot); + + return new CSharpCompletionContext(editor, parseInfo.SyntaxTree.ConditionalSymbols, compilation, projectContent, document, unresolvedFile, currentLocation); } - private CSharpCompletionContext(ITextEditor editor, CSharpFullParseInformation parseInfo, ICompilation compilation, IProjectContent projectContent, IDocument document, TextLocation caretLocation) + private CSharpCompletionContext(ITextEditor editor, IList conditionalSymbols, ICompilation compilation, IProjectContent projectContent, IDocument document, CSharpUnresolvedFile unresolvedFile, TextLocation caretLocation) { Debug.Assert(editor != null); - Debug.Assert(parseInfo != null); + Debug.Assert(unresolvedFile != null); Debug.Assert(compilation != null); Debug.Assert(projectContent != null); Debug.Assert(document != null); this.Editor = editor; this.Document = document; - this.ParseInformation = parseInfo; + this.ConditionalSymbols = conditionalSymbols; this.Compilation = compilation; this.ProjectContent = projectContent; - this.TypeResolveContextAtCaret = parseInfo.UnresolvedFile.GetTypeResolveContext(compilation, caretLocation); - this.CompletionContextProvider = new DefaultCompletionContextProvider(document, parseInfo.UnresolvedFile); - this.CompletionContextProvider.ConditionalSymbols.AddRange(parseInfo.SyntaxTree.ConditionalSymbols); + this.TypeResolveContextAtCaret = unresolvedFile.GetTypeResolveContext(compilation, caretLocation); + this.CompletionContextProvider = new DefaultCompletionContextProvider(document, unresolvedFile); + this.CompletionContextProvider.ConditionalSymbols.AddRange(conditionalSymbols); } } } diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionDataFactory.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionDataFactory.cs index 8fbfc7e3f7..c3f005e892 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionDataFactory.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionDataFactory.cs @@ -148,7 +148,7 @@ namespace CSharpBinding.Completion IEnumerable ICompletionDataFactory.CreatePreProcessorDefinesCompletionData() { - return completionContext.ParseInformation.SyntaxTree.ConditionalSymbols.Select(def => new CompletionData(def)); + return completionContext.ConditionalSymbols.Select(def => new CompletionData(def)); } ICompletionData ICompletionDataFactory.CreateImportCompletionData(IType type, bool useFullName, bool addForTypeCreation) diff --git a/src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointEditorPopup.xaml.cs b/src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointEditorPopup.xaml.cs index d8d95b4b35..f22ae4e3ed 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointEditorPopup.xaml.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointEditorPopup.xaml.cs @@ -41,7 +41,8 @@ namespace Debugger.AddIn.Breakpoints { InitializeComponent(); this.DataContext = target; - condition.DebugContext = new DebuggerCompletionContext(target.FileName, target.Location); + condition.ContextFileName = target.FileName; + condition.ContextTextLocation = target.Location; condition.FontFamily = new FontFamily(SD.EditorControlService.GlobalOptions.FontFamily); condition.FontSize = SD.EditorControlService.GlobalOptions.FontSize; if (target.Condition == null) diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/AutoCompleteTextBox.cs b/src/AddIns/Debugger/Debugger.AddIn/Pads/AutoCompleteTextBox.cs index 8088d9771b..aca8f0c0b6 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Pads/AutoCompleteTextBox.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Pads/AutoCompleteTextBox.cs @@ -64,7 +64,8 @@ namespace Debugger.AddIn.Pads.Controls set { SetValue(IsEditableProperty, value); } } - public DebuggerCompletionContext DebugContext { get; set; } + public FileName ContextFileName { get; set; } + public TextLocation ContextTextLocation { get; set; } static void TextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { @@ -127,20 +128,15 @@ namespace Debugger.AddIn.Pads.Controls void editor_TextArea_TextEntered(object sender, TextCompositionEventArgs e) { if (e.Text == ".") { - DebuggerCompletionContext context = null; StackFrame frame = WindowsDebugger.CurrentStackFrame; - if (frame == null) { - if (DebugContext != null) { - context = DebugContext; - } - } else { - context = new DebuggerCompletionContext(frame); + if (frame != null) { + ContextFileName = new FileName(frame.NextStatement.Filename); + ContextTextLocation = new TextLocation(frame.NextStatement.StartLine, frame.NextStatement.StartColumn); } - if (context == null) return; - var binding = DebuggerDotCompletion.PrepareDotCompletion(editor.Text.Substring(0, editor.CaretOffset), context); + if (ContextFileName == null) return; + var binding = DebuggerDotCompletion.PrepareDotCompletion(editor.Text.Substring(0, editor.CaretOffset), ContextFileName, ContextTextLocation, SD.ParserService.ResolveContext(ContextFileName, ContextTextLocation)); if (binding == null) return; binding.HandleKeyPressed(editorAdapter, '.'); - SD.ParserService.ParseFileAsync(context.FileName).FireAndForget(); } else { // TODO : implement automated error checking CSharpParser.ParseExpression does not report useful error messages. // Error[] errors; diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/ConsolePad.cs b/src/AddIns/Debugger/Debugger.AddIn/Pads/ConsolePad.cs index 31c122f002..c88df18834 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Pads/ConsolePad.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Pads/ConsolePad.cs @@ -86,10 +86,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads void ShowDotCompletion(StackFrame frame, string currentText) { - var binding = DebuggerDotCompletion.PrepareDotCompletion(currentText, new DebuggerCompletionContext(frame)); + var fileName = new ICSharpCode.Core.FileName(frame.NextStatement.Filename); + var textLocation = new TextLocation(frame.NextStatement.StartLine, frame.NextStatement.StartColumn); + var binding = DebuggerDotCompletion.PrepareDotCompletion(currentText, fileName, textLocation, SD.ParserService.ResolveContext(fileName, textLocation)); if (binding == null) return; binding.HandleKeyPressed(console.TextEditor, '.'); - SD.ParserService.ParseFileAsync(new ICSharpCode.Core.FileName(frame.NextStatement.Filename)).FireAndForget(); } protected override ToolBar BuildToolBar() diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/DebuggerDotCompletion.cs b/src/AddIns/Debugger/Debugger.AddIn/Pads/DebuggerDotCompletion.cs index 4518c832ae..854abc5cca 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Pads/DebuggerDotCompletion.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Pads/DebuggerDotCompletion.cs @@ -41,162 +41,12 @@ namespace Debugger.AddIn.Pads.Controls return !errors.Any(); } - public static ICodeCompletionBinding PrepareDotCompletion(string expressionToComplete, DebuggerCompletionContext context) + public static ICodeCompletionBinding PrepareDotCompletion(string expressionToComplete, FileName fileName, TextLocation location, ICodeContext context) { - var lang = SD.LanguageService.GetLanguageByFileName(context.FileName); + var lang = SD.LanguageService.GetLanguageByFileName(fileName); if (lang == null) return null; - string content = GeneratePartialClassContextStub(context); - const string caretPoint = "$__Caret_Point__$;"; - int caretOffset = content.IndexOf(caretPoint, StringComparison.Ordinal) + expressionToComplete.Length; - SD.Log.DebugFormatted("context used for dot completion: {0}", content.Replace(caretPoint, "$" + expressionToComplete + "|$")); - var doc = new ReadOnlyDocument(content.Replace(caretPoint, expressionToComplete)); - return lang.CreateCompletionBinding(context.FileName, doc.GetLocation(caretOffset), doc.CreateSnapshot()); - } - - static string GeneratePartialClassContextStub(DebuggerCompletionContext context) - { - var compilation = SD.ParserService.GetCompilationForFile(context.FileName); - var file = SD.ParserService.GetExistingUnresolvedFile(context.FileName); - if (compilation == null || file == null) - return ""; - var unresolvedMember = file.GetMember(context.Location); - if (unresolvedMember == null) - return ""; - var member = unresolvedMember.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)); - if (member == null) - return ""; - var builder = new TypeSystemAstBuilder(); - MethodDeclaration decl; - if (unresolvedMember is IMethod) { - // If it's a method, convert it directly (including parameters + type parameters) - decl = (MethodDeclaration)builder.ConvertEntity(member); - } else { - // Otherwise, create a method anyways, and copy the parameters - decl = new MethodDeclaration(); - if (member is IParameterizedMember) { - foreach (var p in ((IParameterizedMember)member).Parameters) { - decl.Parameters.Add(builder.ConvertParameter(p)); - } - } - } - decl.Name = "__DebuggerStub__"; - decl.ReturnType = builder.ConvertType(member.ReturnType); - decl.Modifiers = unresolvedMember.IsStatic ? Modifiers.Static : Modifiers.None; - // Make the method look like an explicit interface implementation so that it doesn't appear in CC - decl.PrivateImplementationType = new SimpleType("__DummyType__"); - decl.Body = GenerateBodyFromContext(builder, context); - return WrapInType(unresolvedMember.DeclaringTypeDefinition, decl).ToString(); - } - - static BlockStatement GenerateBodyFromContext(TypeSystemAstBuilder builder, DebuggerCompletionContext context) - { - var body = new BlockStatement(); - foreach (var v in context.Variables) - body.Statements.Add(new VariableDeclarationStatement(builder.ConvertType(v.Type), v.Name)); - body.Statements.Add(new ExpressionStatement(new IdentifierExpression("$__Caret_Point__$"))); - return body; - } - - static AstNode WrapInType(IUnresolvedTypeDefinition entity, EntityDeclaration decl) - { - if (entity == null) - return decl; - // Wrap decl in TypeDeclaration - decl = new TypeDeclaration { - ClassType = GetClassType(entity), - Modifiers = Modifiers.Partial, - Name = entity.Name, - Members = { decl } - }; - if (entity.DeclaringTypeDefinition != null) { - // Handle nested types - return WrapInType(entity.DeclaringTypeDefinition, decl); - } - if (string.IsNullOrEmpty(entity.Namespace)) - return decl; - return new NamespaceDeclaration(entity.Namespace) { - Members = { - decl - } - }; - } - - static ClassType GetClassType(IUnresolvedTypeDefinition entity) - { - switch (entity.Kind) { - case TypeKind.Interface: - return ClassType.Interface; - case TypeKind.Struct: - return ClassType.Struct; - default: - return ClassType.Class; - } - } - } - - public class LocalVariable - { - readonly IType type; - - public IType Type { - get { - return type; - } - } - - readonly string name; - - public string Name { - get { - return name; - } - } - - public LocalVariable(IType type, string name) - { - this.type = type; - this.name = name; - } - } - - public class DebuggerCompletionContext - { - readonly FileName fileName; - TextLocation location; - readonly LocalVariable[] variables; - - public DebuggerCompletionContext(StackFrame frame) - { - fileName = new FileName(frame.NextStatement.Filename); - location = new TextLocation(frame.NextStatement.StartLine, frame.NextStatement.StartColumn); - variables = frame.GetLocalVariables().Select(v => new LocalVariable(v.Type, v.Name)).ToArray(); - } - - public DebuggerCompletionContext(FileName fileName, TextLocation location) - { - this.fileName = fileName; - this.location = location; - this.variables = SD.ParserService.ResolveContext(fileName, location) - .LocalVariables.Select(v => new LocalVariable(v.Type, v.Name)).ToArray(); - } - - public FileName FileName { - get { - return fileName; - } - } - - public TextLocation Location { - get { - return location; - } - } - - public LocalVariable[] Variables { - get { - return variables; - } + return lang.CreateCompletionBinding(expressionToComplete, fileName, location, context); } } } diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs index 7a3b678371..c1b1bf7216 100644 --- a/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs +++ b/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs @@ -75,7 +75,7 @@ namespace ICSharpCode.SharpDevelop } } - public virtual ICodeCompletionBinding CreateCompletionBinding(FileName fileName, TextLocation currentLocation, ITextSource fileContent) + public virtual ICodeCompletionBinding CreateCompletionBinding(string expressionToComplete, FileName fileName, TextLocation location, ICodeContext context) { throw new NotSupportedException(); } diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs index 863e7508fe..49ad72abea 100644 --- a/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs +++ b/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs @@ -17,6 +17,7 @@ // DEALINGS IN THE SOFTWARE. using System; +using System.Linq; using ICSharpCode.Core; using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Editor; @@ -62,8 +63,8 @@ namespace ICSharpCode.SharpDevelop } /// - /// Creates a completion binding which works with a fileName and a location as context. + /// Creates a completion binding for a given expression and context. /// - ICodeCompletionBinding CreateCompletionBinding(FileName fileName, TextLocation currentLocation, ITextSource fileContent); + ICodeCompletionBinding CreateCompletionBinding(string expressionToComplete, FileName fileName, TextLocation location, ICodeContext context); } } From 3dbfb428bd5612c2706ab25318d22e11fbc4a9e9 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 5 Jul 2014 17:22:45 +0200 Subject: [PATCH 060/575] Protect against resolve call on empty location. --- src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs | 2 ++ src/Main/SharpDevelop/Parser/ParserService.cs | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs b/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs index 59192cf6c4..5e54a5a373 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs @@ -633,6 +633,8 @@ namespace ICSharpCode.SharpDevelop.Services return; if (CurrentStackFrame == null) return; + if (e.InDocument) + return; var resolveResult = SD.ParserService.Resolve(e.Editor, e.LogicalPosition, CurrentStackFrame.AppDomain.Compilation); if (resolveResult == null) return; diff --git a/src/Main/SharpDevelop/Parser/ParserService.cs b/src/Main/SharpDevelop/Parser/ParserService.cs index 54872bd241..5d679e29d6 100644 --- a/src/Main/SharpDevelop/Parser/ParserService.cs +++ b/src/Main/SharpDevelop/Parser/ParserService.cs @@ -278,7 +278,7 @@ namespace ICSharpCode.SharpDevelop.Parser public ResolveResult Resolve(FileName fileName, TextLocation location, ITextSource fileContent, ICompilation compilation, CancellationToken cancellationToken) { var entry = GetFileEntry(fileName, true); - if (entry.parser == null) + if (entry.parser == null || location.IsEmpty) return ErrorResolveResult.UnknownError; IProject project = compilation != null ? compilation.GetProject() : null; var parseInfo = entry.Parse(fileContent, project, cancellationToken); @@ -334,7 +334,7 @@ namespace ICSharpCode.SharpDevelop.Parser public Task ResolveAsync(FileName fileName, TextLocation location, ITextSource fileContent, ICompilation compilation, CancellationToken cancellationToken) { var entry = GetFileEntry(fileName, true); - if (entry.parser == null) + if (entry.parser == null || location.IsEmpty) return Task.FromResult(ErrorResolveResult.UnknownError); IProject project = compilation != null ? compilation.GetProject() : null; return entry.ParseAsync(fileContent, project, cancellationToken).ContinueWith( From 9256ed4d39dd4aa8283fac0fe8e3e7322820cef8 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 5 Jul 2014 17:24:22 +0200 Subject: [PATCH 061/575] Fix inverted condition. --- src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs b/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs index 5e54a5a373..5bc4f6f773 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs @@ -633,7 +633,7 @@ namespace ICSharpCode.SharpDevelop.Services return; if (CurrentStackFrame == null) return; - if (e.InDocument) + if (!e.InDocument) return; var resolveResult = SD.ParserService.Resolve(e.Editor, e.LogicalPosition, CurrentStackFrame.AppDomain.Compilation); if (resolveResult == null) From 4ce0129433a7306b01414aca93bcb7eaf7b0ce03 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 5 Jul 2014 17:27:47 +0200 Subject: [PATCH 062/575] Handle BadImageFormatException in ProjectContentContainer.DoResolveReferences() --- .../Base/Project/Parser/ProjectContentContainer.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Main/Base/Project/Parser/ProjectContentContainer.cs b/src/Main/Base/Project/Parser/ProjectContentContainer.cs index ab80021948..91c5572ea0 100644 --- a/src/Main/Base/Project/Parser/ProjectContentContainer.cs +++ b/src/Main/Base/Project/Parser/ProjectContentContainer.cs @@ -463,9 +463,15 @@ namespace ICSharpCode.SharpDevelop.Parser foreach (var file in assemblyFiles) { progressMonitor.CancellationToken.ThrowIfCancellationRequested(); if (File.Exists(file)) { - var pc = SD.AssemblyParserService.GetAssembly(file, false, progressMonitor.CancellationToken); - if (pc != null) { - newReferences.Add(pc); + try { + var pc = SD.AssemblyParserService.GetAssembly(file, false, progressMonitor.CancellationToken); + if (pc != null) { + newReferences.Add(pc); + } + } catch (IOException ex) { + LoggingService.Warn(ex); + } catch (BadImageFormatException ex) { + LoggingService.Warn(ex); } } progressMonitor.Progress += (1.0 - assemblyResolvingProgress) / assemblyFiles.Count; From 5602be8fd6208d493c36f8a62a17ae424e460aae Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 5 Jul 2014 17:42:33 +0200 Subject: [PATCH 063/575] Disable UseOfMemberOfNullReference issue. It's currently too unstable and performance-hungry. --- .../CSharpBinding/Project/CSharpBinding.addin | 1 - .../Uncategorized/UseOfMemberOfNullReference.cs | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin index b1ad8f4e40..b70e3a2dcf 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin @@ -363,7 +363,6 @@ - diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UseOfMemberOfNullReference.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UseOfMemberOfNullReference.cs index ab941fa33a..905f761268 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UseOfMemberOfNullReference.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UseOfMemberOfNullReference.cs @@ -34,10 +34,10 @@ using ICSharpCode.NRefactory.CSharp.Analysis; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - [IssueDescription("Use of (non-extension method) member of null value will cause a NullReferenceException", - Description = "Detects when a member of a null value is used", - Category = IssueCategories.CodeQualityIssues, - Severity = Severity.Warning)] +// [IssueDescription("Use of (non-extension method) member of null value will cause a NullReferenceException", +// Description = "Detects when a member of a null value is used", +// Category = IssueCategories.CodeQualityIssues, +// Severity = Severity.Warning)] public class UseOfMemberOfNullReference : GatherVisitorCodeIssueProvider { static readonly ISet ProblematicNullStates = new HashSet { From 65adfdb812c184aa50839d9fb6665280a7df306f Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 5 Jul 2014 17:47:25 +0200 Subject: [PATCH 064/575] Handle UnauthorizedAccessException in AbstractProject.IsReadOnly --- src/Main/Base/Project/Src/Project/AbstractProject.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Main/Base/Project/Src/Project/AbstractProject.cs b/src/Main/Base/Project/Src/Project/AbstractProject.cs index 781860436a..38b46a2071 100644 --- a/src/Main/Base/Project/Src/Project/AbstractProject.cs +++ b/src/Main/Base/Project/Src/Project/AbstractProject.cs @@ -188,7 +188,7 @@ namespace ICSharpCode.SharpDevelop.Project try { FileAttributes attributes = File.GetAttributes(FileName); return ((FileAttributes.ReadOnly & attributes) == FileAttributes.ReadOnly); - } catch (FileNotFoundException) { + } catch (UnauthorizedAccessException) { return false; } catch (IOException) { // directory not found, network path not available, etc. From a56a10c8f89f06cf6f7797f18dc1edcc831ca186 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 5 Jul 2014 17:50:54 +0200 Subject: [PATCH 065/575] Fix NullReferenceException in SharpTreeViewItem.ContextMenuOpening --- .../SharpTreeView/ICSharpCode.TreeView/SharpTreeViewItem.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeViewItem.cs b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeViewItem.cs index 3c1ff02d91..5f55072fc3 100644 --- a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeViewItem.cs +++ b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeViewItem.cs @@ -118,7 +118,8 @@ namespace ICSharpCode.TreeView protected override void OnContextMenuOpening(ContextMenuEventArgs e) { - Node.ShowContextMenu(e); + if (Node != null) + Node.ShowContextMenu(e); } #endregion From 8b4c26259460a19736a49eaed3372efd05d5f520 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 5 Jul 2014 17:53:00 +0200 Subject: [PATCH 066/575] Fix NullReferenceException in Git.FindGit if PATH is not set. --- src/AddIns/VersionControl/GitAddIn/Src/Git.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/AddIns/VersionControl/GitAddIn/Src/Git.cs b/src/AddIns/VersionControl/GitAddIn/Src/Git.cs index c5f3f10694..a7480c487f 100644 --- a/src/AddIns/VersionControl/GitAddIn/Src/Git.cs +++ b/src/AddIns/VersionControl/GitAddIn/Src/Git.cs @@ -94,7 +94,8 @@ namespace ICSharpCode.GitAddIn /// public static string FindGit() { - string[] paths = Environment.GetEnvironmentVariable("PATH").Split(';'); + string pathVariable = Environment.GetEnvironmentVariable("PATH") ?? string.Empty; + string[] paths = pathVariable.Split(new char[]{';'}, StringSplitOptions.RemoveEmptyEntries); foreach (string path in paths) { try { string exe = Path.Combine(path, "git.exe"); From 4b4518db8698268bdcf07746b3c4861d04297004 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 5 Jul 2014 17:55:14 +0200 Subject: [PATCH 067/575] Fix NullReferenceException in TestResultsReader.Dispose when connecting the named pipe failed. --- .../Analysis/UnitTesting/TestRunner/TestResultsReader.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/AddIns/Analysis/UnitTesting/TestRunner/TestResultsReader.cs b/src/AddIns/Analysis/UnitTesting/TestRunner/TestResultsReader.cs index f3bc984cb3..08e94b2d77 100644 --- a/src/AddIns/Analysis/UnitTesting/TestRunner/TestResultsReader.cs +++ b/src/AddIns/Analysis/UnitTesting/TestRunner/TestResultsReader.cs @@ -61,8 +61,10 @@ namespace ICSharpCode.UnitTesting public void Dispose() { - reader.Dispose(); - namedPipe.Dispose(); + if (reader != null) + reader.Dispose(); + if (namedPipe != null) + namedPipe.Dispose(); } public event EventHandler TestFinished; From 382c621383b0c7a6ec2cac8d8a14627ddae54437 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 6 Jul 2014 12:18:15 +0200 Subject: [PATCH 068/575] Use ReaderWriterLock in ParserServiceEntry to prevent the parser thread from blocking the UI thread. --- src/Main/SharpDevelop/Parser/ParserService.cs | 4 +- .../SharpDevelop/Parser/ParserServiceEntry.cs | 96 +++++++++++++------ 2 files changed, 70 insertions(+), 30 deletions(-) diff --git a/src/Main/SharpDevelop/Parser/ParserService.cs b/src/Main/SharpDevelop/Parser/ParserService.cs index 5d679e29d6..46b54517a8 100644 --- a/src/Main/SharpDevelop/Parser/ParserService.cs +++ b/src/Main/SharpDevelop/Parser/ParserService.cs @@ -174,7 +174,7 @@ namespace ICSharpCode.SharpDevelop.Parser internal void RemoveEntry(ParserServiceEntry entry) { - Debug.Assert(Monitor.IsEntered(entry)); + Debug.Assert(entry.rwLock.IsWriteLockHeld); lock (fileEntryDict) { ParserServiceEntry entryAtKey; if (fileEntryDict.TryGetValue(entry.fileName, out entryAtKey)) { @@ -190,7 +190,7 @@ namespace ICSharpCode.SharpDevelop.Parser internal void RegisterForCacheExpiry(ParserServiceEntry entry) { // This method should not be called within any locks - Debug.Assert(!Monitor.IsEntered(entry)); + Debug.Assert(!(entry.rwLock.IsReadLockHeld || entry.rwLock.IsUpgradeableReadLockHeld || entry.rwLock.IsWriteLockHeld)); ParserServiceEntry expiredItem = null; lock (cacheExpiryQueue) { cacheExpiryQueue.Remove(entry); // remove entry from queue if it's already enqueued diff --git a/src/Main/SharpDevelop/Parser/ParserServiceEntry.cs b/src/Main/SharpDevelop/Parser/ParserServiceEntry.cs index 44d9036bcb..5092be70af 100644 --- a/src/Main/SharpDevelop/Parser/ParserServiceEntry.cs +++ b/src/Main/SharpDevelop/Parser/ParserServiceEntry.cs @@ -54,6 +54,10 @@ namespace ICSharpCode.SharpDevelop.Parser List entries = new List { default(ProjectEntry) }; ITextSourceVersion currentVersion; + // Lock ordering: runningAsyncParseLock, rwLock, lock(parserService.fileEntryDict) + // (to avoid deadlocks, the locks may only be acquired in this order) + internal readonly ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); + public ParserServiceEntry(ParserService parserService, FileName fileName) { this.parserService = parserService; @@ -68,6 +72,7 @@ namespace ICSharpCode.SharpDevelop.Parser int FindIndexForProject(IProject parentProject) { + Debug.Assert(rwLock.IsReadLockHeld || rwLock.IsUpgradeableReadLockHeld || rwLock.IsWriteLockHeld); if (parentProject == null) return 0; for (int i = 0; i < entries.Count; i++) { @@ -81,7 +86,8 @@ namespace ICSharpCode.SharpDevelop.Parser public void AddOwnerProject(IProject project, bool isLinkedFile) { Debug.Assert(project != null); - lock (this) { + rwLock.EnterWriteLock(); + try { if (FindIndexForProject(project) >= 0) throw new InvalidOperationException("The project alreadys owns the file"); ProjectEntry newEntry = new ProjectEntry(project, null, null); @@ -92,6 +98,8 @@ namespace ICSharpCode.SharpDevelop.Parser } else { entries.Insert(0, newEntry); } + } finally { + rwLock.ExitWriteLock(); } } @@ -100,7 +108,8 @@ namespace ICSharpCode.SharpDevelop.Parser Debug.Assert(project != null); ProjectEntry oldEntry; bool removedLastOwner = false; - lock (this) { + rwLock.EnterWriteLock(); + try { int index = FindIndexForProject(project); if (index < 0) throw new InvalidOperationException("The project does not own the file"); @@ -111,6 +120,8 @@ namespace ICSharpCode.SharpDevelop.Parser } else { entries.RemoveAt(index); } + } finally { + rwLock.ExitWriteLock(); } if (oldEntry.UnresolvedFile != null) { project.OnParseInformationUpdated(new ParseInformationEventArgs(project, oldEntry.UnresolvedFile, null)); @@ -128,6 +139,7 @@ namespace ICSharpCode.SharpDevelop.Parser /// int CompareVersions(ITextSourceVersion newVersion) { + Debug.Assert(rwLock.IsReadLockHeld || rwLock.IsUpgradeableReadLockHeld || rwLock.IsWriteLockHeld); if (currentVersion != null && newVersion != null && currentVersion.BelongsToSameDocumentAs(newVersion)) return currentVersion.CompareAge(newVersion); else @@ -137,7 +149,8 @@ namespace ICSharpCode.SharpDevelop.Parser #region Expire Cache + GetExistingUnresolvedFile + GetCachedParseInformation public void ExpireCache() { - lock (this) { + rwLock.EnterWriteLock(); + try { if (PrimaryProject == null) { parserService.RemoveEntry(this); } else { @@ -148,12 +161,15 @@ namespace ICSharpCode.SharpDevelop.Parser } // force re-parse on next ParseFile() call even if unchanged this.currentVersion = null; + } finally { + rwLock.ExitWriteLock(); } } public IUnresolvedFile GetExistingUnresolvedFile(ITextSourceVersion version, IProject parentProject) { - lock (this) { + rwLock.EnterReadLock(); + try { if (version != null && CompareVersions(version) != 0) { return null; } @@ -161,12 +177,15 @@ namespace ICSharpCode.SharpDevelop.Parser if (index < 0) return null; return entries[index].UnresolvedFile; + } finally { + rwLock.ExitReadLock(); } } public ParseInformation GetCachedParseInformation(ITextSourceVersion version, IProject parentProject) { - lock (this) { + rwLock.EnterReadLock(); + try { if (version != null && CompareVersions(version) != 0) { return null; } @@ -174,6 +193,8 @@ namespace ICSharpCode.SharpDevelop.Parser if (index < 0) return null; return entries[index].CachedParseInformation; + } finally { + rwLock.ExitReadLock(); } } #endregion @@ -218,7 +239,8 @@ namespace ICSharpCode.SharpDevelop.Parser } ProjectEntry result; - lock (this) { + rwLock.EnterUpgradeableReadLock(); + try { int index = FindIndexForProject(parentProject); int versionComparison = CompareVersions(fileContent.Version); if (versionComparison > 0 || index < 0) { @@ -253,24 +275,32 @@ namespace ICSharpCode.SharpDevelop.Parser } // Only if all parse runs succeeded, register the parse information. - currentVersion = fileContent.Version; - for (int i = 0; i < entries.Count; i++) { - if (fullParseInformationRequested || (entries[i].CachedParseInformation != null && results[i].NewParseInformation.IsFullParseInformation)) - entries[i] = new ProjectEntry(entries[i].Project, results[i].NewUnresolvedFile, results[i].NewParseInformation); - else - entries[i] = new ProjectEntry(entries[i].Project, results[i].NewUnresolvedFile, null); - if (entries[i].Project != null) - entries[i].Project.OnParseInformationUpdated(results[i]); - parserService.RaiseParseInformationUpdated(results[i]); + rwLock.EnterWriteLock(); + try { + currentVersion = fileContent.Version; + for (int i = 0; i < entries.Count; i++) { + if (fullParseInformationRequested || (entries[i].CachedParseInformation != null && results[i].NewParseInformation.IsFullParseInformation)) + entries[i] = new ProjectEntry(entries[i].Project, results[i].NewUnresolvedFile, results[i].NewParseInformation); + else + entries[i] = new ProjectEntry(entries[i].Project, results[i].NewUnresolvedFile, null); + if (entries[i].Project != null) + entries[i].Project.OnParseInformationUpdated(results[i]); + parserService.RaiseParseInformationUpdated(results[i]); + } + result = entries[index]; + } finally { + rwLock.ExitWriteLock(); } - result = entries[index]; - } // exit lock + } finally { + rwLock.ExitUpgradeableReadLock(); + } parserService.RegisterForCacheExpiry(this); return result; } ParseInformation ParseWithExceptionHandling(ITextSource fileContent, bool fullParseInformationRequested, IProject project, CancellationToken cancellationToken) { + Debug.Assert(rwLock.IsUpgradeableReadLockHeld && !rwLock.IsWriteLockHeld); #if DEBUG if (Debugger.IsAttached) return parser.Parse(fileName, fileContent, fullParseInformationRequested, project, cancellationToken); @@ -285,6 +315,8 @@ namespace ICSharpCode.SharpDevelop.Parser #endregion #region ParseAsync + /// lock object for protecting the runningAsyncParse* fields + object runningAsyncParseLock = new object(); Task runningAsyncParseTask; ITextSourceVersion runningAsyncParseFileContentVersion; IProject runningAsyncParseProject; @@ -324,19 +356,24 @@ namespace ICSharpCode.SharpDevelop.Parser } } Task task; - lock (this) { + lock (runningAsyncParseLock) { if (fileContent != null) { // Optimization: // don't start a background task if fileContent was specified and up-to-date parse info is available - int index = FindIndexForProject(parentProject); - int versionComparison = CompareVersions(fileContent.Version); - if (versionComparison == 0 && index >= 0) { - // Ensure we have parse info for the specified project (entry.UnresolvedFile is null for newly registered projects) - // If full parse info is requested, ensure we have full parse info. - if (entries[index].UnresolvedFile != null && !(requestFullParseInformation && entries[index].CachedParseInformation == null)) { - // We already have the requested version parsed, just return it: - return Task.FromResult(entries[index]); + rwLock.EnterReadLock(); + try { + int index = FindIndexForProject(parentProject); + int versionComparison = CompareVersions(fileContent.Version); + if (versionComparison == 0 && index >= 0) { + // Ensure we have parse info for the specified project (entry.UnresolvedFile is null for newly registered projects) + // If full parse info is requested, ensure we have full parse info. + if (entries[index].UnresolvedFile != null && !(requestFullParseInformation && entries[index].CachedParseInformation == null)) { + // We already have the requested version parsed, just return it: + return Task.FromResult(entries[index]); + } } + } finally { + rwLock.ExitReadLock(); } // Optimization: // if an equivalent task is already running, return that one instead @@ -356,7 +393,7 @@ namespace ICSharpCode.SharpDevelop.Parser } return DoParse(fileContent, parentProject, requestFullParseInformation, cancellationToken); } finally { - lock (this) { + lock (runningAsyncParseLock) { runningAsyncParseTask = null; runningAsyncParseFileContentVersion = null; runningAsyncParseProject = null; @@ -383,7 +420,8 @@ namespace ICSharpCode.SharpDevelop.Parser throw new ArgumentNullException("unresolvedFile"); FreezableHelper.Freeze(unresolvedFile); var newParseInfo = new ParseInformation(unresolvedFile, null, false); - lock (this) { + rwLock.EnterWriteLock(); + try { int index = FindIndexForProject(project); if (index >= 0) { currentVersion = null; @@ -392,6 +430,8 @@ namespace ICSharpCode.SharpDevelop.Parser project.OnParseInformationUpdated(args); parserService.RaiseParseInformationUpdated(args); } + } finally { + rwLock.ExitWriteLock(); } } } From 9744db9e5abf71d4a3264d8e94461b2ab8d33ab2 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 6 Jul 2014 12:19:49 +0200 Subject: [PATCH 069/575] Adjust StressTest to SD5 API change --- src/Tools/StressTest/StressTest.sln | 12 +++++++----- src/Tools/StressTest/StressTest/StressTest.csproj | 3 --- src/Tools/StressTest/StressTest/UserControl.xaml.cs | 1 + 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Tools/StressTest/StressTest.sln b/src/Tools/StressTest/StressTest.sln index 390728c9f4..5f54b0427c 100644 --- a/src/Tools/StressTest/StressTest.sln +++ b/src/Tools/StressTest/StressTest.sln @@ -1,7 +1,9 @@  -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -# SharpDevelop 4.3 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +# SharpDevelop 5.0 +VisualStudioVersion = 12.0.20827.3 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StressTest", "StressTest\StressTest.csproj", "{30D10654-A5F5-4AC5-A370-E6DD4D0FAC50}" EndProject Global @@ -10,9 +12,9 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {30D10654-A5F5-4AC5-A370-E6DD4D0FAC50}.Debug|x86.Build.0 = Debug|x86 {30D10654-A5F5-4AC5-A370-E6DD4D0FAC50}.Debug|x86.ActiveCfg = Debug|x86 - {30D10654-A5F5-4AC5-A370-E6DD4D0FAC50}.Release|x86.Build.0 = Release|x86 + {30D10654-A5F5-4AC5-A370-E6DD4D0FAC50}.Debug|x86.Build.0 = Debug|x86 {30D10654-A5F5-4AC5-A370-E6DD4D0FAC50}.Release|x86.ActiveCfg = Release|x86 + {30D10654-A5F5-4AC5-A370-E6DD4D0FAC50}.Release|x86.Build.0 = Release|x86 EndGlobalSection EndGlobal diff --git a/src/Tools/StressTest/StressTest/StressTest.csproj b/src/Tools/StressTest/StressTest/StressTest.csproj index d712b438de..090ba83d63 100644 --- a/src/Tools/StressTest/StressTest/StressTest.csproj +++ b/src/Tools/StressTest/StressTest/StressTest.csproj @@ -98,9 +98,6 @@ - - - /addindir:"$(MsBuildProjectDirectory)\$(OutputPath)" diff --git a/src/Tools/StressTest/StressTest/UserControl.xaml.cs b/src/Tools/StressTest/StressTest/UserControl.xaml.cs index 7946890d57..680d165bcb 100644 --- a/src/Tools/StressTest/StressTest/UserControl.xaml.cs +++ b/src/Tools/StressTest/StressTest/UserControl.xaml.cs @@ -35,6 +35,7 @@ using ICSharpCode.Core; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Editor; using ICSharpCode.SharpDevelop.Gui; +using ICSharpCode.SharpDevelop.Workbench; namespace StressTest { From 6d1d189713ab97f0ffd6bb4d7fecc27bd1c71e76 Mon Sep 17 00:00:00 2001 From: gumme Date: Mon, 7 Jul 2014 20:45:26 +0200 Subject: [PATCH 070/575] BindingWrapper now supports MultiBinding and PriorityBinding. --- .../Tests/XamlDom/MarkupExtensionTests.cs | 91 +++++++++++++++++++ .../WpfDesign.XamlDom/Project/XamlObject.cs | 34 ++++++- 2 files changed, 121 insertions(+), 4 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/MarkupExtensionTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/MarkupExtensionTests.cs index cfe333f062..9a74644b5f 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/MarkupExtensionTests.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/XamlDom/MarkupExtensionTests.cs @@ -17,6 +17,9 @@ // DEALINGS IN THE SOFTWARE. using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; using NUnit.Framework; using System.Windows.Markup; using ICSharpCode.WpfDesign.XamlDom; @@ -118,6 +121,79 @@ namespace ICSharpCode.WpfDesign.Tests.XamlDom { TestMarkupExtension("Content=\"{t:String '" + PathWithCommasAndSpaces + "'}\""); } + + [Test] + public void TestMultiBinding() + { + string xaml = @" + + + + + + + + + +"; + + TestLoading(xaml); + + TestWindowMultiBinding((Window)XamlReader.Parse(xaml)); + + var doc = XamlParser.Parse(new StringReader(xaml)); + + TestWindowMultiBinding((Window)doc.RootInstance); + } + + + void TestWindowMultiBinding(Window w) + { + var textBox = (TextBox)w.Content; + + var expr = BindingOperations.GetMultiBindingExpression(textBox, TextBox.TextProperty); + Assert.IsNotNull(expr); + + var converter = expr.ParentMultiBinding.Converter as MyMultiConverter; + Assert.IsNotNull(converter); + + Assert.AreEqual(expr.ParentMultiBinding.Bindings.Count, 1); + } + + [Test] + public void TestPriorityBinding() + { + string xaml = @" + + + + + + + +"; + + TestLoading(xaml); + + TestWindowPriorityBinding((Window)XamlReader.Parse(xaml)); + + var doc = XamlParser.Parse(new StringReader(xaml)); + + TestWindowPriorityBinding((Window)doc.RootInstance); + } + + + void TestWindowPriorityBinding(Window w) + { + var textBox = (TextBox)w.Content; + + var expr = BindingOperations.GetPriorityBindingExpression(textBox, TextBox.TextProperty); + Assert.IsNotNull(expr); + + Assert.AreEqual(expr.ParentPriorityBinding.Bindings.Count, 2); + } // [Test] // public void Test10() @@ -177,4 +253,19 @@ namespace ICSharpCode.WpfDesign.Tests.XamlDom return null; } } + + public class MyMultiConverter : IMultiValueConverter + { + #region IMultiValueConverter implementation + public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + return System.Windows.DependencyProperty.UnsetValue; + } + public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) + { + throw new NotImplementedException(); + } + #endregion + + } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlObject.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlObject.cs index e8275a34e4..0429d5192c 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlObject.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlObject.cs @@ -18,6 +18,7 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Linq; @@ -548,11 +549,35 @@ namespace ICSharpCode.WpfDesign.XamlDom { public override object ProvideValue() { - var target = XamlObject.Instance as Binding; + var target = XamlObject.Instance as BindingBase; + Debug.Assert(target != null); //TODO: XamlObject.Clone() - var b = new Binding(); + var b = CopyBinding(target); + return b.ProvideValue(XamlObject.ServiceProvider); + } + + BindingBase CopyBinding(BindingBase target) + { + BindingBase b; + if (target != null) { + b = (BindingBase)Activator.CreateInstance(target.GetType()); + } else { + b = new Binding(); + } + foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(target)) { - if (pd.IsReadOnly) continue; + if (pd.IsReadOnly) { + if (pd.Name.Equals("Bindings", StringComparison.Ordinal)) { + var bindings = (Collection)pd.GetValue(target); + var newBindings = (Collection)pd.GetValue(b); + + foreach (var binding in bindings) { + newBindings.Add(CopyBinding(binding)); + } + } + + continue; + } try { var val1 = pd.GetValue(b); var val2 = pd.GetValue(target); @@ -560,7 +585,8 @@ namespace ICSharpCode.WpfDesign.XamlDom pd.SetValue(b, val2); } catch {} } - return b.ProvideValue(XamlObject.ServiceProvider); + + return b; } } From 4e45d981656d75f8f37a9bfa6541ea38b6111588 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Tue, 8 Jul 2014 00:15:33 +0200 Subject: [PATCH 071/575] Fix #511: Automatic code formatting grabs closing curly brackets when adding properties --- .../Project/Src/FormattingStrategy/CSharpFormatter.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormattingStrategy/CSharpFormatter.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormattingStrategy/CSharpFormatter.cs index 65bec18aca..92be04e150 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormattingStrategy/CSharpFormatter.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormattingStrategy/CSharpFormatter.cs @@ -31,11 +31,17 @@ namespace CSharpBinding.FormattingStrategy /// public static void Format(ITextEditor editor, int offset, int length, CSharpFormattingOptionsContainer optionsContainer) { + SyntaxTree syntaxTree = SyntaxTree.Parse(editor.Document); + if (syntaxTree.Errors.Count > 0) { + // Don't format files containing syntax errors! + return; + } + TextEditorOptions editorOptions = editor.ToEditorOptions(); optionsContainer.CustomizeEditorOptions(editorOptions); var formatter = new CSharpFormatter(optionsContainer.GetEffectiveOptions(), editorOptions); formatter.AddFormattingRegion(new DomRegion(editor.Document.GetLocation(offset), editor.Document.GetLocation(offset + length))); - var changes = formatter.AnalyzeFormatting(editor.Document, SyntaxTree.Parse(editor.Document)); + var changes = formatter.AnalyzeFormatting(editor.Document, syntaxTree); changes.ApplyChanges(offset, length); } } From ddd2ff1855b90932faa1d3a40952dac3249c129f Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 11 Jul 2014 23:07:20 +0200 Subject: [PATCH 072/575] Fix NullReferenceException in InsertCtorDialog.CreateCtorParams(). --- .../Src/Refactoring/InsertCtorDialog.xaml.cs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertCtorDialog.xaml.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertCtorDialog.xaml.cs index 973dbd97c7..274d3b5ed8 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertCtorDialog.xaml.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertCtorDialog.xaml.cs @@ -63,9 +63,14 @@ namespace CSharpBinding.Refactoring var typeResolveContext = refactoringContext.GetTypeResolveContext(); if (typeResolveContext == null) { + parameterList = EmptyList.Instance; return; } var resolvedCurrent = typeResolveContext.CurrentTypeDefinition; + if (resolvedCurrent == null) { + parameterList = EmptyList.Instance; + return; + } parameterList = CreateCtorParams(resolvedCurrent).ToList(); this.varList.ItemsSource = parameterList; @@ -74,23 +79,17 @@ namespace CSharpBinding.Refactoring Visibility = System.Windows.Visibility.Visible; } - IEnumerable CreateCtorParams(IType sourceType) + IEnumerable CreateCtorParams(ITypeDefinition sourceType) { int i = 0; - foreach (var f in sourceType.GetFields().Where(field => !field.IsConst - && field.IsStatic == sourceType.GetDefinition().IsStatic - && field.DeclaringType.FullName == sourceType.FullName - && field.ReturnType != null)) { + foreach (var f in sourceType.Fields.Where(f => !f.IsStatic)) { yield return new PropertyOrFieldWrapper(f) { Index = i }; i++; } - foreach (var p in sourceType.GetProperties().Where(prop => prop.CanSet && !prop.IsIndexer - && prop.IsAutoImplemented() - && prop.IsStatic == sourceType.GetDefinition().IsStatic - && prop.DeclaringType.FullName == sourceType.FullName - && prop.ReturnType != null)) { + foreach (var p in sourceType.Properties.Where(prop => !prop.IsStatic && prop.CanSet + && !prop.IsIndexer && prop.IsAutoImplemented())) { yield return new PropertyOrFieldWrapper(p) { Index = i }; i++; } From f1894f80f519f9788b77a9e0bcebff4d1f1662d1 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 13 Jul 2014 10:58:47 +0200 Subject: [PATCH 073/575] fix #179: "navigate to file in project browser" does not work all the times --- .../ProjectBrowser/ProjectBrowserControl.cs | 74 ++++++++++++------- .../TreeNodes/SolutionItemNode.cs | 1 + 2 files changed, 50 insertions(+), 25 deletions(-) diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs index 012b101e55..4cd0081d21 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs @@ -17,8 +17,11 @@ // DEALINGS IN THE SOFTWARE. using System; +using System.Collections.Generic; +using System.Diagnostics; using System.Drawing; using System.IO; +using System.Linq; using System.Windows.Forms; using ICSharpCode.Core; @@ -249,37 +252,58 @@ namespace ICSharpCode.SharpDevelop.Project try { inSelectFile = true; lastSelectionTarget = fileName; - TreeNode node = FindFileNode(fileName); - - if (node != null) { - // Expand to node - TreeNode parent = node.Parent; - while (parent != null) { - parent.Expand(); - parent = parent.Parent; - } - //node = FindFileNode(fileName); - treeView.SelectedNode = node; - } else { - // Node for this file does not exist yet (the tree view is lazy loaded) - SelectDeepestOpenNodeForPath(fileName); - } + LoadAndExpandToNode(new FileName(fileName)); } finally { inSelectFile = false; } } #region SelectDeepestOpenNode internals -// -// SolutionNode RootSolutionNode { -// get { -// if (treeView.Nodes != null && treeView.Nodes.Count>0) { -// return treeView.Nodes[0] as SolutionNode; -// } -// return null; -// } -// } -// + + void LoadAndExpandToNode(FileName fileName) + { + IProject project = null; + if (!SD.ProjectService.IsSolutionOrProjectFile(fileName)) { + project = SD.ProjectService.FindProjectContainingFile(fileName); + } + Stack itemsToExpand = new Stack(); + ISolutionItem item = project; + if (project == null) { + item = SD.ProjectService.CurrentSolution.AllItems + .OfType().FirstOrDefault(i => i.FileName.Equals(fileName)); + } + while (item != null) { + itemsToExpand.Push(item); + item = item.ParentFolder; + } + AbstractProjectBrowserTreeNode current = null; + var currentChildren = treeView.Nodes; + while (itemsToExpand.Any()) { + var currentItem = itemsToExpand.Pop(); + current = currentChildren.OfType().FirstOrDefault(n => n.Tag == currentItem); + if (current == null) break; + current.Expand(); + currentChildren = current.Nodes; + } + if (project != null) { + var fileItem = project.FindFile(fileName); + var virtualPath = fileItem.VirtualName; + if (!string.IsNullOrWhiteSpace(fileItem.DependentUpon)) { + int index = virtualPath.LastIndexOf('\\') + 1; + virtualPath = virtualPath.Insert(index, fileItem.DependentUpon + "\\"); + } + string[] relativePath = virtualPath.Split('\\'); + for (int i = 0; i < relativePath.Length; i++) { + current = currentChildren.OfType() + .FirstOrDefault(n => n.Text.Equals(relativePath[i], StringComparison.OrdinalIgnoreCase)); + if (current == null) break; + current.Expand(); + currentChildren = current.Nodes; + } + } + treeView.SelectedNode = current; + } + void SelectDeepestOpenNodeForPath(string fileName) { TreeNode node = FindDeepestOpenNodeForPath(fileName); diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionItemNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionItemNode.cs index 56e8359c6a..c4ec929e73 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionItemNode.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionItemNode.cs @@ -51,6 +51,7 @@ namespace ICSharpCode.SharpDevelop.Project this.solution = item.ParentSolution; this.item = item; this.Text = Path.GetFileName(FileName); + this.Tag = item; SetIcon(IconService.GetImageForFile(FileName)); } From 14dc190f94bb1ad16a4b0643bf6acaf328c1ec47 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 13 Jul 2014 12:31:34 +0200 Subject: [PATCH 074/575] Fix SymbolCollector not returning a member when it was implementing interface members. --- .../ICSharpCode.NRefactory/Analysis/SymbolCollector.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs index e63b616389..1db8836a1d 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs @@ -120,12 +120,10 @@ namespace ICSharpCode.NRefactory.Analysis case SymbolKind.Method: { var member = (IMember)m; List symbols = new List (); - if (member.ImplementedInterfaceMembers.Count > 0) { - foreach (var m2 in member.ImplementedInterfaceMembers) { - symbols.AddRange (GetRelatedSymbols (g, m2)); - } - } else { + if (!member.IsExplicitInterfaceImplementation) symbols.Add (member); + foreach (var m2 in member.ImplementedInterfaceMembers) { + symbols.AddRange (GetRelatedSymbols (g, m2)); } if (member.DeclaringType.Kind == TypeKind.Interface) { From bede4f6643887c59616ae984b76888c60f53a96a Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 13 Jul 2014 12:41:14 +0200 Subject: [PATCH 075/575] Make SymbolCollector take a Lazy - it's expensive to construct and only used for some members. --- .../Project/Src/Parser/CSharpSymbolSearch.cs | 2 +- .../Analysis/SymbolCollectorTests.cs | 2 +- .../CSharp/Resolver/FindReferencesTest.cs | 2 +- .../Analysis/SymbolCollector.cs | 18 +++++++++++------- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs index fbd05adfc5..6d21e0bb23 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs @@ -87,7 +87,7 @@ namespace CSharpBinding IEnumerable GetRelatedSymbols(ISymbol entity) { - TypeGraph typeGraph = new TypeGraph(new [] { compilation.MainAssembly }); + var typeGraph = new Lazy(() => new TypeGraph(new [] { compilation.MainAssembly })); var symbolCollector = new SymbolCollector(); return symbolCollector.GetRelatedSymbols(typeGraph, entity); } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/Analysis/SymbolCollectorTests.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/Analysis/SymbolCollectorTests.cs index 8bf4338ff8..6ca6161415 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/Analysis/SymbolCollectorTests.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/Analysis/SymbolCollectorTests.cs @@ -60,7 +60,7 @@ namespace ICSharpCode.NRefactory.Analysis col.IncludeOverloads = includeOverloads; col.GroupForRenaming = true; - var result = col.GetRelatedSymbols (new TypeGraph (compilation.Assemblies), + var result = col.GetRelatedSymbols (new Lazy(() => new TypeGraph (compilation.Assemblies)), symbol); if (offsets.Count != result.Count()) { foreach (var a in result) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/Resolver/FindReferencesTest.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/Resolver/FindReferencesTest.cs index e9cdc98d31..8a1470f232 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/Resolver/FindReferencesTest.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/Resolver/FindReferencesTest.cs @@ -469,7 +469,7 @@ namespace Foo { var sym = GetSymbol(compilation, fullyQualifiedName); Assert.NotNull(sym); - var graph = new TypeGraph(compilation.Assemblies); + var graph = new Lazy(() => new TypeGraph(compilation.Assemblies)); var col = new SymbolCollector(); col.IncludeOverloads = includeOverloads; col.GroupForRenaming = true; diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs index 1db8836a1d..6fa9128292 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs @@ -52,7 +52,7 @@ namespace ICSharpCode.NRefactory.Analysis } } - static IEnumerable CollectOverloads (TypeGraph g, IMethod method) + static IEnumerable CollectOverloads (IMethod method) { return method.DeclaringType .GetMethods (m => m.Name == method.Name) @@ -85,7 +85,7 @@ namespace ICSharpCode.NRefactory.Analysis /// The related symbols. /// The type graph. /// The symbol to search - public IEnumerable GetRelatedSymbols(TypeGraph g, ISymbol m) + public IEnumerable GetRelatedSymbols(Lazy g, ISymbol m) { switch (m.SymbolKind) { case SymbolKind.TypeDefinition: @@ -103,7 +103,7 @@ namespace ICSharpCode.NRefactory.Analysis return GetRelatedSymbols (g, ((IMethod)m).DeclaringTypeDefinition); List constructorSymbols = new List (); if (IncludeOverloads) { - foreach (var m3 in CollectOverloads (g, (IMethod)m)) { + foreach (var m3 in CollectOverloads ((IMethod)m)) { constructorSymbols.Add (m3); } } @@ -122,12 +122,16 @@ namespace ICSharpCode.NRefactory.Analysis List symbols = new List (); if (!member.IsExplicitInterfaceImplementation) symbols.Add (member); - foreach (var m2 in member.ImplementedInterfaceMembers) { - symbols.AddRange (GetRelatedSymbols (g, m2)); + if (GroupForRenaming) { + foreach (var m2 in member.ImplementedInterfaceMembers) { + symbols.AddRange (GetRelatedSymbols (g, m2)); + } + } else { + symbols.AddRange(member.ImplementedInterfaceMembers); } if (member.DeclaringType.Kind == TypeKind.Interface) { - var declaringTypeNode = g.GetNode(member.DeclaringTypeDefinition); + var declaringTypeNode = g.Value.GetNode(member.DeclaringTypeDefinition); if (declaringTypeNode != null) { foreach (var derivedType in declaringTypeNode.DerivedTypes) { var mem = SearchMember (derivedType.TypeDefinition, member); @@ -141,7 +145,7 @@ namespace ICSharpCode.NRefactory.Analysis if (IncludeOverloads) { IncludeOverloads = false; if (member is IMethod) { - foreach (var m3 in CollectOverloads (g, (IMethod)member)) { + foreach (var m3 in CollectOverloads ((IMethod)member)) { symbols.AddRange (GetRelatedSymbols (g, m3)); } } else if (member.SymbolKind == SymbolKind.Indexer) { From ae692d51b7c9adea589aecfbf2c22c6c541509a8 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 13 Jul 2014 12:56:16 +0200 Subject: [PATCH 076/575] Fix #284 NotSupportedException thrown in NR CecilLoader --- .../ICSharpCode.NRefactory.Cecil/CecilLoader.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.Cecil/CecilLoader.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.Cecil/CecilLoader.cs index 92f642c2a9..123f810aa2 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.Cecil/CecilLoader.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.Cecil/CecilLoader.cs @@ -824,7 +824,13 @@ namespace ICSharpCode.NRefactory.TypeSystem void AddSecurityAttributes(SecurityDeclaration secDecl, IList targetCollection) { - var blobSecDecl = new UnresolvedSecurityDeclarationBlob((int)secDecl.Action, secDecl.GetBlob()); + byte[] blob; + try { + blob = secDecl.GetBlob(); + } catch (NotSupportedException) { + return; // https://github.com/icsharpcode/SharpDevelop/issues/284 + } + var blobSecDecl = new UnresolvedSecurityDeclarationBlob((int)secDecl.Action, blob); targetCollection.AddRange(blobSecDecl.UnresolvedAttributes); } #endregion From c92e695a20690495d2d8a5debefb2a71acfda1cb Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 13 Jul 2014 17:24:38 +0200 Subject: [PATCH 077/575] assign ParentProject of SD BuildErrors --- .../Project/Build/MSBuildEngine/MSBuildEngineWorker.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Main/SharpDevelop/Project/Build/MSBuildEngine/MSBuildEngineWorker.cs b/src/Main/SharpDevelop/Project/Build/MSBuildEngine/MSBuildEngineWorker.cs index 582bff0b94..15a9ef4793 100644 --- a/src/Main/SharpDevelop/Project/Build/MSBuildEngine/MSBuildEngineWorker.cs +++ b/src/Main/SharpDevelop/Project/Build/MSBuildEngine/MSBuildEngineWorker.cs @@ -313,6 +313,7 @@ namespace ICSharpCode.SharpDevelop.Project error.IsWarning = isWarning; error.Subcategory = subcategory; error.HelpKeyword = helpKeyword; + error.ParentProject = engine.Project; engine.loggerChain.HandleError(error); } From 4ac976c1f26d32b891a9be95fe2ffbd04e9e6597 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 13 Jul 2014 17:25:34 +0200 Subject: [PATCH 078/575] fix #515: Could not find class for token exception when stepping into code --- .../Debugger/Debugger.Core/TypeSystemExtensions.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/AddIns/Debugger/Debugger.Core/TypeSystemExtensions.cs b/src/AddIns/Debugger/Debugger.Core/TypeSystemExtensions.cs index 8b236807be..fec6bd7158 100644 --- a/src/AddIns/Debugger/Debugger.Core/TypeSystemExtensions.cs +++ b/src/AddIns/Debugger/Debugger.Core/TypeSystemExtensions.cs @@ -155,6 +155,12 @@ namespace Debugger string name = corModule.GetName(); if (corModule.IsDynamic() == 1 || corModule.IsInMemory() == 1) { var defaultUnresolvedAssembly = new DefaultUnresolvedAssembly(name); + var defaultUnresolvedTypeDefinition = new DefaultUnresolvedTypeDefinition("UnknownDynamicType"); + var defaultUnresolvedMethod = new DefaultUnresolvedMethod(defaultUnresolvedTypeDefinition, "UnknownMethod"); + var defaultUnresolvedField = new DefaultUnresolvedField(defaultUnresolvedTypeDefinition, "UnknownField"); + defaultUnresolvedTypeDefinition.Members.Add(defaultUnresolvedMethod); + defaultUnresolvedTypeDefinition.Members.Add(defaultUnresolvedField); + defaultUnresolvedAssembly.AddTypeDefinition(defaultUnresolvedTypeDefinition); weakTable.Add(defaultUnresolvedAssembly, new ModuleMetadataInfo(module, null)); return Task.FromResult(defaultUnresolvedAssembly); } @@ -527,6 +533,9 @@ namespace Debugger public static IMethod Import(this ICompilation compilation, ICorDebugFunction corFunction) { Module module = compilation.GetAppDomain().Process.GetModule(corFunction.GetModule()); + if (module.IsDynamic || module.IsInMemory) { + return module.Assembly.GetTypeDefinition("", "UnknownDynamicType").Methods.First(); + } var info = GetInfo(module.Assembly); uint functionToken = corFunction.GetToken(); var unresolvedMethod = info.GetMethodFromToken(functionToken); @@ -547,6 +556,9 @@ namespace Debugger public static IField ImportField(this IType declaringType, uint fieldToken) { var module = declaringType.GetDefinition().ParentAssembly.GetModule(); + if (module.IsDynamic || module.IsInMemory) { + return module.Assembly.GetTypeDefinition("", "UnknownDynamicType").Fields.First(); + } var info = GetInfo(module.Assembly); return declaringType.GetFields(f => info.GetMetadataToken(f) == fieldToken, GetMemberOptions.IgnoreInheritedMembers).SingleOrDefault(); } From 3b9b2ac5885747e672a5c350508e98bd95a54682 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 13 Jul 2014 18:16:40 +0200 Subject: [PATCH 079/575] fix #496: ContextActionBulbControl: it should always be displayed inside the editor's view port bounds --- .../AvalonEdit.AddIn/Src/AvalonEditEditorUIService.cs | 6 ++++-- src/Main/Base/Project/Editor/IEditorUIService.cs | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditEditorUIService.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditEditorUIService.cs index 1e92947da4..2ff4906a43 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditEditorUIService.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditEditorUIService.cs @@ -67,8 +67,10 @@ namespace ICSharpCode.AvalonEdit.AddIn /// public Point GetScreenPosition(int line, int column) { - var positionInPixels = textView.PointToScreen( - textView.GetVisualPosition(new TextViewPosition(line, column), VisualYPosition.LineBottom) - textView.ScrollOffset); + var visualPosition = textView.GetVisualPosition( + new TextViewPosition(line, column), VisualYPosition.LineBottom) - textView.ScrollOffset; + var positionInPixels = textView.PointToScreen(new Point(visualPosition.X.CoerceValue(0, textView.ActualWidth), + visualPosition.Y.CoerceValue(0, textView.ActualHeight))); return positionInPixels.TransformFromDevice(textView); } diff --git a/src/Main/Base/Project/Editor/IEditorUIService.cs b/src/Main/Base/Project/Editor/IEditorUIService.cs index 011dc9a206..1acf5dd07e 100644 --- a/src/Main/Base/Project/Editor/IEditorUIService.cs +++ b/src/Main/Base/Project/Editor/IEditorUIService.cs @@ -37,6 +37,8 @@ namespace ICSharpCode.SharpDevelop.Editor /// /// Gets the absolute screen position of given position in the document. + /// If the position is outside of the currently visible portion of the document, + /// the value is forced into the viewport bounds. /// Point GetScreenPosition(int line, int column); From fc284a5d164839cf2fef9228f7acfd358a724401 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Mon, 14 Jul 2014 00:46:02 +0200 Subject: [PATCH 080/575] Part of #234: Keyboard shortcuts now working in XmlEditor's tree view. --- .../Src/XmlTreeViewContainerControl.cs | 17 ++++-- .../Project/Src/XmlTreeViewControl.cs | 52 ++++++++++++------- 2 files changed, 46 insertions(+), 23 deletions(-) diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlTreeViewContainerControl.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlTreeViewContainerControl.cs index 9ccb6a1eac..202464e075 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlTreeViewContainerControl.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlTreeViewContainerControl.cs @@ -667,11 +667,20 @@ namespace ICSharpCode.XmlEditor } /// - /// Deletes the selected node. + /// Handles a keyboard press event in tree view. /// - protected void XmlElementTreeViewDeleteKeyPressed(object source, EventArgs e) + protected void XmlElementTreeViewKeyPressed(object source, XmlTreeViewKeyPressedEventArgs e) { - Delete(); + if (e.KeyData == Keys.Delete) + Delete(); + else if (e.KeyData == (Keys.Control | Keys.C)) + Copy(); + else if (e.KeyData == (Keys.Control | Keys.X)) + Cut(); + else if (e.KeyData == (Keys.Control | Keys.V)) + Paste(); + else if (e.KeyData == (Keys.Control | Keys.A)) + SelectAll(); } #region Forms Designer generated code @@ -738,7 +747,7 @@ namespace ICSharpCode.XmlEditor this.xmlElementTreeView.Size = new System.Drawing.Size(185, 326); this.xmlElementTreeView.TabIndex = 0; this.xmlElementTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.XmlElementTreeViewAfterSelect); - this.xmlElementTreeView.DeleteKeyPressed += new System.EventHandler(this.XmlElementTreeViewDeleteKeyPressed); + this.xmlElementTreeView.TreeViewKeyPressed += this.XmlElementTreeViewKeyPressed; // // attributesGrid // diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlTreeViewControl.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlTreeViewControl.cs index 0cf244fad8..2f9840ec4b 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlTreeViewControl.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlTreeViewControl.cs @@ -26,13 +26,27 @@ using ICSharpCode.SharpDevelop.Gui; namespace ICSharpCode.XmlEditor { + public class XmlTreeViewKeyPressedEventArgs : EventArgs + { + public XmlTreeViewKeyPressedEventArgs(Keys keyData) + { + KeyData = keyData; + } + + public Keys KeyData + { + get; + private set; + } + } + /// /// Displays a tree of XML elements. This is a separate control so it can /// be unit tested. It has no SharpDevelop specific parts, for example, /// the context menus are defined in the XmlTreeViewContainerControl. /// public class XmlTreeViewControl : ExtTreeView - { + { const string ViewStatePropertyName = "XmlTreeViewControl.ViewState"; XmlDocument document; @@ -43,9 +57,9 @@ namespace ICSharpCode.XmlEditor } /// - /// Raised when the delete key is pressed. + /// Raised when some key in tree view is pressed. /// - public event EventHandler DeleteKeyPressed; + public event EventHandler TreeViewKeyPressed; public XmlTreeViewControl() { @@ -98,7 +112,7 @@ namespace ICSharpCode.XmlEditor /// Gets the selected text node in the tree. /// public XmlText SelectedTextNode { - get { + get { XmlTextTreeNode xmlTextTreeNode = SelectedNode as XmlTextTreeNode; if (xmlTextTreeNode != null) { return xmlTextTreeNode.XmlText; @@ -106,12 +120,12 @@ namespace ICSharpCode.XmlEditor return null; } } - + /// /// Gets the selected comment node in the tree. /// public XmlComment SelectedComment { - get { + get { XmlCommentTreeNode commentTreeNode = SelectedNode as XmlCommentTreeNode; if (commentTreeNode != null) { return commentTreeNode.XmlComment; @@ -230,7 +244,7 @@ namespace ICSharpCode.XmlEditor } /// - /// Updates the corresponding tree node's text based on + /// Updates the corresponding tree node's text based on /// the textNode's value. /// public void UpdateTextNode(XmlText textNode) @@ -240,9 +254,9 @@ namespace ICSharpCode.XmlEditor node.Update(); } } - + /// - /// Updates the corresponding tree node's text based on + /// Updates the corresponding tree node's text based on /// the comment's value. /// public void UpdateComment(XmlComment comment) @@ -314,7 +328,7 @@ namespace ICSharpCode.XmlEditor } /// - /// If no node is selected after a mouse click then we make + /// If no node is selected after a mouse click then we make /// sure the AfterSelect event is fired. Standard behaviour is /// for the AfterSelect event not to be fired when the user /// deselects all tree nodes. @@ -332,8 +346,8 @@ namespace ICSharpCode.XmlEditor /// protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { - if (keyData == Keys.Delete && DeleteKeyPressed != null) { - DeleteKeyPressed(this, new EventArgs()); + if (/*keyData == Keys.Delete && */TreeViewKeyPressed != null) { + TreeViewKeyPressed(this, new XmlTreeViewKeyPressedEventArgs(keyData)); } return base.ProcessCmdKey(ref msg, keyData); } @@ -370,7 +384,7 @@ namespace ICSharpCode.XmlEditor } /// - /// Inserts a new element node either before or after the + /// Inserts a new element node either before or after the /// currently selected element node. /// void InsertElement(XmlElement element, InsertionMode insertionMode) @@ -388,7 +402,7 @@ namespace ICSharpCode.XmlEditor } /// - /// Inserts a new text node either before or after the + /// Inserts a new text node either before or after the /// currently selected node. /// void InsertTextNode(XmlText textNode, InsertionMode insertionMode) @@ -406,7 +420,7 @@ namespace ICSharpCode.XmlEditor } /// - /// Inserts a new comment node either before or after the + /// Inserts a new comment node either before or after the /// currently selected node. /// void InsertComment(XmlComment comment, InsertionMode insertionMode) @@ -541,7 +555,7 @@ namespace ICSharpCode.XmlEditor } /// - /// Shows the corresponding tree node with the ghosted image + /// Shows the corresponding tree node with the ghosted image /// that indicates it is being cut. /// void ShowCutElement(XmlElement element, bool showGhostImage) @@ -551,7 +565,7 @@ namespace ICSharpCode.XmlEditor } /// - /// Shows the corresponding tree node with the ghosted image + /// Shows the corresponding tree node with the ghosted image /// that indicates it is being cut. /// void ShowCutTextNode(XmlText textNode, bool showGhostImage) @@ -559,9 +573,9 @@ namespace ICSharpCode.XmlEditor XmlTextTreeNode node = FindTextNode(textNode); node.ShowGhostImage = showGhostImage; } - + /// - /// Shows the corresponding tree node with the ghosted image + /// Shows the corresponding tree node with the ghosted image /// that indicates it is being cut. /// void ShowCutComment(XmlComment comment, bool showGhostImage) From 4329ac17114eaef710dd786afab262822a18f356 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Mon, 14 Jul 2014 01:53:53 +0200 Subject: [PATCH 081/575] Fixed XmlEditor tests. --- .../Test/Tree/DeleteTreeNodeWithDeleteKeyTestFixture.cs | 2 +- .../Test/Utils/DerivedXmlTreeViewContainerControl.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/Tree/DeleteTreeNodeWithDeleteKeyTestFixture.cs b/src/AddIns/DisplayBindings/XmlEditor/Test/Tree/DeleteTreeNodeWithDeleteKeyTestFixture.cs index f4d66450ed..e729cf5e57 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Test/Tree/DeleteTreeNodeWithDeleteKeyTestFixture.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Test/Tree/DeleteTreeNodeWithDeleteKeyTestFixture.cs @@ -36,7 +36,7 @@ namespace XmlEditor.Tests.Tree public void DeleteKeyPressed() { using (DerivedXmlTreeViewControl treeView = new DerivedXmlTreeViewControl()) { - treeView.DeleteKeyPressed += TreeViewDeleteKeyPressed; + treeView.TreeViewKeyPressed += TreeViewDeleteKeyPressed; treeView.CallProcessCmdKey(Keys.Delete); } Assert.IsTrue(deleteKeyPressEventFired); diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/DerivedXmlTreeViewContainerControl.cs b/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/DerivedXmlTreeViewContainerControl.cs index 2dc02aab78..bda239d255 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/DerivedXmlTreeViewContainerControl.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/DerivedXmlTreeViewContainerControl.cs @@ -81,12 +81,12 @@ namespace XmlEditor.Tests.Utils /// /// Allows us to call the XmlTreeViewContainer's - /// XmlElementTreeViewDeleteKeyPressed method to fake the user + /// XmlElementTreeViewKeyPressed method to fake the user /// pressing the delete key in the xml tree view control. /// public void CallXmlElementTreeViewDeleteKeyPressed() { - base.XmlElementTreeViewDeleteKeyPressed(this, new EventArgs()); + base.XmlElementTreeViewKeyPressed(this, new XmlTreeViewKeyPressedEventArgs(Keys.Delete)); } /// From 22a021957b4b717bf55e816061b1971c74306e65 Mon Sep 17 00:00:00 2001 From: jkuehner Date: Tue, 15 Jul 2014 13:21:56 +0200 Subject: [PATCH 082/575] Bugfix -> Number Editor smallest possible Value was zero! --- .../Project/PropertyGrid/Editors/NumberEditor.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs index 555e95a33e..4f8c7bbcf6 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs @@ -94,7 +94,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid.Editors var range = Metadata.GetValueRange(PropertyNode.FirstProperty); if (range == null) { - range = new NumberRange() { Min = 0, Max = double.MaxValue }; + range = new NumberRange() { Min = double.MinValue, Max = double.MaxValue }; } if (range.Min == double.MinValue) { From cfe4b3a77eebea28ecc2588d019ff841673b06d4 Mon Sep 17 00:00:00 2001 From: jkuehner Date: Tue, 15 Jul 2014 13:21:56 +0200 Subject: [PATCH 083/575] Bugfix -> Number Editor smallest possible Value was zero! (cherry picked from commit 22a021957b4b717bf55e816061b1971c74306e65) --- .../Project/PropertyGrid/Editors/NumberEditor.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs index 555e95a33e..4f8c7bbcf6 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml.cs @@ -94,7 +94,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid.Editors var range = Metadata.GetValueRange(PropertyNode.FirstProperty); if (range == null) { - range = new NumberRange() { Min = 0, Max = double.MaxValue }; + range = new NumberRange() { Min = double.MinValue, Max = double.MaxValue }; } if (range.Min == double.MinValue) { From 514266dfecb667a3ddd5c259ea0eef9f2b92d109 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Thu, 17 Jul 2014 22:35:12 +0200 Subject: [PATCH 084/575] fix #434: Code action in BaseMethodParameterNameMismatchIssue doesn't rename symbols --- .../Project/Src/Refactoring/EditorScript.cs | 10 ++++ .../Editor/Commands/FindReferencesCommand.cs | 50 +++++++++++-------- 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/EditorScript.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/EditorScript.cs index c33d1b6b7c..cb33ec2b33 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/EditorScript.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/EditorScript.cs @@ -24,6 +24,7 @@ using System.Windows.Threading; using ICSharpCode.AvalonEdit.Editing; using ICSharpCode.AvalonEdit.Snippets; using ICSharpCode.AvalonEdit.Document; +using ICSharpCode.Core; using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.CSharp; using ICSharpCode.NRefactory.CSharp.Refactoring; @@ -32,6 +33,10 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Editor; +using ICSharpCode.SharpDevelop.Editor.Commands; +using ICSharpCode.SharpDevelop.Editor.Dialogs; +using ICSharpCode.SharpDevelop.Gui; +using ICSharpCode.SharpDevelop.Refactoring; using ICSharpCode.SharpDevelop.Workbench; namespace CSharpBinding.Refactoring @@ -102,6 +107,11 @@ namespace CSharpBinding.Refactoring return tcs.Task; } + public override void Rename(ISymbol symbol, string name = null) + { + RenameSymbolCommand.RunRename(symbol, name); + } + public override Task - - Silverlight Application - - -
Loading...
- - -]]> - - - diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Templates/WPFApplication.xpt b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Templates/WPFApplication.xpt deleted file mode 100644 index dde2f040bb..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Templates/WPFApplication.xpt +++ /dev/null @@ -1,90 +0,0 @@ - - diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Templates/WPFWindow.xft b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Templates/WPFWindow.xft deleted file mode 100644 index 7d05628785..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Templates/WPFWindow.xft +++ /dev/null @@ -1,26 +0,0 @@ - diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdselectedtestsfile.rb b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdselectedtestsfile.rb deleted file mode 100644 index fb24e8fa91..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdselectedtestsfile.rb +++ /dev/null @@ -1,32 +0,0 @@ - -module Test - module Unit - module UI - module SharpDevelopConsole - - class SharpDevelopSelectedTestsFile - - def initialize(filename) - @tests = [] - read_tests(filename) - end - - def read_tests(filename) - File.open(filename).each {|line| - line = line.strip - if line.length > 0 then - @tests.push(line) - end - } - end - - def tests - return @tests - end - - end - - end - end - end -end diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdtest.rb b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdtest.rb deleted file mode 100644 index 2ed6ff6e33..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdtest.rb +++ /dev/null @@ -1,27 +0,0 @@ - -require 'test/unit' -require 'test/unit/autorunner' -require 'sdselectedtestsfile' - -Test::Unit.run = false - -Test::Unit::AutoRunner::RUNNERS[:console] = - proc do |r| - require 'sdtestrunner' - Test::Unit::UI::SharpDevelopConsole::TestRunner - end - -standalone = true -runner = Test::Unit::AutoRunner.new(standalone) -runner.process_args(ARGV) - -# Add files to run tests on. -selected_tests_filename = ARGV.last -print "selected_tests_filename: " + selected_tests_filename -selected_tests_file = Test::Unit::UI::SharpDevelopConsole::SharpDevelopSelectedTestsFile.new(selected_tests_filename) -selected_tests_file.tests.each {|filename| - runner.to_run.push(filename) -} - -runner.run - diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdtestresult.rb b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdtestresult.rb deleted file mode 100644 index feccb6948d..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdtestresult.rb +++ /dev/null @@ -1,64 +0,0 @@ - -module Test - module Unit - module UI - module SharpDevelopConsole - - class SharpDevelopTestResult - - def initialize(name) - @name = parse_name(name) - @result = 'Success' - @message = '' - @stacktrace = '' - end - - def parse_name(name) - @name = name - open_bracket_index = name.index('(') - if open_bracket_index > 0 then - close_bracket_index = name.index(')', open_bracket_index) - if close_bracket_index > 0 then - length = close_bracket_index - open_bracket_index - 1 - method_name = name[0, open_bracket_index] - class_name = name[open_bracket_index + 1, length] - @name = class_name + '.' + method_name - end - end - end - - def name - return @name - end - - def result - return @result - end - - def message - return @message - end - - def stacktrace - return @stacktrace - end - - def update_fault(fault) - @result = 'Failure' - @message = format_text(fault.message) - @stacktrace = format_text(fault.long_display) - end - - def format_text(text) - formatted_text = '' - text.each_line do |line| - formatted_text += " " + line - end - return formatted_text[1..-1] - end - end - - end - end - end -end diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdtestresultwriter.rb b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdtestresultwriter.rb deleted file mode 100644 index 7fe72e75be..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdtestresultwriter.rb +++ /dev/null @@ -1,31 +0,0 @@ - -require 'sdtestresult' - -module Test - module Unit - module UI - module SharpDevelopConsole - - class SharpDevelopTestResultWriter - - def initialize(filename) - @file = File.open(filename, 'w') - end - - def write_test_result(test_result) - writeline("Name: " + test_result.name) - writeline("Result: " + test_result.result) - writeline("Message: " + test_result.message) - writeline("StackTrace: " + test_result.stacktrace) - end - - def writeline(message) - @file.write(message + "\r\n") - @file.flush - end - end - - end - end - end -end diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdtestrunner.rb b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdtestrunner.rb deleted file mode 100644 index 47d76d18b1..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/TestRunner/sdtestrunner.rb +++ /dev/null @@ -1,145 +0,0 @@ -#-- -# -# Author:: Nathaniel Talbott. -# Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved. -# License:: Ruby license. -# -# Extended to support SharpDevelop - -require 'test/unit/ui/testrunnermediator' -require 'test/unit/ui/testrunnerutilities' -require 'sdtestresultwriter' -require 'sdtestresult' - -module Test - module Unit - module UI - module SharpDevelopConsole - - # Runs a Test::Unit::TestSuite on the console. - class TestRunner - extend TestRunnerUtilities - - # Creates a new TestRunner for running the passed - # suite. If quiet_mode is true, the output while - # running is limited to progress dots, errors and - # failures, and the final result. io specifies - # where runner output should go to; defaults to - # STDOUT. - def initialize(suite, output_level=NORMAL, io=STDOUT) - if (suite.respond_to?(:suite)) - @suite = suite.suite - else - @suite = suite - end - @output_level = output_level - @io = io - @already_outputted = false - @faults = [] - - resultsfile = ARGV[0] - @test_result_writer = SharpDevelopTestResultWriter.new(resultsfile) - end - - # Begins the test run. - def start - setup_mediator - attach_to_mediator - return start_mediator - end - - private - def setup_mediator - @mediator = create_mediator(@suite) - suite_name = @suite.to_s - if ( @suite.kind_of?(Module) ) - suite_name = @suite.name - end - output("Loaded suite #{suite_name}") - end - - def create_mediator(suite) - return TestRunnerMediator.new(suite) - end - - def attach_to_mediator - @mediator.add_listener(TestResult::FAULT, &method(:add_fault)) - @mediator.add_listener(TestRunnerMediator::STARTED, &method(:started)) - @mediator.add_listener(TestRunnerMediator::FINISHED, &method(:finished)) - @mediator.add_listener(TestCase::STARTED, &method(:test_started)) - @mediator.add_listener(TestCase::FINISHED, &method(:test_finished)) - end - - def start_mediator - return @mediator.run_suite - end - - def add_fault(fault) - @test_result.update_fault(fault) - @faults << fault - output_single(fault.single_character_display, PROGRESS_ONLY) - @already_outputted = true - end - - def started(result) - @result = result - output("Started") - end - - def finished(elapsed_time) - nl - output("Finished in #{elapsed_time} seconds.") - @faults.each_with_index do |fault, index| - nl - output("%3d) %s" % [index + 1, fault.long_display]) - end - nl - output(@result) - end - - def test_started(name) - create_test_result(name) - output_single(name + ": ", VERBOSE) - end - - def create_test_result(name) - @test_result = SharpDevelopTestResult.new(name) - end - - def test_finished(name) - write_test_result() - output_single(".", PROGRESS_ONLY) unless (@already_outputted) - nl(VERBOSE) - @already_outputted = false - end - - def nl(level=NORMAL) - output("", level) - end - - def output(something, level=NORMAL) - @io.puts(something) if (output?(level)) - @io.flush - end - - def output_single(something, level=NORMAL) - @io.write(something) if (output?(level)) - @io.flush - end - - def output?(level) - level <= @output_level - end - - def write_test_result() - @test_result_writer.write_test_result(@test_result) - end - end - end - end - end -end - -if __FILE__ == $0 - Test::Unit::UI::SharpDevelopConsole::TestRunner.start_command_line_test -end diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/AssemblyInfo.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/AssemblyInfo.cs deleted file mode 100644 index ab8244a9ed..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/AssemblyInfo.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -#region Using directives - -using System; -using System.Reflection; -using System.Runtime.InteropServices; - -using NUnit.Framework; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("RubyBinding.Tests")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("RubyBinding.Tests")] -[assembly: AssemblyCopyright("Copyright 2009")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. -[assembly: ComVisible(false)] - -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all the values or you can use the default the Revision and -// Build Numbers by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.*")] - -// Run unit tests on STA thread. -[assembly: RequiresSTA] diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Configuration/RubyAddInOptionsTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Configuration/RubyAddInOptionsTestFixture.cs deleted file mode 100644 index dca7932614..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Configuration/RubyAddInOptionsTestFixture.cs +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.IO; -using ICSharpCode.Core; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Configuration -{ - /// - /// Tests the AddInOptions class. - /// - [TestFixture] - public class RubyAddInOptionsTestFixture - { - [Test] - public void DefaultRubyConsoleFileName() - { - Properties p = new Properties(); - DerivedRubyAddInOptions options = new DerivedRubyAddInOptions(p); - options.AddInPath = @"C:\Projects\SD\AddIns\Ruby"; - - string expectedFileName = Path.Combine(options.AddInPath, "ir.exe"); - Assert.AreEqual(expectedFileName, options.RubyFileName); - Assert.AreEqual("${addinpath:ICSharpCode.RubyBinding}", options.AddInPathRequested); - } - - [Test] - public void SetRubyConsoleFileNameToNull() - { - Properties p = new Properties(); - DerivedRubyAddInOptions options = new DerivedRubyAddInOptions(p); - options.AddInPath = @"C:\Projects\SD\AddIns\Ruby"; - options.RubyFileName = null; - - string expectedFileName = Path.Combine(options.AddInPath, "ir.exe"); - Assert.AreEqual(expectedFileName, options.RubyFileName); - } - - [Test] - public void SetRubyConsoleFileNameToEmptyString() - { - Properties p = new Properties(); - DerivedRubyAddInOptions options = new DerivedRubyAddInOptions(p); - options.AddInPath = @"C:\Projects\SD\AddIns\Ruby"; - options.RubyFileName = String.Empty; - - string expectedFileName = Path.Combine(options.AddInPath, "ir.exe"); - Assert.AreEqual(expectedFileName, options.RubyFileName); - } - - [Test] - public void SetRubyConsoleFileName() - { - Properties p = new Properties(); - RubyAddInOptions options = new RubyAddInOptions(p); - string fileName = @"C:\IronRuby\ir.exe"; - options.RubyFileName = fileName; - - Assert.AreEqual(fileName, options.RubyFileName); - Assert.AreEqual(fileName, p["RubyFileName"]); - } - - [Test] - public void RubyLibraryPathTakenFromProperties() - { - Properties p = new Properties(); - RubyAddInOptions options = new RubyAddInOptions(p); - string expectedRubyLibraryPath = @"c:\ruby\lib;c:\ruby\lib\lib-tk"; - p["RubyLibraryPath"] = expectedRubyLibraryPath; - Assert.AreEqual(expectedRubyLibraryPath, options.RubyLibraryPath); - } - - [Test] - public void HasRubyLibraryPathReturnsTrueForNonEmptyPath() - { - Properties p = new Properties(); - RubyAddInOptions options = new RubyAddInOptions(p); - options.RubyLibraryPath = @"c:\ruby\lib"; - Assert.IsTrue(options.HasRubyLibraryPath); - } - - [Test] - public void HasRubyLibraryPathReturnsFalseForEmptyPath() - { - Properties p = new Properties(); - RubyAddInOptions options = new RubyAddInOptions(p); - options.RubyLibraryPath = String.Empty; - Assert.IsFalse(options.HasRubyLibraryPath); - } - - [Test] - public void RubyLibraryPathTrimsPath() - { - Properties p = new Properties(); - RubyAddInOptions options = new RubyAddInOptions(p); - options.RubyLibraryPath = " "; - Assert.AreEqual(String.Empty, options.RubyLibraryPath); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Console/RubyConsoleHostTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Console/RubyConsoleHostTests.cs deleted file mode 100644 index d091a75b12..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Console/RubyConsoleHostTests.cs +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.AvalonEdit; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting; -using ICSharpCode.Scripting.Tests.Utils; -using IronRuby.Runtime; -using Microsoft.Scripting; -using Microsoft.Scripting.Hosting; -using Microsoft.Scripting.Hosting.Shell; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Console -{ - /// - /// Basic tests for the RubyConsoleHost class. - /// - [TestFixture] - public class RubyConsoleHostTests - { - DerivedRubyConsoleHost host; - TextEditor textEditorControl; - ScriptingConsoleTextEditor textEditor; - - [TestFixtureSetUp] - public void Init() - { - textEditorControl = new TextEditor(); - textEditor = new ScriptingConsoleTextEditor(textEditorControl); - host = new DerivedRubyConsoleHost(textEditor); - } - - [TestFixtureTearDown] - public void TearDown() - { - host.Dispose(); - } - - [Test] - public void RubyConsoleHostIsMicrosoftScriptingConsoleHostType() - { - Assert.IsInstanceOf(typeof(ConsoleHost), host); - } - - [Test] - public void OptionsParserCreatedIsRubyOptionsParser() - { - OptionsParser parser = host.CallCreateOptionsParser(); - Assert.IsInstanceOf(typeof(IronRuby.Hosting.RubyOptionsParser), parser); - } - - [Test] - public void CommandLineCreatedIsRubyCommandLine() - { - CommandLine commandLine = host.CallCreateCommandLine(); - Assert.IsInstanceOf(typeof(IronRuby.Hosting.RubyCommandLine), commandLine); - } - - [Test] - public void ConsoleCreatedIsRubyConsole() - { - IConsole console = host.CallCreateConsole(null, null, null); - Assert.IsInstanceOf(typeof(RubyConsole), console); - } - - [Test] - public void RubyLanguageIsSetup() - { - LanguageSetup setup = host.CallCreateLanguageSetup(); - Assert.AreEqual("IronRuby", setup.DisplayName); - } - - [Test] - public void ConsoleHostImplementsIDisposable() - { - Assert.IsNotNull(host as IDisposable); - } - - /// - /// When the console is disposed calling ReadLine returns null. - /// - [Test] - public void HostDisposesRubyConsole() - { - DerivedRubyConsoleHost host = new DerivedRubyConsoleHost(new FakeConsoleTextEditor()); - RubyConsole console = host.CallCreateConsole(null, null, null) as RubyConsole; - host.Dispose(); - - Assert.IsNull(console.ReadLine(0)); - } - - /// - /// Makes sure the Dispose method checks if the Ruby console is null before trying to dispose it. - /// - [Test] - public void DisposingRubyConsoleHostWithoutCreatingRubyConsole() - { - RubyConsoleHost host = new RubyConsoleHost(new FakeConsoleTextEditor(), new FakeControlDispatcher()); - host.Dispose(); - } - - [Test] - public void DefaultOutputStreamReplacedByCustomStreamClass() - { - host.CallCreateConsole(null, null, null); - Assert.IsNotNull(host.OutputStream); - } - - [Test] - public void ProviderIsRubyContext() - { - Assert.AreEqual(typeof(RubyContext), host.GetProvider()); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/AddHandlerConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/AddHandlerConversionTestFixture.cs deleted file mode 100644 index e4edb288a4..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/AddHandlerConversionTestFixture.cs +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that assigning a method to an event handler is converted - /// from C# to Ruby correctly. - /// - [TestFixture] - public class AddHandlerConversionTestFixture - { - DefaultCompilationUnit unit; - ParseInformation parseInfo; - - string csharp = "class Foo\r\n" + - "{\r\n" + - " public Foo()\r\n" + - " {" + - " button = new Button();\r\n" + - " button.Click += ButtonClick;\r\n" + - " button.MouseDown += self.OnMouseDown;\r\n" + - " }\r\n" + - "\r\n" + - " void ButtonClick(object sender, EventArgs e)\r\n" + - " {\r\n" + - " }\r\n" + - "\r\n" + - " void OnMouseDown(object sender, EventArgs e)\r\n" + - " {\r\n" + - " }\r\n" + - "}"; - - [SetUp] - public void Init() - { - DefaultProjectContent projectContent = new DefaultProjectContent(); - unit = new DefaultCompilationUnit(projectContent); - DefaultClass c = new DefaultClass(unit, "Foo"); - - DefaultMethod buttonClickMethod = new DefaultMethod(c, "ButtonClick"); - AddSenderAndEventArgsParameters(buttonClickMethod); - c.Methods.Add(buttonClickMethod); - - DefaultMethod onMouseDownMethod = new DefaultMethod(c, "OnMouseDown"); - AddSenderAndEventArgsParameters(onMouseDownMethod); - c.Methods.Add(onMouseDownMethod); - - projectContent.AddClassToNamespaceList(c); - - parseInfo = new ParseInformation(unit); - } - - void AddSenderAndEventArgsParameters(IMethod method) - { - DefaultReturnType returnType = new DefaultReturnType(method.DeclaringType); - DomRegion region = new DomRegion(); - method.Parameters.Add(new DefaultParameter("sender", returnType, region)); - method.Parameters.Add(new DefaultParameter("e", returnType, region)); - } - - [Test] - public void ConvertedRubyCode() - { - string expectedCode = - "class Foo\r\n" + - " def initialize()\r\n" + - " button = Button.new()\r\n" + - " button.Click { |sender, e| self.ButtonClick(sender, e) }\r\n" + - " button.MouseDown { |sender, e| self.OnMouseDown(sender, e) }\r\n" + - " end\r\n" + - "\r\n" + - " def ButtonClick(sender, e)\r\n" + - " end\r\n" + - "\r\n" + - " def OnMouseDown(sender, e)\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = NRefactoryToRubyConverter.Create("test.cs", parseInfo); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedCode, code, code); - } - - [Test] - public void CanGetFooClassFromCompilationUnitProjectContentGetClassMethod() - { - IClass c = unit.ProjectContent.GetClass("Foo", 0); - Assert.AreEqual("Foo", c.Name); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ArrayCastConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ArrayCastConversionTestFixture.cs deleted file mode 100644 index 714413e512..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ArrayCastConversionTestFixture.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that an array cast is correctly converted to Ruby. - /// - [TestFixture] - public class ArrayCastConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Assign()\r\n" + - " {\r\n" + - " int[] elements = new int[10];\r\n" + - " List list = new List();\r\n" + - " list.Add((int[])elements.Clone());\r\n" + - " }\r\n" + - "}"; - - [Test] - public void GeneratedRubySourceCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def Assign()\r\n" + - " elements = Array.CreateInstance(System::Int32, 10)\r\n" + - " list = List[Array[System::Int32]].new()\r\n" + - " list.Add(elements.Clone())\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ArrayConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ArrayConversionTestFixture.cs deleted file mode 100644 index a8dac5a9cf..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ArrayConversionTestFixture.cs +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that an array is converted from C# to Ruby. - /// - [TestFixture] - public class ArrayConversionTestFixture - { - string integerArray = "class Foo\r\n" + - "{\r\n" + - " public int[] Run()\r\n" + - " {" + - " int[] i = new int[] {1, 2, 3, 4};\r\n" + - " i[0] = 5;\r\n" + - " return i;\r\n" + - " }\r\n" + - "}"; - - string int32Array = "class Foo\r\n" + - "{\r\n" + - " public Int32[] Run()\r\n" + - " {" + - " Int32[] i = new Int32[] {1, 2, 3, 4};\r\n" + - " i[0] = 5;\r\n" + - " return i;\r\n" + - " }\r\n" + - "}"; - - string uintArray = "class Foo\r\n" + - "{\r\n" + - " public uint[] Run()\r\n" + - " {" + - " uint[] i = new uint[] {1, 2, 3, 4};\r\n" + - " i[0] = 5;\r\n" + - " return i;\r\n" + - " }\r\n" + - "}"; - - string stringArray = "class Foo\r\n" + - "{\r\n" + - " public string[] Run()\r\n" + - " {" + - " string[] i = new string[] {\"a\", \"b\"};\r\n" + - " i[0] = \"c\";\r\n" + - " return i;\r\n" + - " }\r\n" + - "}"; - - string barArray = "class Foo\r\n" + - "{\r\n" + - " public string[] Run()\r\n" + - " {" + - " Bar[] i = new Bar[] { new Bar(), new Bar()};\r\n" + - " i[0] = new Bar();\r\n" + - " return i;\r\n" + - " }\r\n" + - "}"; - - string uriArray = "class Foo\r\n" + - "{\r\n" + - " public Uri[] Run()\r\n" + - " {" + - " Uri[] i = new Uri[] {new Uri(\"a\"), new Uri(\"b\")};\r\n" + - " i[0] = new Uri(\"c\");\r\n" + - " return i;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedIntegerArrayCode() - { - string expectedCode = - "class Foo\r\n" + - " def Run()\r\n" + - " i = Array[System::Int32].new([1, 2, 3, 4])\r\n" + - " i[0] = 5\r\n" + - " return i\r\n" + - " end\r\n" + - "end"; - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(integerArray); - - Assert.AreEqual(expectedCode, code); - } - - [Test] - public void ConvertedStringArrayCode() - { - string expectedCode = - "class Foo\r\n" + - " def Run()\r\n" + - " i = Array[System::String].new([\"a\", \"b\"])\r\n" + - " i[0] = \"c\"\r\n" + - " return i\r\n" + - " end\r\n" + - "end"; - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(stringArray); - - Assert.AreEqual(expectedCode, code); - } - - [Test] - public void ConvertedBarArrayCode() - { - string expectedCode = - "class Foo\r\n" + - " def Run()\r\n" + - " i = Array[Bar].new([Bar.new(), Bar.new()])\r\n" + - " i[0] = Bar.new()\r\n" + - " return i\r\n" + - " end\r\n" + - "end"; - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(barArray); - - Assert.AreEqual(expectedCode, code); - } - - [Test] - public void ConvertedUriArrayCode() - { - string expectedCode = - "class Foo\r\n" + - " def Run()\r\n" + - " i = Array[Uri].new([Uri.new(\"a\"), Uri.new(\"b\")])\r\n" + - " i[0] = Uri.new(\"c\")\r\n" + - " return i\r\n" + - " end\r\n" + - "end"; - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(uriArray); - - Assert.AreEqual(expectedCode, code); - } - - [Test] - public void ConvertedUIntArrayCode() - { - string expectedCode = - "class Foo\r\n" + - " def Run()\r\n" + - " i = Array[System::UInt32].new([1, 2, 3, 4])\r\n" + - " i[0] = 5\r\n" + - " return i\r\n" + - " end\r\n" + - "end"; - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(uintArray); - - Assert.AreEqual(expectedCode, code); - } - - [Test] - public void ConvertedInt32ArrayCode() - { - string expectedCode = - "class Foo\r\n" + - " def Run()\r\n" + - " i = Array[Int32].new([1, 2, 3, 4])\r\n" + - " i[0] = 5\r\n" + - " return i\r\n" + - " end\r\n" + - "end"; - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(int32Array); - - Assert.AreEqual(expectedCode, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/AssignmentOperatorConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/AssignmentOperatorConversionTestFixture.cs deleted file mode 100644 index 57bf6a2fd0..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/AssignmentOperatorConversionTestFixture.cs +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests ArithmeticOperatorType conversions: - /// - /// None, - /// Assign, - /// - /// Add, Done - /// Subtract, - /// Multiply, - /// Divide, - /// Modulus, - /// - /// Power, // (VB only) - /// DivideInteger, // (VB only) - /// ConcatString, // (VB only) - /// - /// ShiftLeft, - /// ShiftRight, - /// - /// BitwiseAnd, - /// BitwiseOr, - /// ExclusiveOr - /// - [TestFixture] - public class AssignmentOperatorConversionTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " public void Convert(int a)\r\n" + - " {\r\n" + - " a ASSIGNMENT_OPERATOR 5;\r\n" + - " }\r\n" + - "}"; - - string vb = - "Public Class Foo\r\n" + - " Public Sub Convert(ByVal a as Integer)\r\n" + - " a ASSIGNMENT_OPERATOR 5;\r\n" + - " End Sub\r\n" + - "End Class"; - - string RubyCodeTemplate = - "class Foo\r\n" + - " def Convert(a)\r\n" + - " a ASSIGNMENT_OPERATOR 5\r\n" + - " end\r\n" + - "end"; - - [Test] - public void MultiplyOperator() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(GetCode(csharp, "*=")); - string expectedRuby = GetCode(RubyCodeTemplate, "*="); - - Assert.AreEqual(expectedRuby, Ruby); - } - - [Test] - public void DivideOperator() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(GetCode(csharp, "/=")); - string expectedRuby = GetCode(RubyCodeTemplate, "/="); - - Assert.AreEqual(expectedRuby, Ruby); - } - - [Test] - public void ModulusOperator() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(GetCode(csharp, "%=")); - string expectedRuby = GetCode(RubyCodeTemplate, "%="); - - Assert.AreEqual(expectedRuby, Ruby); - } - - [Test] - public void AndOperator() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(GetCode(csharp, "&=")); - string expectedRuby = GetCode(RubyCodeTemplate, "&="); - - Assert.AreEqual(expectedRuby, Ruby); - } - - [Test] - public void OrOperator() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(GetCode(csharp, "|=")); - string expectedRuby = GetCode(RubyCodeTemplate, "|="); - - Assert.AreEqual(expectedRuby, Ruby); - } - - [Test] - public void ExclusiveOrOperator() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(GetCode(csharp, "^=")); - string expectedRuby = GetCode(RubyCodeTemplate, "^="); - - Assert.AreEqual(expectedRuby, Ruby); - } - - [Test] - public void ShiftLeftOperator() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(GetCode(csharp, "<<=")); - string expectedRuby = GetCode(RubyCodeTemplate, "<<="); - - Assert.AreEqual(expectedRuby, Ruby); - } - - [Test] - public void ShiftRightOperator() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(GetCode(csharp, ">>=")); - string expectedRuby = GetCode(RubyCodeTemplate, ">>="); - - Assert.AreEqual(expectedRuby, Ruby); - } - - [Test] - public void VBConcatOperator() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.VBNet); - converter.IndentString = " "; - string Ruby = converter.Convert(GetCode(vb, "&=")); - string expectedRuby = GetCode(RubyCodeTemplate, "+="); - - Assert.AreEqual(expectedRuby, Ruby); - } - - [Test] - public void VBDivideIntegerOperator() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.VBNet); - converter.IndentString = " "; - string Ruby = converter.Convert(GetCode(vb, "\\=")); - string expectedRuby = GetCode(RubyCodeTemplate, "/="); - - Assert.AreEqual(expectedRuby, Ruby); - } - - [Test] - public void VBPowerOperator() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.VBNet); - converter.IndentString = " "; - string Ruby = converter.Convert(GetCode(vb, "^=")); - string expectedRuby = GetCode(RubyCodeTemplate, "**="); - - Assert.AreEqual(expectedRuby, Ruby); - } - - string GetCode(string code, string assignmentOperator) - { - return code.Replace("ASSIGNMENT_OPERATOR", assignmentOperator); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BaseClassConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BaseClassConversionTestFixture.cs deleted file mode 100644 index f9cd579bfd..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BaseClassConversionTestFixture.cs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class BaseClassConversionTestFixture - { - string csharp = - "class Foo : Bar, IMyInterface\r\n" + - "{\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - string expectedCode = - "class Foo < Bar, IMyInterface\r\n" + - "end"; - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedCode, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BaseClassReferenceTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BaseClassReferenceTestFixture.cs deleted file mode 100644 index 8736f1ee2b..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BaseClassReferenceTestFixture.cs +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that a base class reference through the base keyword - /// is converted to the self keyword in Ruby when converting - /// from C# to Ruby correctly. - /// - [TestFixture] - public class BaseClassReferenceTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " public string Run()\r\n" + - " {" + - " return base.ToString();\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - string expectedCode = - "class Foo\r\n" + - " def Run()\r\n" + - " return self.ToString()\r\n" + - " end\r\n" + - "end"; - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedCode, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BinaryOperatorConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BinaryOperatorConversionTestFixture.cs deleted file mode 100644 index e7d37adf82..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BinaryOperatorConversionTestFixture.cs +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.NRefactory.Ast; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that all the binary operators are converted to - /// Ruby correctly. - /// - [TestFixture] - public class BinaryOperatorConversionTests - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public int Run(i)\r\n" + - " {\r\n" + - " if (i BINARY_OPERATOR 0) {\r\n" + - " return 10;\r\n" + - " }\r\n" + - " return 0;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void GreaterThan() - { - Assert.AreEqual(">", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.GreaterThan)); - } - - [Test] - public void NotEqual() - { - Assert.AreEqual("!=", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.InEquality)); - } - - [Test] - public void Divide() - { - Assert.AreEqual("/", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.Divide)); - } - - [Test] - public void LessThan() - { - Assert.AreEqual("<", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.LessThan)); - } - - [Test] - public void Equals() - { - string code = GetCode(@"=="); - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string RubyCode = converter.Convert(code); - string expectedRubyCode = "class Foo\r\n" + - " def Run(i)\r\n" + - " if i == 0 then\r\n" + - " return 10\r\n" + - " end\r\n" + - " return 0\r\n" + - " end\r\n" + - "end"; - Assert.AreEqual(expectedRubyCode, RubyCode); - } - - [Test] - public void LessThanOrEqual() - { - Assert.AreEqual("<=", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.LessThanOrEqual)); - } - - [Test] - public void GreaterThanOrEqual() - { - Assert.AreEqual(">=", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.GreaterThanOrEqual)); - } - - [Test] - public void Add() - { - Assert.AreEqual("+", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.Add)); - } - - [Test] - public void Multiply() - { - Assert.AreEqual("*", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.Multiply)); - } - - [Test] - public void BitwiseAnd() - { - Assert.AreEqual("&", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.BitwiseAnd)); - } - - [Test] - public void BitwiseOr() - { - Assert.AreEqual("|", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.BitwiseOr)); - } - - [Test] - public void BooleanAnd() - { - Assert.AreEqual("and", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.LogicalAnd)); - } - - [Test] - public void BooleanOr() - { - Assert.AreEqual("or", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.LogicalOr)); - } - - [Test] - public void BooleanXor() - { - Assert.AreEqual("^", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.ExclusiveOr)); - } - - [Test] - public void Modulus() - { - Assert.AreEqual("%", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.Modulus)); - } - - [Test] - public void Subtract() - { - Assert.AreEqual("-", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.Subtract)); - } - - [Test] - public void DivideInteger() - { - Assert.AreEqual("/", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.DivideInteger)); - } - - [Test] - public void ReferenceEquality() - { - Assert.AreEqual("is", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.ReferenceEquality)); - } - - [Test] - public void BitShiftRight() - { - Assert.AreEqual(">>", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.ShiftRight)); - } - - [Test] - public void BitShiftLeft() - { - Assert.AreEqual("<<", NRefactoryToRubyConverter.GetBinaryOperator(BinaryOperatorType.ShiftLeft)); - } - - /// - /// Gets the C# code with the binary operator replaced with the - /// specified string. - /// - string GetCode(string op) - { - return csharp.Replace("BINARY_OPERATOR", op); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BitShiftConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BitShiftConversionTestFixture.cs deleted file mode 100644 index 6be17417da..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BitShiftConversionTestFixture.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class BitShiftConversionTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " public int Convert()\r\n" + - " {\r\n" + - " int a = (b >> 16) & 0xffff;\r\n" + - " return a;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def Convert()\r\n" + - " a = (b >> 16) & 0xffff\r\n" + - " return a\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BooleanConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BooleanConversionTestFixture.cs deleted file mode 100644 index 3198abe543..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BooleanConversionTestFixture.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class BooleanVariableConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " bool a;\r\n" + - "\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " a = true;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = "class Foo\r\n" + - " def initialize()\r\n" + - " @a = true\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BreakAndContinueConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BreakAndContinueConversionTestFixture.cs deleted file mode 100644 index 94c26e6a3f..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/BreakAndContinueConversionTestFixture.cs +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that a break statement is converted correctly. - /// - [TestFixture] - public class BreakAndContinueConversionTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " public void Run()\r\n" + - " {\r\n" + - " int i = 0;\r\n" + - " while (i < 10) {\r\n" + - " if (i == 5) {\r\n" + - " break;\r\n" + - " } else {\r\n" + - " continue;\r\n" + - " }\r\n" + - " i++;\r\n" + - " }\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def Run()\r\n" + - " i = 0\r\n" + - " while i < 10\r\n" + - " if i == 5 then\r\n" + - " break\r\n" + - " else\r\n" + - " next\r\n" + - " end\r\n" + - " i += 1\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/CSharpClassWithNamespaceConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/CSharpClassWithNamespaceConversionTestFixture.cs deleted file mode 100644 index c53fc76c44..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/CSharpClassWithNamespaceConversionTestFixture.cs +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class CSharpClassWithNamespaceConversionTestFixture - { - string csharp = "namespace MyNamespace\r\n" + - "{\r\n" + - " class Foo\r\n" + - " {\r\n" + - " }\r\n" + - "}"; - - [Test] - public void GeneratedRubySourceCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "module MyNamespace\r\n" + - " class Foo\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/CallConstructorWithParametersConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/CallConstructorWithParametersConversionTestFixture.cs deleted file mode 100644 index 97f9acc5e7..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/CallConstructorWithParametersConversionTestFixture.cs +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that parameters passed to a constructor are converted to Ruby correctly. - /// - [TestFixture] - public class CallConstructorWithParametersConversionTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " Bar b = new Bar(0, 0, 1, 10);\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " b = Bar.new(0, 0, 1, 10)\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/CannotFindMethodForEventHandlerConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/CannotFindMethodForEventHandlerConversionTestFixture.cs deleted file mode 100644 index afae1cc2d3..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/CannotFindMethodForEventHandlerConversionTestFixture.cs +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class CannotFindMethodForEventHandlerConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public Foo()\r\n" + - " {" + - " button = new Button();\r\n" + - " button.Click += ButtonClick;\r\n" + - " button.MouseDown += self.OnMouseDown;\r\n" + - " }\r\n" + - "}"; - - /// - /// When event handler method cannot be found the generated ruby code assumes the - /// method has no parameters. - /// - [Test] - public void ConvertedRubyCode() - { - string expectedCode = - "class Foo\r\n" + - " def initialize()\r\n" + - " button = Button.new()\r\n" + - " button.Click { self.ButtonClick() }\r\n" + - " button.MouseDown { self.OnMouseDown() }\r\n" + - " end\r\n" + - "end"; - - DefaultProjectContent projectContent = new DefaultProjectContent(); - DefaultCompilationUnit unit = new DefaultCompilationUnit(projectContent); - ParseInformation parseInfo = new ParseInformation(unit); - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp, parseInfo); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedCode, code, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ClassConstructorConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ClassConstructorConversionTestFixture.cs deleted file mode 100644 index 40af6dbc5b..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ClassConstructorConversionTestFixture.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the CSharpToRubyConverter class can convert a class constructor. - /// - [TestFixture] - public class ClassConstructorConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = "class Foo\r\n" + - " def initialize()\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ClassDestructorConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ClassDestructorConversionTestFixture.cs deleted file mode 100644 index d272fa2da8..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ClassDestructorConversionTestFixture.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class ClassDestructorConversionTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " int i = 10;\r\n" + - " public ~Foo()\r\n" + - " {\r\n" + - " i = 0;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @i = 10\r\n" + - " end\r\n" + - "\r\n" + - " def finalize()\r\n" + - " @i = 0\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ClassFieldReferenceConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ClassFieldReferenceConversionTestFixture.cs deleted file mode 100644 index d8b7e5573d..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ClassFieldReferenceConversionTestFixture.cs +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that the keyword this is used when an explicit reference to a field is used. - /// Also tests that any constructor parameters are generated. - /// - [TestFixture] - public class ClassFieldReferenceConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " int i;\r\n" + - " int j;\r\n" + - " public Foo(int i)\r\n" + - " {\r\n" + - " this.i = i;\r\n" + - " }\r\n" + - "\r\n" + - " public void SetInt(int j)\r\n" + - " {\r\n" + - " this.j = j;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize(i)\r\n" + - " self.@i = i\r\n" + - " end\r\n" + - "\r\n" + - " def SetInt(j)\r\n" + - " self.@j = j\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ClassWithNamespaceAndUsingStatementConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ClassWithNamespaceAndUsingStatementConversionTestFixture.cs deleted file mode 100644 index 79ab285e9f..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ClassWithNamespaceAndUsingStatementConversionTestFixture.cs +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that there is a new line between the require statements and the module name. - /// - [TestFixture] - public class ClassWithNamespaceAndUsingStatementsConversionTestFixture - { - string csharp = - "using System.Windows.Forms;\r\n" + - "\r\n" + - "namespace MyNamespace\r\n" + - "{\r\n" + - " class Foo\r\n" + - " {\r\n" + - " }\r\n" + - "}"; - - [Test] - public void GeneratedRubySourceCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "require \"mscorlib\"\r\n" + - "require \"System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\"\r\n" + - "\r\n" + - "module MyNamespace\r\n" + - " class Foo\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertCSharpToRubyMenuCommandTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertCSharpToRubyMenuCommandTestFixture.cs deleted file mode 100644 index 14e76f9f39..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertCSharpToRubyMenuCommandTestFixture.cs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.Core; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class ConvertCSharpToRubyMenuCommandTestFixture : ConvertToRubyMenuCommand - { - string newFileText; - string defaultFileName; - string language; - string fileNamePassedToGetParseInformation; - - [TestFixtureSetUp] - public void SetUpFixture() - { - MockWorkbench workbench = MockWorkbench.CreateWorkbenchWithOneViewContent("test.cs"); - workbench.ActiveMockEditableViewContent.Text = - "class Foo\r\n" + - "{\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " }\r\n" + - "}"; - - MockTextEditorOptions options = workbench.ActiveMockEditableViewContent.MockTextEditorOptions; - options.IndentationSize = 4; - options.ConvertTabsToSpaces = true; - - Run(workbench); - } - - [Test] - public void GeneratedRubyCode() - { - string code = - "class Foo\r\n" + - " def initialize()\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(code, newFileText); - } - - [Test] - public void NewFileName() - { - Assert.AreEqual("Generated.rb", defaultFileName); - } - - [Test] - public void NewFileLanguage() - { - Assert.AreEqual("Ruby", language); - } - - [Test] - public void NameOfFileBeingConvertedIsPassedToParserServiceGetInformation() - { - Assert.AreEqual("test.cs", fileNamePassedToGetParseInformation); - } - - protected override void NewFile(string defaultName, string language, string content) - { - defaultFileName = defaultName; - this.language = language; - newFileText = content; - } - - protected override ParseInformation GetParseInformation(string fileName) - { - fileNamePassedToGetParseInformation = fileName; - return new ParseInformation(new DefaultCompilationUnit(new DefaultProjectContent())); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertEventHandlerForClassWithNamespaceTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertEventHandlerForClassWithNamespaceTestFixture.cs deleted file mode 100644 index 3845c3ba74..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertEventHandlerForClassWithNamespaceTestFixture.cs +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class ConvertEventHandlerForClassWithNamespaceTestFixture - { - DefaultCompilationUnit unit; - ParseInformation parseInfo; - - string csharp = - "namespace NewNamespace\r\n" + - "{\r\n" + - " class Foo\r\n" + - " {\r\n" + - " public Foo()\r\n" + - " {" + - " button = new Button();\r\n" + - " button.Click += ButtonClick;\r\n" + - " button.MouseDown += self.OnMouseDown;\r\n" + - " }\r\n" + - " \r\n" + - " void ButtonClick(object sender, EventArgs e)\r\n" + - " {\r\n" + - " }\r\n" + - " \r\n" + - " void OnMouseDown(object sender, EventArgs e)\r\n" + - " {\r\n" + - " }\r\n" + - " }\r\n" + - "}"; - - [SetUp] - public void Init() - { - DefaultProjectContent projectContent = new DefaultProjectContent(); - unit = new DefaultCompilationUnit(projectContent); - DefaultClass c = new DefaultClass(unit, "NewNamespace.Foo"); - - DefaultMethod buttonClickMethod = new DefaultMethod(c, "ButtonClick"); - AddSenderAndEventArgsParameters(buttonClickMethod); - c.Methods.Add(buttonClickMethod); - - DefaultMethod onMouseDownMethod = new DefaultMethod(c, "OnMouseDown"); - AddSenderAndEventArgsParameters(onMouseDownMethod); - c.Methods.Add(onMouseDownMethod); - - projectContent.AddClassToNamespaceList(c); - - parseInfo = new ParseInformation(unit); - } - - void AddSenderAndEventArgsParameters(IMethod method) - { - DefaultReturnType returnType = new DefaultReturnType(method.DeclaringType); - DomRegion region = new DomRegion(); - method.Parameters.Add(new DefaultParameter("sender", returnType, region)); - method.Parameters.Add(new DefaultParameter("e", returnType, region)); - } - - [Test] - public void ConvertedRubyCode() - { - string expectedCode = - "module NewNamespace\r\n" + - " class Foo\r\n" + - " def initialize()\r\n" + - " button = Button.new()\r\n" + - " button.Click { |sender, e| self.ButtonClick(sender, e) }\r\n" + - " button.MouseDown { |sender, e| self.OnMouseDown(sender, e) }\r\n" + - " end\r\n" + - "\r\n" + - " def ButtonClick(sender, e)\r\n" + - " end\r\n" + - "\r\n" + - " def OnMouseDown(sender, e)\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = NRefactoryToRubyConverter.Create("test.cs", parseInfo); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedCode, code, code); - } - - [Test] - public void CanGetFooClassFromCompilationUnitProjectContentGetClassMethod() - { - IClass c = unit.ProjectContent.GetClass("NewNamespace.Foo", 0); - Assert.AreEqual("Foo", c.Name); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertToRubyProjectCommandTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertToRubyProjectCommandTestFixture.cs deleted file mode 100644 index 5677e4c532..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertToRubyProjectCommandTestFixture.cs +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; - -using ICSharpCode.Core; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Project; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class ConvertToRubyProjectCommandTestFixture - { - DerivedConvertProjectToRubyProjectCommand convertProjectCommand; - FileProjectItem source; - FileProjectItem target; - MockProject sourceProject; - RubyProject targetProject; - FileProjectItem textFileSource; - FileProjectItem textFileTarget; - ParseInformation parseInfo; - - string sourceCode = - "class Foo\r\n" + - "{\r\n" + - " static void Main()\r\n" + - " {\r\n" + - " }\r\n" + - "}"; - - [TestFixtureSetUp] - public void SetUpFixture() - { - RubyMSBuildEngineHelper.InitMSBuildEngine(); - - List bindings = new List(); - using (TextReader reader = RubyBindingAddInFile.ReadAddInFile()) { - AddIn addin = AddIn.Load(reader, String.Empty); - bindings.Add(new ProjectBindingDescriptor(AddInHelper.GetCodon(addin, "/SharpDevelop/Workbench/ProjectBindings", "Ruby"))); - } - ProjectBindingService.SetBindings(bindings); - - convertProjectCommand = new DerivedConvertProjectToRubyProjectCommand(); - parseInfo = new ParseInformation(new DefaultCompilationUnit(new DefaultProjectContent())); - convertProjectCommand.ParseInfo = parseInfo; - convertProjectCommand.FileServiceDefaultEncoding = Encoding.Unicode; - - sourceProject = new MockProject(); - sourceProject.Directory = @"d:\projects\test"; - source = new FileProjectItem(sourceProject, ItemType.Compile, @"src\Program.cs"); - targetProject = (RubyProject)convertProjectCommand.CallCreateProject(@"d:\projects\test\converted", sourceProject); - target = new FileProjectItem(targetProject, source.ItemType, source.Include); - source.CopyMetadataTo(target); - - textFileSource = new FileProjectItem(sourceProject, ItemType.None, @"src\readme.txt"); - textFileTarget = new FileProjectItem(targetProject, textFileSource.ItemType, textFileSource.Include); - textFileSource.CopyMetadataTo(textFileTarget); - - convertProjectCommand.AddParseableFileContent(source.FileName, sourceCode); - - convertProjectCommand.CallConvertFile(source, target); - convertProjectCommand.CallConvertFile(textFileSource, textFileTarget); - } - - [Test] - public void CommandHasRubyTargetLanguage() - { - Assert.AreEqual(RubyProjectBinding.LanguageName, convertProjectCommand.TargetLanguageName); - } - - [Test] - public void TargetFileExtensionChanged() - { - Assert.AreEqual(@"src\Program.rb", target.Include); - } - - [Test] - public void TextFileTargetFileExtensionUnchanged() - { - Assert.AreEqual(@"src\readme.txt", textFileTarget.Include); - } - - [Test] - public void FilesPassedToBaseClassForConversion() - { - List expectedFiles = new List(); - expectedFiles.Add(new SourceAndTargetFile(textFileSource, textFileTarget)); - Assert.AreEqual(expectedFiles, convertProjectCommand.SourceAndTargetFilesPassedToBaseClass); - } - - [Test] - public void ExpectedCodeWrittenToFile() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp, parseInfo); - string expectedCode = converter.Convert(sourceCode, SupportedLanguage.CSharp) + - "\r\n" + - "\r\n" + - converter.GenerateMainMethodCall(converter.EntryPointMethods[0]); - - List expectedSavedFiles = new List(); - expectedSavedFiles.Add(new ConvertedFile(target.FileName, expectedCode, Encoding.Unicode)); - Assert.AreEqual(expectedSavedFiles, convertProjectCommand.SavedFiles); - } - - [Test] - public void FileNamesPassedToGetParseInfoMethod() - { - List expectedFileNames = new List(); - expectedFileNames.Add(@"d:\projects\test\src\Program.cs"); - expectedFileNames.Add(@"d:\projects\test\src\readme.txt"); - Assert.AreEqual(expectedFileNames.ToArray(), convertProjectCommand.FilesPassedToGetParseInfo.ToArray()); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertVBNetToRubyMenuCommandTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertVBNetToRubyMenuCommandTestFixture.cs deleted file mode 100644 index 14f127126d..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertVBNetToRubyMenuCommandTestFixture.cs +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.Core; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class ConvertVBNetToRubyMenuCommandTestFixture : ConvertToRubyMenuCommand - { - string newFileText; - string defaultFileName; - string language; - string fileNamePassedToGetParseInformation; - - [SetUp] - public void Init() - { - MockWorkbench workbench = MockWorkbench.CreateWorkbenchWithOneViewContent("test.vb"); - workbench.ActiveMockEditableViewContent.Text = - "class Foo\r\n" + - " Public Sub New\r\n" + - " End Sub\r\n" + - "end class"; - - MockTextEditorOptions options = workbench.ActiveMockEditableViewContent.MockTextEditorOptions; - options.ConvertTabsToSpaces = false; - options.IndentationSize = 2; - - Run(workbench); - } - - [Test] - public void GeneratedRubyCode() - { - string expectedRubyCode = - "class Foo\r\n" + - "\tdef initialize()\r\n" + - "\tend\r\n" + - "end"; - - Assert.AreEqual(expectedRubyCode, newFileText); - } - - [Test] - public void NewFileName() - { - Assert.AreEqual("Generated.rb", defaultFileName); - } - - [Test] - public void NewFileLanguage() - { - Assert.AreEqual("Ruby", language); - } - - [Test] - public void NameOfFileBeingConvertedIsPassedToParserServiceGetInformation() - { - Assert.AreEqual("test.vb", fileNamePassedToGetParseInformation); - } - - protected override void NewFile(string defaultName, string language, string content) - { - defaultFileName = defaultName; - this.language = language; - newFileText = content; - } - - protected override ParseInformation GetParseInformation(string fileName) - { - fileNamePassedToGetParseInformation = fileName; - return new ParseInformation(new DefaultCompilationUnit(new DefaultProjectContent())); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertedSupportedLanguageTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertedSupportedLanguageTests.cs deleted file mode 100644 index 8524005e46..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ConvertedSupportedLanguageTests.cs +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.RubyBinding; -using ICSharpCode.NRefactory; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class ConverterSupportedLanguageTests - { - [Test] - public void CSharpSupportedLanguage() - { - NRefactoryToRubyConverter converter = NRefactoryToRubyConverter.Create(".cs", CreateParseInfo()); - Assert.AreEqual(SupportedLanguage.CSharp, converter.SupportedLanguage); - } - - [Test] - public void VBNetSupportedLanguage() - { - NRefactoryToRubyConverter converter = NRefactoryToRubyConverter.Create(".vb", CreateParseInfo()); - Assert.AreEqual(SupportedLanguage.VBNet, converter.SupportedLanguage); - } - - [Test] - public void CSharpCaseInsensitive() - { - NRefactoryToRubyConverter converter = NRefactoryToRubyConverter.Create(".CS", CreateParseInfo()); - Assert.AreEqual(SupportedLanguage.CSharp, converter.SupportedLanguage); - } - - [Test] - public void NullFileName() - { - Assert.IsNull(NRefactoryToRubyConverter.Create(null, CreateParseInfo())); - } - - [Test] - public void TextFileCannotBeConverted() - { - Assert.IsNull(NRefactoryToRubyConverter.Create(".txt", CreateParseInfo())); - } - - [Test] - public void CanConvertCSharpFiles() - { - Assert.IsTrue(NRefactoryToRubyConverter.CanConvert(".cs")); - } - - [Test] - public void CanConvertVBNetFiles() - { - Assert.IsTrue(NRefactoryToRubyConverter.CanConvert(".vb")); - } - - [Test] - public void CanConvertIsCaseInsensitive() - { - Assert.IsTrue(NRefactoryToRubyConverter.CanConvert(".CS")); - } - - [Test] - public void CannotConvertTextFile() - { - Assert.IsFalse(NRefactoryToRubyConverter.CanConvert(".txt")); - } - - [Test] - public void CannotConvertNullFileName() - { - Assert.IsFalse(NRefactoryToRubyConverter.CanConvert(null)); - } - - ParseInformation CreateParseInfo() - { - return new ParseInformation(new DefaultCompilationUnit(new DefaultProjectContent())); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/CreateConverterWithNullParseInfoTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/CreateConverterWithNullParseInfoTestFixture.cs deleted file mode 100644 index 4f27b3613f..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/CreateConverterWithNullParseInfoTestFixture.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class CreateConverterWithNullParseInfoTestFixture - { - [Test] - public void NRefactoryToRubyConverterCreateThrowsArgumentNullExceptionWhenParseInfoParameterIsNull() - { - ArgumentNullException ex = - Assert.Throws(delegate { NRefactoryToRubyConverter.Create("test.cs", null); }); - Assert.AreEqual("parseInfo", ex.ParamName); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ElseIfStatementConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ElseIfStatementConversionTestFixture.cs deleted file mode 100644 index 9bd023ecf2..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ElseIfStatementConversionTestFixture.cs +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class ElseIfStatementConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public int GetCount(i)\r\n" + - " {" + - " if (i == 0) {\r\n" + - " return 10;\r\n" + - " } else if (i < 1) {\r\n" + - " return 4;\r\n" + - " }\r\n" + - " return 2;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = "class Foo\r\n" + - " def GetCount(i)\r\n" + - " if i == 0 then\r\n" + - " return 10\r\n" + - " elsif i < 1 then\r\n" + - " return 4\r\n" + - " end\r\n" + - " return 2\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/EmptyCSharpClassConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/EmptyCSharpClassConversionTestFixture.cs deleted file mode 100644 index 49687740f1..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/EmptyCSharpClassConversionTestFixture.cs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the CSharpToRubyConverter class. - /// - [TestFixture] - public class EmptyCSharpClassConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - string Ruby = converter.Convert(csharp); - string expectedRuby = "class Foo\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/EventHandlerWithObjectCreationTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/EventHandlerWithObjectCreationTestFixture.cs deleted file mode 100644 index e5cbf9e4cd..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/EventHandlerWithObjectCreationTestFixture.cs +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that an event handler such as button1.Click += new EventHandler(Button1Click) is converted - /// to Ruby correctly. - /// - [TestFixture] - public class EventHandlerWithObjectCreationTestFixture - { - DefaultCompilationUnit unit; - ParseInformation parseInfo; - - string csharp = - "class Foo\r\n" + - "{\r\n" + - " public Foo()\r\n" + - " {" + - " button = new Button();\r\n" + - " button.Click += new EventHandler(ButtonClick);\r\n" + - " }\r\n" + - "\r\n" + - " void ButtonClick(object sender, EventArgs e)\r\n" + - " {\r\n" + - " }\r\n" + - "}"; - - [SetUp] - public void Init() - { - DefaultProjectContent projectContent = new DefaultProjectContent(); - unit = new DefaultCompilationUnit(projectContent); - DefaultClass c = new DefaultClass(unit, "Foo"); - - DefaultMethod buttonClickMethod = new DefaultMethod(c, "ButtonClick"); - AddSenderAndEventArgsParameters(buttonClickMethod); - c.Methods.Add(buttonClickMethod); - - projectContent.AddClassToNamespaceList(c); - - parseInfo = new ParseInformation(unit); - } - - void AddSenderAndEventArgsParameters(IMethod method) - { - DefaultReturnType returnType = new DefaultReturnType(method.DeclaringType); - DomRegion region = new DomRegion(); - method.Parameters.Add(new DefaultParameter("sender", returnType, region)); - method.Parameters.Add(new DefaultParameter("e", returnType, region)); - } - - [Test] - public void ConvertedRubyCode() - { - string expectedCode = - "class Foo\r\n" + - " def initialize()\r\n" + - " button = Button.new()\r\n" + - " button.Click { |sender, e| self.ButtonClick(sender, e) }\r\n" + - " end\r\n" + - "\r\n" + - " def ButtonClick(sender, e)\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp, parseInfo); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedCode, code); - } - - [Test] - public void CanGetFooClassFromCompilationUnitProjectContentGetClassMethod() - { - IClass c = unit.ProjectContent.GetClass("Foo", 0); - Assert.AreEqual("Foo", c.Name); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/FieldDeclarationWithNoInitializerTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/FieldDeclarationWithNoInitializerTestFixture.cs deleted file mode 100644 index 3659f7684e..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/FieldDeclarationWithNoInitializerTestFixture.cs +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the C# to Ruby converter does not add an - /// assignment for a variable declaration that has no - /// initial value assigned. - /// - [TestFixture] - public class FieldDeclarationWithNoInitializerTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " private int i;\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " int j = 0;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " j = 0\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ForLoopConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ForLoopConversionTestFixture.cs deleted file mode 100644 index 7b1175974a..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ForLoopConversionTestFixture.cs +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the conversion of a for loop to Ruby. - /// - /// C#: - /// - /// for (int i = 0; i < 5; ++i) { - /// } - /// - /// Ruby: - /// - /// i = 0 - /// while i < 5 - /// i = i + 1 - /// end - /// - /// Ideally we would convert it to: - /// - /// for i in 0..5 - /// ... - /// end - /// - [TestFixture] - public class ForLoopConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public int GetCount()\r\n" + - " {\r\n" + - " int count = 0;\r\n" + - " for (int i = 0; i < 5; i = i + 1) {\r\n" + - " count++;\r\n" + - " }\r\n" + - " return count;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - System.Console.WriteLine(code); - string expectedCode = - "class Foo\r\n" + - " def GetCount()\r\n" + - " count = 0\r\n" + - " i = 0\r\n" + - " while i < 5\r\n" + - " count += 1\r\n" + - " i = i + 1\r\n" + - " end\r\n" + - " return count\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedCode, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ForNextConversionTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ForNextConversionTests.cs deleted file mode 100644 index 98d6fe2ea3..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ForNextConversionTests.cs +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class ForNextConversionTests - { - string vbnetForNextCode = - "Public Class Foo\r\n" + - " Public Function GetCount() As Integer\r\n" + - " Dim count As Integer = 0\r\n" + - " For i As Integer = 0 To 4\r\n" + - " count += 1\r\n" + - " Next\r\n" + - " Return count\r\n" + - " End Function\r\n" + - "End Class\r\n"; - - [Test] - public void ConvertVBNetForNextToRuby() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.VBNet); - converter.IndentString = " "; - string code = converter.Convert(vbnetForNextCode); - string expectedCode = - "class Foo\r\n" + - " def GetCount()\r\n" + - " count = 0\r\n" + - " i = 0\r\n" + - " while i <= 4\r\n" + - " count += 1\r\n" + - " i = i + 1\r\n" + - " end\r\n" + - " return count\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedCode, code); - } - - string vbnetForNextWithStepCode = - "Public Class Foo\r\n" + - " Public Function GetCount() As Integer\r\n" + - " Dim count As Integer = 0\r\n" + - " For i As Integer = 0 To 4 Step 2\r\n" + - " count += 1\r\n" + - " Next\r\n" + - " Return count\r\n" + - " End Function\r\n" + - "End Class\r\n"; - - [Test] - public void ConvertVBNetForNextWithStepToRuby() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.VBNet); - converter.IndentString = " "; - string code = converter.Convert(vbnetForNextWithStepCode); - string expectedCode = - "class Foo\r\n" + - " def GetCount()\r\n" + - " count = 0\r\n" + - " i = 0\r\n" + - " while i <= 4\r\n" + - " count += 1\r\n" + - " i = i + 2\r\n" + - " end\r\n" + - " return count\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedCode, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ForeachConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ForeachConversionTestFixture.cs deleted file mode 100644 index cb8fe66a99..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ForeachConversionTestFixture.cs +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the conversion of a foreach loop to Ruby. - /// - [TestFixture] - public class ForeachConversionTestFixture - { - string intArrayCode = "class Foo\r\n" + - "{\r\n" + - " public int GetCount(int[] items)\r\n" + - " {\r\n" + - " int count = 0;\r\n" + - " foreach (int item in items) {\r\n" + - " count++;\r\n" + - " }\r\n" + - " return count;\r\n" + - " }\r\n" + - "}"; - - string dictionaryCode = "class Foo\r\n" + - "{\r\n" + - " public void DisplayItems()\r\n" + - " {\r\n" + - " Dictionary record = new Dictionary();\r\n" + - " record.Add(\"a\", \"b\");\r\n" + - " record.Add(\"c\", \"d\");\r\n" + - " foreach (string key in record.Keys) {\r\n" + - " Console.WriteLine(\"Key: \" + key);\r\n" + - " }\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedIntArrayCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(intArrayCode); - string expectedCode = - "class Foo\r\n" + - " def GetCount(items)\r\n" + - " count = 0\r\n" + - " enumerator = items.GetEnumerator()\r\n" + - " while enumerator.MoveNext()\r\n" + - " item = enumerator.Current\r\n" + - " count += 1\r\n" + - " end\r\n" + - " return count\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedCode, code); - } - - [Test] - public void ConvertedDictionaryCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(dictionaryCode); - string expectedCode = - "class Foo\r\n" + - " def DisplayItems()\r\n" + - " record = Dictionary[System::String, System::String].new()\r\n" + - " record.Add(\"a\", \"b\")\r\n" + - " record.Add(\"c\", \"d\")\r\n" + - " enumerator = record.Keys.GetEnumerator()\r\n" + - " while enumerator.MoveNext()\r\n" + - " key = enumerator.Current\r\n" + - " Console.WriteLine(\"Key: \" + key)\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedCode, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ForeachConversionWithMethodCallTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ForeachConversionWithMethodCallTestFixture.cs deleted file mode 100644 index 3644014445..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ForeachConversionWithMethodCallTestFixture.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class ForeachConversionWithMethodCallTestFixture - { - string environmentSpecialFolderCode = "class Foo\r\n" + - "{\r\n" + - " public void PrintEnvironmentVariables()\r\n" + - " {\r\n" + - " foreach (Environment.SpecialFolder folder in Environment.SpecialFolder.GetValues(typeof(Environment.SpecialFolder)))\r\n" + - " {\r\n" + - " Console.WriteLine(\"{0}={1}\\n\", folder, Environment.GetFolderPath(folder));\r\n" + - " }\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedEnvironmentSpecialFolderCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(environmentSpecialFolderCode); - string expectedCode = - "require \"mscorlib\"\r\n" + - "\r\n" + - "class Foo\r\n" + - " def PrintEnvironmentVariables()\r\n" + - " enumerator = Environment.SpecialFolder.GetValues(Environment::SpecialFolder.to_clr_type).GetEnumerator()\r\n" + - " while enumerator.MoveNext()\r\n" + - " folder = enumerator.Current\r\n" + - " Console.WriteLine(\"{0}={1}\\n\", folder, Environment.GetFolderPath(folder))\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - Assert.AreEqual(expectedCode, code, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/GenerateMainMethodCallTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/GenerateMainMethodCallTestFixture.cs deleted file mode 100644 index f58639e680..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/GenerateMainMethodCallTestFixture.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the generation of code to call the class's Main method. - /// - [TestFixture] - public class GenerateMainMethodCallTestFixture - { - string mainMethodWithNoParametersCode = "class Foo\r\n" + - "{\r\n" + - " static void Main()\r\n" + - " {\r\n" + - " }\r\n" + - "\r\n" + - " static void Stop()\r\n" + - " {\r\n" + - " }\r\n" + - "\r\n" + - " public void Run()\r\n" + - " {\r\n" + - " }\r\n" + - "}"; - - [Test] - public void GeneratedMainMethodCallWithNoParametersCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - converter.Convert(mainMethodWithNoParametersCode); - string code = converter.GenerateMainMethodCall(converter.EntryPointMethods[0]); - Assert.AreEqual("Foo.Main()", code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/GenericListConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/GenericListConversionTestFixture.cs deleted file mode 100644 index 7a827ec14e..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/GenericListConversionTestFixture.cs +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that the code to create an instance of a generic list is converted to Ruby - /// correctly. - /// - /// C#: List list = new List(); - /// - /// Ruby: list = List[str]() - /// - [TestFixture] - public class GenericListConversionTestFixture - { - string csharp = "using System.Collections.Generic;\r\n" + - "\r\n" + - "class Foo\r\n" + - "{\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " List list = new List();\r\n" + - " Dictionary dictionary = new Dictionary();\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "require \"mscorlib\"\r\n" + - "require \"System.Collections.Generic, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\"\r\n" + - "\r\n" + - "class Foo\r\n" + - " def initialize()\r\n" + - " list = List[System::String].new()\r\n" + - " dictionary = Dictionary[System::String, System::Int32].new()\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IfBlockStatementConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IfBlockStatementConversionTestFixture.cs deleted file mode 100644 index 69b7e886f6..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IfBlockStatementConversionTestFixture.cs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the conversion of an if-else statement where the - /// if and else blocks both have more than one statement. - /// - [TestFixture] - public class IfBlockStatementConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " int i = 0;\r\n" + - " public int GetCount()\r\n" + - " {" + - " if (i == 0) {\r\n" + - " i = 10;\r\n" + - " return 10;\r\n" + - " } else {\r\n" + - " i = 4;\r\n" + - " return 4;\r\n" + - " }\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @i = 0\r\n" + - " end\r\n" + - "\r\n" + - " def GetCount()\r\n" + - " if @i == 0 then\r\n" + - " @i = 10\r\n" + - " return 10\r\n" + - " else\r\n" + - " @i = 4\r\n" + - " return 4\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IfStatementConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IfStatementConversionTestFixture.cs deleted file mode 100644 index 523c1bdf10..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IfStatementConversionTestFixture.cs +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the conversion of a C# if-else statement to Ruby. - /// - [TestFixture] - public class IfStatementConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " int i = 0;\r\n" + - " public int GetCount()\r\n" + - " {" + - " if (i == 0) {\r\n" + - " return 10;\r\n" + - " } else {\r\n" + - " return 4;\r\n" + - " }\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = "class Foo\r\n" + - " def initialize()\r\n" + - " @i = 0\r\n" + - " end\r\n" + - "\r\n" + - " def GetCount()\r\n" + - " if @i == 0 then\r\n" + - " return 10\r\n" + - " else\r\n" + - " return 4\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IncrementAndDecrementConversionTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IncrementAndDecrementConversionTests.cs deleted file mode 100644 index 9cd732e119..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IncrementAndDecrementConversionTests.cs +++ /dev/null @@ -1,227 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that an integer increments and decrements are converted - /// from C# to Ruby correctly. - /// - [TestFixture] - public class IncrementAndDecrementConversionTests - { - [Test] - public void PreIncrement() - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Run(int i)\r\n" + - " {\r\n" + - " ++i;\r\n" + - " }\r\n" + - "}"; - - string expectedRuby = "class Foo\r\n" + - " def Run(i)\r\n" + - " i += 1\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, code); - } - - [Test] - public void PostIncrement() - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Run(int i)\r\n" + - " {\r\n" + - " i++;\r\n" + - " }\r\n" + - "}"; - - string expectedRuby = "class Foo\r\n" + - " def Run(i)\r\n" + - " i += 1\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, code); - } - - [Test] - public void PreDecrement() - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Run(int i)\r\n" + - " {\r\n" + - " --i\r\n" + - " }\r\n" + - "}"; - - string expectedRuby = "class Foo\r\n" + - " def Run(i)\r\n" + - " i -= 1\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, code); - } - - [Test] - public void PostDecrement() - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Run(int i)\r\n" + - " {\r\n" + - " i--\r\n" + - " }\r\n" + - "}"; - - string expectedRuby = "class Foo\r\n" + - " def Run(i)\r\n" + - " i -= 1\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, code); - } - - [Test] - public void Add10() - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Run(int i)\r\n" + - " {\r\n" + - " i = i + 10\r\n" + - " }\r\n" + - "}"; - - string expectedRuby = "class Foo\r\n" + - " def Run(i)\r\n" + - " i = i + 10\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, code); - } - - [Test] - public void Add5() - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Run(int i)\r\n" + - " {\r\n" + - " i += 5\r\n" + - " }\r\n" + - "}"; - - string expectedRuby = "class Foo\r\n" + - " def Run(i)\r\n" + - " i += 5\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, code); - } - - [Test] - public void Subtract10() - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Run(int i)\r\n" + - " {\r\n" + - " i = i - 10\r\n" + - " }\r\n" + - "}"; - - string expectedRuby = "class Foo\r\n" + - " def Run(i)\r\n" + - " i = i - 10\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, code); - } - - [Test] - public void Subtract5() - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Run(int i)\r\n" + - " {\r\n" + - " i -= 5\r\n" + - " }\r\n" + - "}"; - - string expectedRuby = "class Foo\r\n" + - " def Run(i)\r\n" + - " i -= 5\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IntegerClassFieldConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IntegerClassFieldConversionTestFixture.cs deleted file mode 100644 index 64bd6480d9..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IntegerClassFieldConversionTestFixture.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the CSharpToRubyConverter class can convert a class with - /// a private field that's an integer. What should happen is that - /// all fields initialized in the class are moved to the start of the - /// initialize method. Note that this assumes there are no - /// overloaded constructors otherwise we will get duplicated code. - /// - [TestFixture] - public class IntegerClassFieldConversionTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " private int i = 0;\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @i = 0\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IntegerClassFieldInitializedInConstructorTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IntegerClassFieldInitializedInConstructorTestFixture.cs deleted file mode 100644 index 9d1eb7c938..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IntegerClassFieldInitializedInConstructorTestFixture.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the CSharpToRubyConverter correctly converts the class - /// constructor when a value is assigned to one of its fields. - /// - [TestFixture] - public class IntegerClassFieldInitializedInConstructorTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " private int i;\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " i = 0;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @i = 0\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IntegerClassFieldWithConstructorTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IntegerClassFieldWithConstructorTestFixture.cs deleted file mode 100644 index ae5e7811b2..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IntegerClassFieldWithConstructorTestFixture.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the CSharpToRubyConverter class does not add - /// an extra constructor method to hold the statements to - /// initialize the converted class's fields. - /// - [TestFixture] - public class IntegerClassFieldWithConstructorTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " private int i = 0;\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " int j = 0;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @i = 0\r\n" + - " j = 0\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IntegerMethodParameterTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IntegerMethodParameterTestFixture.cs deleted file mode 100644 index 513bf39aec..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/IntegerMethodParameterTestFixture.cs +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that a method call is converted correctly. - /// - [TestFixture] - public class IntegerMethodParameterTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " public void Print()\r\n" + - " {\r\n" + - " int i = 0;\r\n" + - " PrintInt(i);\r\n" + - " }\r\n" + - "}"; - - [Test] - public void GeneratedRubySourceCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def Print()\r\n" + - " i = 0\r\n" + - " self.PrintInt(i)\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/LocalVariableAssignedInConstructorTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/LocalVariableAssignedInConstructorTestFixture.cs deleted file mode 100644 index 81825997b3..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/LocalVariableAssignedInConstructorTestFixture.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the CSharpToRubyConverter correctly converts a local - /// variable in the constructor. - /// - [TestFixture] - public class LocalVariableAssignedInConstructorTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " int i = 0;\r\n" + - " int i = 2;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " i = 0\r\n" + - " i = 2\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/LocalVariableDeclarationInIfStatementTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/LocalVariableDeclarationInIfStatementTestFixture.cs deleted file mode 100644 index aa6ad39e7c..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/LocalVariableDeclarationInIfStatementTestFixture.cs +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the conversion of an if-else statement where the - /// if and else block have a local variable defined. - /// - [TestFixture] - public class LocalVariableDeclarationInIfStatementTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " int i = 0;\r\n" + - " public int GetCount()\r\n" + - " {" + - " if (i == 0) {\r\n" + - " int j = 10;\r\n" + - " return j;\r\n" + - " } else {\r\n" + - " iint j = 4;\r\n" + - " return j;\r\n" + - " }\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @i = 0\r\n" + - " end\r\n" + - "\r\n" + - " def GetCount()\r\n" + - " if @i == 0 then\r\n" + - " j = 10\r\n" + - " return j\r\n" + - " else\r\n" + - " j = 4\r\n" + - " return j\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/LocalVariableDefinitionsOnSameLineTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/LocalVariableDefinitionsOnSameLineTests.cs deleted file mode 100644 index 6824583c04..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/LocalVariableDefinitionsOnSameLineTests.cs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class LocalVariableDefinitionsOnSameLineTests - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " int i = 0, i = 2;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " i = 0\r\n" + - " i = 2\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - - string vnetClassWithTwoArrayLocalVariablesOnSameLine = - "class Foo\r\n" + - " Public Sub New()\r\n" + - " Dim i(10), j(20) as integer\r\n" + - " End Sub\r\n" + - "end class"; - - [Test] - public void ConvertVBNetClassWithTwoArrayVariablesOnSameLine() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.VBNet); - converter.IndentString = " "; - string ruby = converter.Convert(vnetClassWithTwoArrayLocalVariablesOnSameLine); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " i = Array.CreateInstance(System::Int32, 10)\r\n" + - " j = Array.CreateInstance(System::Int32, 20)\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/LocalVariableNotInitializedTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/LocalVariableNotInitializedTestFixture.cs deleted file mode 100644 index 7ca960fed4..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/LocalVariableNotInitializedTestFixture.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class LocalVariableNotInitializedTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " public int GetCount()\r\n" + - " {\r\n" + - " int i;\r\n" + - " return 10;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def GetCount()\r\n" + - " return 10\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MethodCallInConstructorTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MethodCallInConstructorTestFixture.cs deleted file mode 100644 index 3da91f66e5..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MethodCallInConstructorTestFixture.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Was causing a null reference exception in the convertor's IsStatic method since the method - /// being passed as a parameter is null. - /// - [TestFixture] - public class MethodCallInConstructorTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " Init();\r\n" + - " }\r\n" + - "}"; - - [Test] - public void GeneratedRubySourceCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " self.Init()\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MethodParameterConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MethodParameterConversionTestFixture.cs deleted file mode 100644 index 8b5a2c94d4..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MethodParameterConversionTestFixture.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that method parameters are converted into Ruby - /// correctly. - /// - [TestFixture] - public class MethodParameterConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public int Run(int i)\r\n" + - " {\r\n" + - " return i;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - string expectedCode = "class Foo\r\n" + - " def Run(i)\r\n" + - " return i\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedCode, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MethodReturnValueConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MethodReturnValueConversionTestFixture.cs deleted file mode 100644 index 16576067c1..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MethodReturnValueConversionTestFixture.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the CSharpToRubyConverter class can convert a method that - /// returns an integer. - /// - [TestFixture] - public class MethodReturnValueConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public int Run()\r\n" + - " {\r\n" + - " return 10;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = "class Foo\r\n" + - " def Run()\r\n" + - " return 10\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MethodWithBodyConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MethodWithBodyConversionTestFixture.cs deleted file mode 100644 index 14988e58f1..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MethodWithBodyConversionTestFixture.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the CSharpToRubyConverter class can convert a method with - /// simple integer assignment in the body. - /// - [TestFixture] - public class MethodWithBodyConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Run()\r\n" + - " {\r\n" + - " int i = 0;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = "class Foo\r\n" + - " def Run()\r\n" + - " i = 0\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ModulusOperatorConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ModulusOperatorConversionTestFixture.cs deleted file mode 100644 index 42e5c62d74..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ModulusOperatorConversionTestFixture.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class ModulusOperatorConversionTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " public void Convert(int a)\r\n" + - " {\r\n" + - " a %= 5;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def Convert(a)\r\n" + - " a %= 5\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MultiLineCommentConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MultiLineCommentConversionTestFixture.cs deleted file mode 100644 index d0aa268182..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MultiLineCommentConversionTestFixture.cs +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class MultiLineCommentConversionTestFixture - { - string csharp = "/* \r\n" + - "Class Foo\r\n" + - "*/ \r\n" + - "public class Foo\r\n" + - "{\r\n" + - " /* Initialize. */\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " /* Initialize j.\r\n" + - " set to zero */\r\n" + - " j = 0; /* Set to zero */\r\n" + - " /* test */\r\n" + - " if (j == 0) j = 2;\r\n" + - " }\r\n" + - "}"; - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "# \r\n" + - "# Class Foo\r\n" + - "# \r\n" + - "class Foo\r\n" + - " # Initialize.\r\n"+ - " def initialize()\r\n" + - " # Initialize j.\r\n" + - " # set to zero\r\n" + - " j = 0 # Set to zero\r\n" + - " # test\r\n" + - " if j == 0 then\r\n" + - " j = 2\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MultipleFieldsOnSameLineTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MultipleFieldsOnSameLineTests.cs deleted file mode 100644 index 2fc58ab4c9..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/MultipleFieldsOnSameLineTests.cs +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class MultipleFieldsOnSameLineTests - { - string csharpClassWithFieldsThatHaveInitialValues = - "class Foo\r\n" + - "{\r\n" + - " int i = 0, j = 1;\r\n" + - "}"; - - [Test] - public void ConvertCSharpClassWithFieldsThatHaveInitialValues() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string ruby = converter.Convert(csharpClassWithFieldsThatHaveInitialValues); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @i = 0\r\n" + - " @j = 1\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, ruby); - } - - string csharpClassWithTwoFieldsWhereFirstDoesNotHaveInitialValue = - "class Foo\r\n" + - "{\r\n" + - " int i, j = 1;\r\n" + - "}"; - - [Test] - public void ConvertCSharpClassWithFieldsWhereFirstFieldDoesNotHaveInitialValue() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string ruby = converter.Convert(csharpClassWithTwoFieldsWhereFirstDoesNotHaveInitialValue); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @j = 1\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, ruby); - } - - string csharpClassWithTwoFieldsInitializedInMethod = - "class Foo\r\n" + - "{\r\n" + - " int i = 0;\r\n" + - " int j, k;\r\n" + - "\r\n" + - " public void Test()\r\n" + - " {\r\n" + - " j = 1;\r\n" + - " k = 3;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertCSharpClassWithTwoFieldsInitializedInMethod() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string ruby = converter.Convert(csharpClassWithTwoFieldsInitializedInMethod); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @i = 0\r\n" + - " end\r\n" + - "\r\n" + - " def Test()\r\n" + - " @j = 1\r\n" + - " @k = 3\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, ruby); - } - - string vnetClassWithTwoArrayFieldsOnSameLine = - "class Foo\r\n" + - " Private i(10), j(20) as integer\r\n" + - "end class"; - - [Test] - public void ConvertVBNetClassWithTwoArrayFieldsOnSameLine() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.VBNet); - converter.IndentString = " "; - string ruby = converter.Convert(vnetClassWithTwoArrayFieldsOnSameLine); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @i = Array.CreateInstance(System::Int32, 10)\r\n" + - " @j = Array.CreateInstance(System::Int32, 20)\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/NestedClassConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/NestedClassConversionTestFixture.cs deleted file mode 100644 index b9bb323ce8..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/NestedClassConversionTestFixture.cs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that the indentation after the nested class is correct for any outer class methods. - /// - [TestFixture] - public class NestedClassConversionTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " public void Run()\r\n" + - " {\r\n" + - " }\r\n" + - "\r\n" + - " class Bar\r\n" + - " {\r\n" + - " public void Test()\r\n" + - " {\r\n" + - " }\r\n" + - " }\r\n" + - "\r\n" + - " public void AnotherRun()\r\n" + - " {\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def Run()\r\n" + - " end\r\n" + - "\r\n" + - " class Bar\r\n" + - " def Test()\r\n" + - " end\r\n" + - " end\r\n" + - "\r\n" + - " def AnotherRun()\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, ruby, ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/NestedIfStatementConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/NestedIfStatementConversionTestFixture.cs deleted file mode 100644 index c1ddbfb7b6..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/NestedIfStatementConversionTestFixture.cs +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the conversion of an if-else statement where the - /// if and else blocks each have nested if-else statements. - /// - [TestFixture] - public class NestedIfStatementConversionTestFixture - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " int i = 0;\r\n" + - " public int GetCount()\r\n" + - " {" + - " if (i == 0) {\r\n" + - " if (i == 0) {\r\n" + - " i = 10;\r\n" + - " return 10;\r\n" + - " } else {\r\n" + - " i = 4;\r\n" + - " return 4;\r\n" + - " }\r\n" + - " } else {\r\n" + - " if (i == 0) {\r\n" + - " i = 10;\r\n" + - " return 10;\r\n" + - " } else {\r\n" + - " i = 4;\r\n" + - " return 4;\r\n" + - " }\r\n" + - " }\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @i = 0\r\n" + - " end\r\n" + - "\r\n" + - " def GetCount()\r\n" + - " if @i == 0 then\r\n" + - " if @i == 0 then\r\n" + - " @i = 10\r\n" + - " return 10\r\n" + - " else\r\n" + - " @i = 4\r\n" + - " return 4\r\n" + - " end\r\n" + - " else\r\n" + - " if @i == 0 then\r\n" + - " @i = 10\r\n" + - " return 10\r\n" + - " else\r\n" + - " @i = 4\r\n" + - " return 4\r\n" + - " end\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/NullConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/NullConversionTestFixture.cs deleted file mode 100644 index 92678dde55..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/NullConversionTestFixture.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that null is converted to None in Ruby. - /// - [TestFixture] - public class NullConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public int Run(string a)\r\n" + - " {\r\n" + - " if (a == null) {\r\n" + - " return 4;\r\n" + - " }\r\n" + - " return 2;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = "class Foo\r\n" + - " def Run(a)\r\n" + - " if a == nil then\r\n" + - " return 4\r\n" + - " end\r\n" + - " return 2\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/NullParseInfoCompilationUnitWhenConvertingEventHandlerTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/NullParseInfoCompilationUnitWhenConvertingEventHandlerTestFixture.cs deleted file mode 100644 index 9c92bf49d0..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/NullParseInfoCompilationUnitWhenConvertingEventHandlerTestFixture.cs +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class NullParseInfoCompilationUnitWhenConvertingEventHandlerTestFixture - { - ParseInformation parseInfo; - - string csharp = "class Foo\r\n" + - "{\r\n" + - " public Foo()\r\n" + - " {" + - " button = new Button();\r\n" + - " button.Click += ButtonClick;\r\n" + - " button.MouseDown += self.OnMouseDown;\r\n" + - " }\r\n" + - "}"; - - [SetUp] - public void Init() - { - parseInfo = new ParseInformation(new DefaultCompilationUnit(new DefaultProjectContent())); - } - - [Test] - public void ConvertedRubyCode() - { - string expectedCode = - "class Foo\r\n" + - " def initialize()\r\n" + - " button = Button.new()\r\n" + - " button.Click { self.ButtonClick() }\r\n" + - " button.MouseDown { self.OnMouseDown() }\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp, parseInfo); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedCode, code, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ObjectCreationTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ObjectCreationTestFixture.cs deleted file mode 100644 index 08cf00cdfb..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ObjectCreationTestFixture.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that C# code that creates a new XmlDocument object - /// is converted to Ruby correctly. - /// - [TestFixture] - public class ObjectCreationTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " XmlDocument doc = new XmlDocument();\r\n" + - " doc.LoadXml(\"\");\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " doc = XmlDocument.new()\r\n" + - " doc.LoadXml(\"\")\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ObjectInitializerConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ObjectInitializerConversionTestFixture.cs deleted file mode 100644 index 42f3dfe5ea..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ObjectInitializerConversionTestFixture.cs +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Object initializers should be converted to calling the appropriate property setters, but - /// this means a single line statement would need to be replaced with multiple statements. - /// - [TestFixture] - public class ObjectInitializerConversionTestFixture - { - string csharp = "class Class1\r\n" + - "{\r\n" + - " string name = String.Empty;\r\n" + - " string lastName = String.Empty;\r\n" + - "\r\n" + - " public string Name {\r\n" + - " get { return name; }\r\n" + - " set { name = value; }\r\n" + - " }\r\n" + - "\r\n" + - " public string LastName {\r\n" + - " get { return lastName; }\r\n" + - " set { lastName = value; }\r\n" + - " }\r\n" + - "\r\n" + - " public Class1 Clone()\r\n" + - " {\r\n" + - " return new Class1 { Name = \"First\", LastName = \"Last\" };\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Class1\r\n" + - " def initialize()\r\n" + - " @name = String.Empty\r\n" + - " @lastName = String.Empty\r\n" + - " end\r\n" + - "\r\n" + - " def Name\r\n" + - " return @name\r\n" + - " end\r\n" + - "\r\n" + - " def Name=(value)\r\n" + - " @name = value\r\n" + - " end\r\n" + - "\r\n" + - " def LastName\r\n" + - " return @lastName\r\n" + - " end\r\n" + - "\r\n" + - " def LastName=(value)\r\n" + - " @lastName = value\r\n" + - " end\r\n" + - "\r\n" + - " def Clone()\r\n" + - " return Class1.new(Name = \"First\", LastName = \"Last\")\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ObjectReferenceEqualsConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ObjectReferenceEqualsConversionTestFixture.cs deleted file mode 100644 index 582e39436d..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ObjectReferenceEqualsConversionTestFixture.cs +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class ObjectReferenceEqualsConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public bool IsEqual(object o)\r\n" + - " {\r\n" + - " return object.ReferenceEquals(o, null);\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def IsEqual(o)\r\n" + - " return System::Object.ReferenceEquals(o, nil)\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyConversionTestFixture.cs deleted file mode 100644 index 3a59e492c1..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyConversionTestFixture.cs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the CSharpToRubyConverter class can convert a C# property to - /// two get and set methods in Ruby. - /// - [TestFixture] - public class PropertyConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " int count = 0;\r\n" + - " public int Count\r\n" + - " {\r\n" + - " get { return count; }\r\n" + - " set { count = value; }\r\n" + - " }\r\n" + - "\r\n" + - " public void Run()\r\n" + - " {\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @count = 0\r\n" + - " end\r\n" + - "\r\n" + - " def Count\r\n" + - " return @count\r\n" + - " end\r\n" + - "\r\n" + - " def Count=(value)\r\n" + - " @count = value\r\n" + - " end\r\n" + - "\r\n" + - " def Run()\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyReferenceConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyReferenceConversionTestFixture.cs deleted file mode 100644 index 1ce2c8ce0a..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyReferenceConversionTestFixture.cs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class PropertyReferenceConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " int count = 0;\r\n" + - " public int Count {\r\n" + - " get {\r\n" + - " return count;\r\n" + - " }\r\n" + - " }\r\n" + - "\r\n" + - " public void Increment()\r\n" + - " {\r\n" + - " Count++;\r\n" + - " }\r\n" + - "\r\n" + - " public void SetCount(int Count)\r\n" + - " {\r\n" + - " this.Count = Count;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @count = 0\r\n" + - " end\r\n" + - "\r\n" + - " def Count\r\n" + - " return @count\r\n" + - " end\r\n" + - "\r\n" + - " def Increment()\r\n" + - " self.Count += 1\r\n" + - " end\r\n" + - "\r\n" + - " def SetCount(Count)\r\n" + - " self.Count = Count\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyWithGetSetStatementsTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyWithGetSetStatementsTestFixture.cs deleted file mode 100644 index efb18c2c8c..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyWithGetSetStatementsTestFixture.cs +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests the CSharpToRubyConverter class can convert a C# property to - /// two get and set methods in Ruby. - /// - [TestFixture] - public class PropertyWithGetSetStatementsTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " int count = 0;\r\n" + - " int i = 0;\r\n" + - " public int Count\r\n" + - " {\r\n" + - " get {\r\n" + - " if (i == 0) {\r\n" + - " return 10;\r\n" + - " } else {\r\n" + - " return count;\r\n" + - " }\r\n" + - " }\r\n" + - " set {\r\n" + - " if (i == 1) {\r\n" + - " count = value;\r\n" + - " } else {\r\n" + - " count = value + 5;\r\n" + - " }\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @count = 0\r\n" + - " @i = 0\r\n" + - " end\r\n" + - "\r\n" + - " def Count\r\n" + - " if @i == 0 then\r\n" + - " return 10\r\n" + - " else\r\n" + - " return @count\r\n" + - " end\r\n" + - " end\r\n" + - "\r\n" + - " def Count=(value)\r\n" + - " if @i == 1 then\r\n" + - " @count = value\r\n" + - " else\r\n" + - " @count = value + 5\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyWithGetterTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyWithGetterTestFixture.cs deleted file mode 100644 index e5b79c9eb5..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyWithGetterTestFixture.cs +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class PropertyWithGetterTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " int count = 0;\r\n" + - " int i = 0;\r\n" + - " public int Count {\r\n" + - " get {\r\n" + - " if (i == 0) {\r\n" + - " return 10;\r\n" + - " } else {\r\n" + - " return count;\r\n" + - " }\r\n" + - " }\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @count = 0\r\n" + - " @i = 0\r\n" + - " end\r\n" + - "\r\n" + - " def Count\r\n" + - " if @i == 0 then\r\n" + - " return 10\r\n" + - " else\r\n" + - " return @count\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyWithSetterTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyWithSetterTestFixture.cs deleted file mode 100644 index b999556c25..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/PropertyWithSetterTestFixture.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class PropertyWithSetterTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " int count = 0;\r\n" + - " int i = 0;\r\n" + - " public int Count {\r\n" + - " set {\r\n" + - " count = value;\r\n" + - " }\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " @count = 0\r\n" + - " @i = 0\r\n" + - " end\r\n" + - "\r\n" + - " def Count=(value)\r\n" + - " @count = value\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/RemoveHandlerConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/RemoveHandlerConversionTestFixture.cs deleted file mode 100644 index 15c6a7cb88..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/RemoveHandlerConversionTestFixture.cs +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that removing a method from an event handler is converted - /// from C# to Ruby correctly. - /// - [TestFixture] - public class RemoveHandlerConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public Foo()\r\n" + - " {" + - " button = new Button();\r\n" + - " button.Click -= ButtonClick;\r\n" + - " }\r\n" + - "\r\n" + - " void ButtonClick(object sender, EventArgs e)\r\n" + - " {\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - string expectedCode = - "class Foo\r\n" + - " def initialize()\r\n" + - " button = Button.new()\r\n" + - " button.Click.remove(OnButtonClick)\r\n" + - " end\r\n" + - "\r\n" + - " def ButtonClick(sender, e)\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedCode, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/SingleClassMethodConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/SingleClassMethodConversionTestFixture.cs deleted file mode 100644 index 1a23d4ec97..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/SingleClassMethodConversionTestFixture.cs +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests a single class method is converted. - /// - [TestFixture] - public class SingleClassMethodConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Init()\r\n" + - " {\r\n" + - " }\r\n" + - "}"; - - [Test] - public void GeneratedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = "class Foo\r\n" + - " def Init()\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/SingleLineCommentConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/SingleLineCommentConversionTestFixture.cs deleted file mode 100644 index 420a5242c4..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/SingleLineCommentConversionTestFixture.cs +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class SingleLineCommentConversionTestFixture - { - string csharp = "// \r\n" + - "// Class Foo\r\n" + - "// \r\n" + - "public class Foo\r\n" + - "{\r\n" + - " // Initialize.\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " // Initialize j.\r\n" + - " j = 0; // Set to zero\r\n" + - " // test\r\n" + - " if (j == 0) j = 2;\r\n" + - " }\r\n" + - "}"; - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "# \r\n" + - "# Class Foo\r\n" + - "# \r\n" + - "class Foo\r\n" + - " # Initialize.\r\n"+ - " def initialize()\r\n" + - " # Initialize j.\r\n" + - " j = 0 # Set to zero\r\n" + - " # test\r\n" + - " if j == 0 then\r\n" + - " j = 2\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/StaticClassReferenceTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/StaticClassReferenceTestFixture.cs deleted file mode 100644 index e0caa9978a..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/StaticClassReferenceTestFixture.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that C# code such as "System.Console.WriteLine("Test");" - /// is converted to Ruby code correctly. - /// - [TestFixture] - public class StaticClassReferenceTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " System.Console.WriteLine(\"Test\");\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def initialize()\r\n" + - " System.Console.WriteLine(\"Test\")\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/StaticMethodConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/StaticMethodConversionTestFixture.cs deleted file mode 100644 index b00c6b4f85..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/StaticMethodConversionTestFixture.cs +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class StaticMethodConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " static void Main(string[] args)\r\n" + - " {\r\n" + - " Stop();\r\n" + - " }\r\n" + - "\r\n" + - " static void Stop()\r\n" + - " {\r\n" + - " }\r\n" + - "\r\n" + - " public void Run()\r\n" + - " {\r\n" + - " }\r\n" + - "}"; - - string Ruby; - NRefactoryToRubyConverter converter; - - [SetUp] - public void Init() - { - converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - Ruby = converter.Convert(csharp); - } - - [Test] - public void ConvertedRubyCode() - { - string expectedRuby = - "class Foo\r\n" + - " def Foo.Main(args)\r\n" + - " Foo.Stop()\r\n" + - " end\r\n" + - "\r\n" + - " def Foo.Stop()\r\n" + - " end\r\n" + - "\r\n" + - " def Run()\r\n" + - " end\r\n" + - "end"; - Assert.AreEqual(expectedRuby, Ruby, Ruby); - } - - [Test] - public void EntryPointMethodFound() - { - Assert.AreEqual(1, converter.EntryPointMethods.Count); - } - - [Test] - public void MainEntryPointMethodNameIsMain() - { - Assert.AreEqual("Main", converter.EntryPointMethods[0].Name); - } - - [Test] - public void GenerateCodeToCallMainMethod() - { - Assert.AreEqual("Foo.Main(nil)", converter.GenerateMainMethodCall(converter.EntryPointMethods[0])); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/SwitchStatementConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/SwitchStatementConversionTestFixture.cs deleted file mode 100644 index 21bad37fa5..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/SwitchStatementConversionTestFixture.cs +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class SwitchStatementConversionTestFixture - { - [Test] - public void SwitchStatement() - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " public int Run(int i)\r\n" + - " {\r\n" + - " switch (i) {\r\n" + - " case 7:\r\n" + - " i = 4;\r\n" + - " break;\r\n" + - " case 10:\r\n" + - " return 0;\r\n" + - " case 9:\r\n" + - " return 2;\r\n" + - " case 8:\r\n" + - " break;\r\n" + - " default:\r\n" + - " return -1;\r\n" + - " }\r\n" + - " return i;\r\n" + - " }\r\n" + - "}"; - - string expectedRuby = - "class Foo\r\n" + - " def Run(i)\r\n" + - " case i\r\n" + - " when 7\r\n" + - " i = 4\r\n" + - " when 10\r\n" + - " return 0\r\n" + - " when 9\r\n" + - " return 2\r\n" + - " when 8\r\n" + - " else\r\n" + - " return -1\r\n" + - " end\r\n" + - " return i\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, code, code); - } - - [Test] - public void CaseFallThrough() - { - string csharp = - "class Foo\r\n" + - "{\r\n" + - " public int Run(int i)\r\n" + - " {\r\n" + - " switch (i) {\r\n" + - " case 10:\r\n" + - " case 11:\r\n" + - " return 0;\r\n" + - " case 9:\r\n" + - " return 2;\r\n" + - " default:\r\n" + - " return -1;\r\n" + - " }\r\n" + - " }\r\n" + - "}"; - - string expectedRuby = - "class Foo\r\n" + - " def Run(i)\r\n" + - " case i\r\n" + - " when 10, 11\r\n" + - " return 0\r\n" + - " when 9\r\n" + - " return 2\r\n" + - " else\r\n" + - " return -1\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/TernaryOperatorConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/TernaryOperatorConversionTestFixture.cs deleted file mode 100644 index 9b26bab07a..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/TernaryOperatorConversionTestFixture.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class TernaryOperatorConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public string TestMe(bool test)\r\n" + - " {\r\n" + - " string a = test ? \"Ape\" : \"Monkey\";\r\n" + - " return a;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = "class Foo\r\n" + - " def TestMe(test)\r\n" + - " a = test ? \"Ape\" : \"Monkey\"\r\n" + - " return a\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ThrowExceptionConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ThrowExceptionConversionTestFixture.cs deleted file mode 100644 index 92f12c71e7..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/ThrowExceptionConversionTestFixture.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that a throw statement is converted to a - /// raise keyword in Ruby when converting - /// from C#. - /// - [TestFixture] - public class ThrowExceptionConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public string Run()\r\n" + - " {" + - " throw new XmlException();\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - string expectedCode = "class Foo\r\n" + - " def Run()\r\n" + - " raise XmlException.new()\r\n" + - " end\r\n" + - "end"; - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedCode, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/TryCatchFinallyConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/TryCatchFinallyConversionTestFixture.cs deleted file mode 100644 index fa0994a9b7..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/TryCatchFinallyConversionTestFixture.cs +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Converts a C# try-catch-finally to Ruby. - /// - [TestFixture] - public class TryCatchFinallyConversionTestFixture - { - string csharp = "class Loader\r\n" + - "{\r\n" + - " public void load(string xml)\r\n" + - " {\r\n" + - " try {\r\n" + - " XmlDocument doc = new XmlDocument();\r\n" + - " doc.LoadXml(xml);\r\n" + - " } catch (XmlException ex) {\r\n" + - " Console.WriteLine(ex.ToString());\r\n" + - " } finally {\r\n" + - " Console.WriteLine(xml);\r\n" + - " }\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedCode() - { - string expectedRuby = - "class Loader\r\n" + - " def load(xml)\r\n" + - " begin\r\n" + - " doc = XmlDocument.new()\r\n" + - " doc.LoadXml(xml)\r\n" + - " rescue XmlException => ex\r\n" + - " Console.WriteLine(ex.ToString())\r\n" + - " ensure\r\n" + - " Console.WriteLine(xml)\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/TypeofConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/TypeofConversionTestFixture.cs deleted file mode 100644 index a594e773ed..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/TypeofConversionTestFixture.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class TypeofConversionTestFixture - { - string typeofIntCode = "class Foo\r\n" + - "{\r\n" + - " public string ToString()\r\n" + - " {\r\n" + - " typeof(int).FullName;\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedTypeOfIntegerCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(typeofIntCode); - string expectedRuby = - "require \"mscorlib\"\r\n" + - "\r\n" + - "class Foo\r\n" + - " def ToString()\r\n" + - " System::Int32.to_clr_type.FullName\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/UnaryOperatorConversionTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/UnaryOperatorConversionTests.cs deleted file mode 100644 index 5d0f9075ae..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/UnaryOperatorConversionTests.cs +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class UnaryOperatorConversionTests - { - [Test] - public void MinusOne() - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Run(int i)\r\n" + - " {\r\n" + - " i = -1;\r\n" + - " }\r\n" + - "}"; - - string expectedRuby = "class Foo\r\n" + - "\tdef Run(i)\r\n" + - "\t\ti = -1\r\n" + - "\tend\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, code); - } - - [Test] - public void PlusOne() - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Run(int i)\r\n" + - " {\r\n" + - " i = +1;\r\n" + - " }\r\n" + - "}"; - - string expectedRuby = "class Foo\r\n" + - "\tdef Run(i)\r\n" + - "\t\ti = +1\r\n" + - "\tend\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, code); - } - - [Test] - public void NotOperator() - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Run(bool i)\r\n" + - " {\r\n" + - " j = !i;\r\n" + - " }\r\n" + - "}"; - - string expectedRuby = "class Foo\r\n" + - "\tdef Run(i)\r\n" + - "\t\tj = not i\r\n" + - "\tend\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, code); - } - - [Test] - public void BitwiseNotOperator() - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void Run(bool i)\r\n" + - " {\r\n" + - " j = ~i;\r\n" + - " }\r\n" + - "}"; - - string expectedRuby = "class Foo\r\n" + - "\tdef Run(i)\r\n" + - "\t\tj = ~i\r\n" + - "\tend\r\n" + - "end"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - string code = converter.Convert(csharp); - - Assert.AreEqual(expectedRuby, code); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/UsingStatementConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/UsingStatementConversionTestFixture.cs deleted file mode 100644 index 43f8c89a12..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/UsingStatementConversionTestFixture.cs +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class UsingStatementConversionTestFixture - { - string csharp = "using System\r\n" + - "class Foo\r\n" + - "{\r\n" + - "}"; - - [Test] - public void GeneratedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - string Ruby = converter.Convert(csharp); - string expectedRuby = "require \"mscorlib\"\r\n" + - "require \"System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\"\r\n" + - "\r\n" + - "class Foo\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - - [Test] - public void MultipleUsingStatements() - { - string csharp = "using System\r\n" + - "using System.Drawing\r\n" + - "class Foo\r\n" + - "{\r\n" + - "}"; - - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - string Ruby = converter.Convert(csharp); - string expectedRuby = "require \"mscorlib\"\r\n" + - "require \"System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\"\r\n" + - "require \"System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\"\r\n" + - "\r\n" + - "class Foo\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/VBClassConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/VBClassConversionTestFixture.cs deleted file mode 100644 index aa9cedcdef..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/VBClassConversionTestFixture.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - /// - /// Tests that a VB.NET class is converted to Ruby successfully. - /// - [TestFixture] - public class VBClassConversionTestFixture - { - string vb = "Namespace DefaultNamespace\r\n" + - " Public Class Class1\r\n" + - " End Class\r\n" + - "End Namespace"; - - [Test] - public void GeneratedRubySourceCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.VBNet); - converter.IndentString = " "; - string Ruby = converter.Convert(vb); - string expectedRuby = - "module DefaultNamespace\r\n" + - " class Class1\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/VBExitConversionTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/VBExitConversionTests.cs deleted file mode 100644 index 81bb04ca7f..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/VBExitConversionTests.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class VBExitConversionTests - { - string vb = - "Public Class Class1\r\n" + - " Public Sub Test\r\n" + - " While True\r\n" + - " Exit While\r\n" + - " End While\r\n" + - " End Sub\r\n" + - "End Class\r\n"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.VBNet); - converter.IndentString = " "; - string ruby = converter.Convert(vb); - string expectedRuby = - "class Class1\r\n" + - " def Test()\r\n" + - " while true\r\n" + - " break\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/VBStringConcatTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/VBStringConcatTestFixture.cs deleted file mode 100644 index 27e3d78658..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/VBStringConcatTestFixture.cs +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class VBStringConcatTestFixture - { - string vb = "Namespace DefaultNamespace\r\n" + - " Public Class Class1\r\n" + - " Public Sub Test\r\n" + - " Dim a as String\r\n" + - " a = \"test\" & \" this\"\r\n" + - " End Sub\r\n" + - " End Class\r\n" + - "End Namespace"; - - [Test] - public void GeneratedRubySourceCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.VBNet); - converter.IndentString = " "; - string Ruby = converter.Convert(vb); - string expectedRuby = - "module DefaultNamespace\r\n" + - " class Class1\r\n" + - " def Test()\r\n" + - " a = \"test\" + \" this\"\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/WhileLoopConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/WhileLoopConversionTestFixture.cs deleted file mode 100644 index ea7fdc63e1..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/WhileLoopConversionTestFixture.cs +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class WhileLoopConversionTestFixture - { - string csharp = "class Foo\r\n" + - "{\r\n" + - " public void CountDown()\r\n" + - " {\r\n" + - " int i = 10;\r\n" + - " while (i > 0) {\r\n" + - " i--;\r\n" + - " }\r\n" + - " }\r\n" + - "}"; - - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "class Foo\r\n" + - " def CountDown()\r\n" + - " i = 10\r\n" + - " while i > 0\r\n" + - " i -= 1\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/XmlDocCommentConversionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/XmlDocCommentConversionTestFixture.cs deleted file mode 100644 index dfc99c2632..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Converter/XmlDocCommentConversionTestFixture.cs +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.NRefactory; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Converter -{ - [TestFixture] - public class XmlDocCommentConversionTestFixture - { - string csharp = "/// \r\n" + - "/// Class Foo\r\n" + - "/// \r\n" + - "public class Foo\r\n" + - "{\r\n" + - " /// \r\n" + - " /// Run\r\n" + - " /// \r\n" + - " public void Run()\r\n" + - " {\r\n" + - " }\r\n" + - "\r\n" + - " /// Stop \r\n" + - " public void Stop()\r\n" + - " {\r\n" + - " }\r\n" + - "\r\n" + - " /// Initialize.\r\n" + - " public Foo()\r\n" + - " {\r\n" + - " /// Initialize j.\r\n" + - " int j = 0; /// Set to zero\r\n" + - " /// test\r\n" + - " if (j == 0) j = 2;\r\n" + - " }\r\n" + - "}"; - [Test] - public void ConvertedRubyCode() - { - NRefactoryToRubyConverter converter = new NRefactoryToRubyConverter(SupportedLanguage.CSharp); - converter.IndentString = " "; - string Ruby = converter.Convert(csharp); - string expectedRuby = - "# \r\n" + - "# Class Foo\r\n" + - "# \r\n" + - "class Foo\r\n" + - " # \r\n" + - " # Run\r\n" + - " # \r\n" + - " def Run()\r\n" + - " end\r\n" + - "\r\n" + - " # Stop \r\n" + - " def Stop()\r\n" + - " end\r\n" + - "\r\n" + - " # Initialize.\r\n" + - " def initialize()\r\n" + - " # Initialize j.\r\n" + - " j = 0 # Set to zero\r\n" + - " # test\r\n" + - " if j == 0 then\r\n" + - " j = 2\r\n" + - " end\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedRuby, Ruby, Ruby); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/App.ico b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/App.ico deleted file mode 100644 index 3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/CallBeginInitOnLoadTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/CallBeginInitOnLoadTestFixture.cs deleted file mode 100644 index 003854f702..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/CallBeginInitOnLoadTestFixture.cs +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.Scripting; -using ICSharpCode.Scripting.Tests.Designer; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the control's BeginInit and EndInit methods are called. - /// - [TestFixture] - public class CallBeginInitOnLoadTestFixture : CallBeginInitOnLoadTestsBase - { - public override string Code { - get { - ComponentCreator.AddType("ICSharpCode.Scripting.Tests.Utils.SupportInitCustomControl", typeof(SupportInitCustomControl)); - - return - "class TestForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @control = ICSharpCode::Scripting::Tests::Utils::SupportInitCustomControl.new()\r\n" + - " @control.clr_member(System::ComponentModel::ISupportInitialize, :BeginInit).call()\r\n" + - " localVariable = ICSharpCode::Scripting::Tests::Utils::SupportInitCustomControl.new()\r\n" + - " localVariable.clr_member(System::ComponentModel::ISupportInitialize, :BeginInit).call()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # TestForm\r\n" + - " # \r\n" + - " self.AccessibleRole = System::Windows::Forms::AccessibleRole.None\r\n" + - " self.Controls.Add(@control)\r\n" + - " self.Name = \"TestForm\"\r\n" + - " @control.EndInit()\r\n" + - " localVariable.EndInit()\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - protected override IComponentWalker CreateComponentWalker(IComponentCreator componentCreator) - { - return RubyComponentWalkerHelper.CreateComponentWalker(componentCreator); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/ConvertCustomClassUsingTypeConverterTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/ConvertCustomClassUsingTypeConverterTestFixture.cs deleted file mode 100644 index 760a3b145d..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/ConvertCustomClassUsingTypeConverterTestFixture.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Converts a custom class that has a custom TypeConverter defined. - /// This type converter implements an InstanceDescriptor which is used to generate the - /// code to create an instance of the class. - /// - [TestFixture] - public class ConvertCustomClassUsingTypeConverterTestFixture - { - [Test] - public void ConvertCustomClass() - { - CustomClass customClass = new CustomClass("Test", "Category"); - string text = RubyPropertyValueAssignment.ToString(customClass); - string expectedText = "ICSharpCode::Scripting::Tests::Utils::CustomClass.new(\"Test\", \"Category\")"; - Assert.AreEqual(expectedText, text); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/CursorTypeResolutionTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/CursorTypeResolutionTestFixture.cs deleted file mode 100644 index cc78ef216f..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/CursorTypeResolutionTestFixture.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using IronRuby.Compiler.Ast; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the string "System.Windows.Forms.Cursors.AppStarting" can be resolved by the - /// RubyCodeDeserializer. - /// - [TestFixture] - public class CursorTypeResolutionTestFixture : DeserializeAssignmentTestFixtureBase - { - public override string GetRubyCode() - { - return "self.Cursors = System::Windows::Forms::Cursors.AppStarting"; - } - - [Test] - public void DeserializedObjectIsCursorsAppStarting() - { - Assert.AreEqual(Cursors.AppStarting, deserializedObject); - } - - [Test] - public void CursorsTypeResolved() - { - Assert.AreEqual("System.Windows.Forms.Cursors", base.componentCreator.LastTypeNameResolved); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeAssignmentTestFixtureBase.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeAssignmentTestFixtureBase.cs deleted file mode 100644 index 675c1da62e..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeAssignmentTestFixtureBase.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using IronRuby.Compiler.Ast; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Base class for all tests of the RubyCodeDeserialize when deserializing an - /// assignment. - /// - public abstract class DeserializeAssignmentTestFixtureBase - { - protected Expression rhsAssignmentExpression; - protected object deserializedObject; - protected MockDesignerLoaderHost mockDesignerLoaderHost; - protected MockTypeResolutionService typeResolutionService; - protected MockComponentCreator componentCreator; - - [TestFixtureSetUp] - public void SetUpFixture() - { - componentCreator = new MockComponentCreator(); - - SimpleAssignmentExpression assignment = RubyParserHelper.GetSimpleAssignmentExpression(GetRubyCode()); - rhsAssignmentExpression = assignment.Right; - - mockDesignerLoaderHost = new MockDesignerLoaderHost(); - typeResolutionService = mockDesignerLoaderHost.TypeResolutionService; - RubyCodeDeserializer deserializer = new RubyCodeDeserializer(componentCreator); - deserializedObject = deserializer.Deserialize(rhsAssignmentExpression); - } - - public abstract string GetRubyCode(); - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeColorFromArgbTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeColorFromArgbTestFixture.cs deleted file mode 100644 index 92a8a11815..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeColorFromArgbTestFixture.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using IronRuby.Compiler.Ast; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the string "System::Drawing::Color.FromArgb(0, 192, 10)" can be converted to an object by the - /// RubyCodeDeserializer. - /// - [TestFixture] - public class DeserializeColorFromArgbTestFixture : DeserializeAssignmentTestFixtureBase - { - public override string GetRubyCode() - { - return "self.BackColor = System::Drawing::Color.FromArgb(0, 192, 10)"; - } - - [Test] - public void DeserializedObjectIsExpectedCustomColor() - { - Color customColor = Color.FromArgb(0, 192, 10); - Assert.AreEqual(customColor, deserializedObject); - } - - [Test] - public void ColorTypeResolved() - { - Assert.AreEqual("System.Drawing.Color", componentCreator.LastTypeNameResolved); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeComponentAssignmentTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeComponentAssignmentTestFixture.cs deleted file mode 100644 index 4638672afa..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeComponentAssignmentTestFixture.cs +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using IronRuby.Compiler.Ast; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the string "@menuItem1" is converted to the matching component. - /// - [TestFixture] - public class DeserializeComponentAssignmentTestFixture : DeserializeAssignmentTestFixtureBase - { - Button button; - - public override string GetRubyCode() - { - button = (Button)base.componentCreator.CreateInstance(typeof(Button), new object[0], "button1", false); - return "self.AcceptButton = @button1"; - } - - [Test] - public void DeserializedObjectIsButton() - { - Assert.AreSame(button, deserializedObject); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeConstructorStringArrayTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeConstructorStringArrayTestFixture.cs deleted file mode 100644 index 9b5e50e228..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeConstructorStringArrayTestFixture.cs +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using IronRuby.Compiler.Ast; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the constructor arguments are returned when the first argument is - /// an array. - /// - [TestFixture] - public class DeserializeConstructorStringArrayTestFixture - { - string code = "System::Windows::Forms::ListViewItem(System::Array[System::String].new(\r\n" + - " [\"a\",\r\n" + - " \"sa\",\r\n" + - " \"sa2\"]))\r\n"; - - List args; - - [TestFixtureSetUp] - public void SetUpFixture() - { - MockComponentCreator componentCreator = new MockComponentCreator(); - MethodCall callExpression = RubyParserHelper.GetMethodCall(code); - RubyCodeDeserializer deserializer = new RubyCodeDeserializer(componentCreator); - args = deserializer.GetArguments(callExpression); - } - - [Test] - public void OneArgument() - { - Assert.AreEqual(1, args.Count); - } - - [Test] - public void ArgumentIsStringArray() - { - string[] array = new string[0]; - Assert.IsInstanceOf(array.GetType(), args[0]); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeDateTimeArrayTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeDateTimeArrayTestFixture.cs deleted file mode 100644 index 025e42c878..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeDateTimeArrayTestFixture.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using IronRuby.Compiler.Ast; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class DeserializeDateTimeArrayTestFixture : DeserializeAssignmentTestFixtureBase - { - public override string GetRubyCode() - { - return "self.Items = System::Array[System::DateTime].new(\r\n" + - " [System::DateTime.new(2010, 2, 3, 0, 0, 0, 0),\r\n" + - " System::DateTime.new(0)])"; - } - - [Test] - public void DeserializedObjectIsExpectedArray() - { - DateTime[] expectedArray = new DateTime[] {new DateTime(2010, 2, 3), new DateTime(0)}; - Assert.AreEqual(expectedArray, deserializedObject); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeLocalVariableTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeLocalVariableTestFixture.cs deleted file mode 100644 index 95b554157d..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeLocalVariableTestFixture.cs +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using IronRuby.Compiler.Ast; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that a local variable can be deserialized. Local variables are used when adding - /// ListViewItems to a ListView. - /// - [TestFixture] - public class DeserializeLocalVariableTestFixture - { - string RubyCode = "self.Items.AddRange(System::Array[System::Windows::Forms::ListViewItem].new([listViewItem1]))"; - - MockDesignerLoaderHost mockDesignerLoaderHost; - MockTypeResolutionService typeResolutionService; - MockComponentCreator componentCreator; - ListViewItem listViewItem1; - object deserializedObject; - - [TestFixtureSetUp] - public void SetUpFixture() - { - componentCreator = new MockComponentCreator(); - listViewItem1 = (ListViewItem)componentCreator.CreateInstance(typeof(ListViewItem), new object[0], "listViewItem1", false); - - MethodCall callExpression = RubyParserHelper.GetMethodCall(RubyCode); - - mockDesignerLoaderHost = new MockDesignerLoaderHost(); - typeResolutionService = mockDesignerLoaderHost.TypeResolutionService; - RubyCodeDeserializer deserializer = new RubyCodeDeserializer(componentCreator); - deserializedObject = deserializer.Deserialize(callExpression.Arguments.Expressions[0]); - } - - [Test] - public void ListViewItemDeserialized() - { - ListViewItem[] array = (ListViewItem[])deserializedObject; - Assert.AreSame(listViewItem1, array[0]); - } - - [Test] - public void ListViewItemIsNotNull() - { - Assert.IsNotNull(deserializedObject); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeMethodParametersTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeMethodParametersTestFixture.cs deleted file mode 100644 index 95d5cdb6b1..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeMethodParametersTestFixture.cs +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using IronRuby.Compiler.Ast; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class DeserializeMethodParametersTestFixture - { - RubyCodeDeserializer deserializer; - MockComponentCreator componentCreator; - - [SetUp] - public void Init() - { - componentCreator = new MockComponentCreator(); - MockDesignerLoaderHost mockDesignerLoaderHost = new MockDesignerLoaderHost(); - deserializer = new RubyCodeDeserializer(componentCreator); - } - - [Test] - public void NegativeIntegerParameter() - { - List expectedArgs = new List(); - expectedArgs.Add(-1); - - string code = "TestClass(-1)"; - MethodCall callExpression = RubyParserHelper.GetMethodCall(code); - List args = deserializer.GetArguments(callExpression); - - Assert.AreEqual(expectedArgs, args); - } - - [Test] - public void NegativeDoubleParameter() - { - List expectedArgs = new List(); - expectedArgs.Add(-1.0); - - string code = "TestClass(-1.0)"; - MethodCall callExpression = RubyParserHelper.GetMethodCall(code); - List args = deserializer.GetArguments(callExpression); - - Assert.AreEqual(expectedArgs, args); - } - - [Test] - public void EnumParameter() - { - List expectedArgs = new List(); - expectedArgs.Add(AnchorStyles.Top); - - string code = "TestClass(System::Windows::Forms::AnchorStyles.Top)"; - MethodCall callExpression = RubyParserHelper.GetMethodCall(code); - List args = deserializer.GetArguments(callExpression); - - Assert.AreEqual(expectedArgs, args); - } - - [Test] - public void BooleanParameter() - { - List expectedArgs = new List(); - expectedArgs.Add(true); - - string code = "TestClass(true)"; - MethodCall callExpression = RubyParserHelper.GetMethodCall(code); - List args = deserializer.GetArguments(callExpression); - - Assert.AreEqual(expectedArgs, args); - } - - [Test] - public void LocalVariableInstance() - { - string s = "abc"; - CreatedInstance instance = new CreatedInstance(typeof(string), new object[0], "localVariable", false); - instance.Object = s; - componentCreator.CreatedInstances.Add(instance); - List expectedArgs = new List(); - expectedArgs.Add(s); - - string code = "TestClass(localVariable)"; - MethodCall callExpression = RubyParserHelper.GetMethodCall(code); - List args = deserializer.GetArguments(callExpression); - - Assert.AreEqual(expectedArgs, args); - } - - [Test] - public void MethodHasNoArguments() - { - string code = "TestClass()"; - MethodCall callExpression = RubyParserHelper.GetMethodCall(code); - List args = deserializer.GetArguments(callExpression); - - List expectedArgs = new List(); - Assert.AreEqual(expectedArgs, args); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeStringArrayTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeStringArrayTestFixture.cs deleted file mode 100644 index b08d58ae4e..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeStringArrayTestFixture.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using IronRuby.Compiler.Ast; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the string "System.Array" can be converted to an array. - /// - [TestFixture] - public class DeserializeStringArrayTestFixture : DeserializeAssignmentTestFixtureBase - { - public override string GetRubyCode() - { - return "self.Items = System::Array[System::String].new(\r\n" + - " [\"a\",\r\n" + - " \"b\"])"; - } - - [Test] - public void DeserializedObjectIsExpectedArray() - { - string[] expectedArray = new string[] {"a", "b"}; - Assert.AreEqual(expectedArray, deserializedObject); - } - - [Test] - public void StringTypeResolved() - { - Assert.AreEqual("System.String", componentCreator.LastTypeNameResolved); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeToolStripItemArrayTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeToolStripItemArrayTestFixture.cs deleted file mode 100644 index af572f74c3..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/DeserializeToolStripItemArrayTestFixture.cs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using IronRuby.Compiler.Ast; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class DeserializeToolStripItemArrayTestFixture : DeserializeAssignmentTestFixtureBase - { - ToolStripMenuItem fileMenuItem; - ToolStripMenuItem editMenuItem; - - public override string GetRubyCode() - { - fileMenuItem = (ToolStripMenuItem)componentCreator.CreateComponent(typeof(ToolStripMenuItem), "fileToolStripMenuItem"); - editMenuItem = (ToolStripMenuItem)componentCreator.CreateComponent(typeof(ToolStripMenuItem), "editToolStripMenuItem"); - - componentCreator.Add(fileMenuItem, "fileToolStripMenuItem"); - componentCreator.Add(editMenuItem, "editToolStripMenuItem"); - - return "self.Items = System::Array[System::Windows::Forms::ToolStripItem].new(\r\n" + - " [@fileToolStripMenuItem,\r\n" + - " @editToolStripMenuItem])"; - } - - [Test] - public void DeserializedObjectIsExpectedCustomColor() - { - ToolStripItem[] expectedArray = new ToolStripItem[] {fileMenuItem, editMenuItem}; - Assert.AreEqual(expectedArray, deserializedObject); - } - - [Test] - public void StringTypeResolved() - { - Assert.AreEqual("System.Windows.Forms.ToolStripItem", componentCreator.LastTypeNameResolved); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/EnabledSetUsingPropertyDescriptorTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/EnabledSetUsingPropertyDescriptorTestFixture.cs deleted file mode 100644 index 425c80526b..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/EnabledSetUsingPropertyDescriptorTestFixture.cs +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting; -using ICSharpCode.Scripting.Tests.Designer; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// The RubyComponentWalker class should be getting the value from the PropertyDescriptor and not - /// the PropertyInfo information returned from the form object. If this is not done then when the - /// user sets Enabled to false in the designer the value is not generated in the InitializeComponent method. - /// - [TestFixture] - public class EnabledSetUsingPropertyDescriptorTestFixture : GenerateEnabledUsingPropertyDescriptorTestsBase - { - [Test] - public void GeneratedCode() - { - string expectedCode = - "self.SuspendLayout()\r\n" + - "# \r\n" + - "# MainForm\r\n" + - "# \r\n" + - "self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - "self.Enabled = false\r\n" + - "self.Name = \"MainForm\"\r\n" + - "self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedCode); - } - - protected override IScriptingCodeDomSerializer CreateSerializer() - { - return RubyCodeDomSerializerHelper.CreateSerializer(); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/EventHandlerAlreadyExistsTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/EventHandlerAlreadyExistsTestFixture.cs deleted file mode 100644 index 76ef2b92b5..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/EventHandlerAlreadyExistsTestFixture.cs +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.FormsDesigner; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests the RubyDesignerGenerator does not insert an event handler if a method already exists with the same - /// name. - /// - [TestFixture] - public class EventHandlerAlreadyExistsTestFixture : InsertEventHandlerTestFixtureBase - { - public override void AfterSetUpFixture() - { - MockEventDescriptor mockEventDescriptor = new MockEventDescriptor("Click"); - generator.InsertComponentEvent(null, mockEventDescriptor, "mybuttonclick", String.Empty, out file, out position); - insertedEventHandler = generator.InsertComponentEvent(null, mockEventDescriptor, "mybuttonclick", String.Empty, out file, out position); - } - - [Test] - public void CodeAfterInsertComponentEventMethodCalledIsNotChanged() - { - string expectedCode = GetTextEditorCode(); - Assert.AreEqual(expectedCode, viewContent.DesignerCodeFileContent); - } - - [Test] - public void InsertComponentEventMethodReturnsTrue() - { - Assert.IsTrue(insertedEventHandler); - } - - [Test] - public void FileIsForm() - { - Assert.AreEqual(fileName, file); - } - - [Test] - public void PositionOfEventHandlerIsLine12() - { - Assert.AreEqual(12, position); - } - - protected override string GetTextEditorCode() - { - return "class MainForm < System::Windows::Forms::Form\r\n" + - "\tdef initialize()\r\n" + - "\t\tself.InitializeComponents()\r\n" + - "\tend\r\n" + - "\t\r\n" + - "\tdef InitializeComponents()\r\n" + - "\t\t@button1 = System::Windows::Forms::Button.new()\r\n" + - "\t\t@button1.Click { |sender, e| self.mybuttonclick() }\r\n" + - "\t\tself.Controls.Add(@button1)\r\n" + - "\tend\r\n" + - "\t\r\n" + - "\tdef mybuttonclick(sender, e)\r\n" + - "\t\t\r\n" + - "\tend\r\n" + - "end"; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/EventHandlerExistsWithIncorrectParameterCountTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/EventHandlerExistsWithIncorrectParameterCountTestFixture.cs deleted file mode 100644 index 766205f174..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/EventHandlerExistsWithIncorrectParameterCountTestFixture.cs +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.FormsDesigner; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// An event handler should be inserted if a method exists in the form's class but has the incorrect - /// number of parameters. - /// - [TestFixture] - public class EventHandlerExistsWithIncorrectParameterCountTestFixture : InsertEventHandlerTestFixtureBase - { - public override void AfterSetUpFixture() - { - MockEventDescriptor mockEventDescriptor = new MockEventDescriptor("Click"); - insertedEventHandler = generator.InsertComponentEvent(null, mockEventDescriptor, "mybuttonclick", String.Empty, out file, out position); - } - - [Test] - public void ExpectedCodeAfterEventHandlerInserted() - { - string expectedCode = - "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MainForm < Form\r\n" + - "\tdef initialize()\r\n" + - "\t\tself.InitializeComponents()\r\n" + - "\tend\r\n" + - "\t\r\n" + - "\tdef InitializeComponents()\r\n" + - "\t\t@button1 = System::Windows::Forms::Button.new()\r\n" + - "\t\t@button1.Click { self.mybuttonclick() }\r\n" + - "\tend\r\n" + - "\t\r\n" + - "\tdef mybuttonclick()\r\n" + - "\tend\r\n" + - "\r\n" + - "\tdef mybuttonclick(sender, e)\r\n" + - "\t\t\r\n" + - "\tend\r\n" + - "end"; - - Assert.AreEqual(expectedCode, viewContent.DesignerCodeFileContent, viewContent.DesignerCodeFileContent); - } - - protected override string GetTextEditorCode() - { - return - "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MainForm < Form\r\n" + - "\tdef initialize()\r\n" + - "\t\tself.InitializeComponents()\r\n" + - "\tend\r\n" + - "\t\r\n" + - "\tdef InitializeComponents()\r\n" + - "\t\t@button1 = System::Windows::Forms::Button.new()\r\n" + - "\t\t@button1.Click { self.mybuttonclick() }\r\n" + - "\tend\r\n" + - "\t\r\n" + - "\tdef mybuttonclick()\r\n" + - "\tend\r\n" + - "end"; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/FindInitializeComponentMethodTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/FindInitializeComponentMethodTestFixture.cs deleted file mode 100644 index 7f043bf88b..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/FindInitializeComponentMethodTestFixture.cs +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the GeneratedInitializeComponentMethod class locates - /// the InitializeComponents method in the source code. - /// - /// Note that the source code contains a non-designable class - /// before the Form. This tests that the first designable class - /// is correctly picked up. - /// - [TestFixture] - public class FindInitializeComponentMethodTestFixture - { - IMethod initializeComponentMethod; - ParseInformation parseInfo; - IMethod expectedInitializeComponentMethod; - - [TestFixtureSetUp] - public void SetUpFixture() - { - RubyParser parser = new RubyParser(); - MockProjectContent mockProjectContent = new MockProjectContent(); - ICompilationUnit compilationUnit = parser.Parse(mockProjectContent, @"C:\Projects\Test\MainForm.rb", GetFormCode()); - - // Create parse info to return from ParseFile method. - parseInfo = new ParseInformation(compilationUnit); - - // Get the InitializeComponent method from the - // compilation unit. - expectedInitializeComponentMethod = GetInitializeComponentMethod(compilationUnit); - - // Find the InitializeComponent method using the designer generator. - initializeComponentMethod = RubyDesignerGenerator.GetInitializeComponents(compilationUnit); - } - - /// - /// Sanity check. Make sure we found the InitializeComponent method - /// from the compilation unit during the SetUpFixture method. - /// - [Test] - public void ExpectedInitializeComponentMethodFound() - { - Assert.IsNotNull(expectedInitializeComponentMethod); - } - - [Test] - public void InitializeComponentMethodFound() - { - Assert.AreSame(expectedInitializeComponentMethod, initializeComponentMethod); - } - - [Test] - public void GetInitializeComponentWhenNoClassesInCompilationUnit() - { - DefaultCompilationUnit unit = new DefaultCompilationUnit(new MockProjectContent()); - ParseInformation parseInfo = new ParseInformation(unit); - Assert.IsNull(RubyDesignerGenerator.GetInitializeComponents(unit)); - } - - /// - /// Tests that the RubyDesignerGenerator handles the InitializeComponent - /// method being "InitializeComponents" and not "InitializeComponent". - /// - [Test] - public void InitializeComponentsUsedInsteadOfInitializeComponent() - { - RubyParser parser = new RubyParser(); - MockProjectContent mockProjectContent = new MockProjectContent(); - string code = GetFormCode().Replace("InitializeComponent", "InitializeComponents"); - ICompilationUnit compilationUnit = parser.Parse(mockProjectContent, @"C:\Projects\Test\MainForm.rb", code); - ParseInformation parseInfo = new ParseInformation(compilationUnit); - IMethod expectedMethod = GetInitializeComponentMethod(compilationUnit); - - IMethod method = RubyDesignerGenerator.GetInitializeComponents(compilationUnit); - - Assert.IsNotNull(method); - Assert.AreSame(expectedMethod, method); - } - - string GetFormCode() - { - return "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class IgnoreMe\r\n" + - "\tdef initialize()\r\n" + - "\tend\r\n"+ - "end\r\n" + - "\r\n" + - "class IgnoreMeSinceIHaveNoInitializeComponentMethod < Form\r\n" + - "\tdef initialize()\r\n" + - "\tend\r\n" + - "end\r\n" + - "\r\n" + - "class MainForm < Form\r\n" + - "\tdef initialize()\r\n" + - "\t\tself.InitializeComponent()\r\n" + - "\tend\r\n" + - "\t\r\n" + - "\tdef InitializeComponent()\r\n" + - "\tend\r\n" + - "end"; - } - - static IMethod GetInitializeComponentMethod(ICompilationUnit unit) - { - IClass c = unit.Classes[2]; - foreach (IMethod m in c.Methods) { - if (m.Name == "InitializeComponent" || m.Name == "InitializeComponents") { - return m; - } - } - return null; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/FormBaseClassCreatedOnLoadTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/FormBaseClassCreatedOnLoadTestFixture.cs deleted file mode 100644 index c93d6dbf1f..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/FormBaseClassCreatedOnLoadTestFixture.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class FormBaseClassCreatedOnLoadTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - ComponentCreator.AddType("FormBase.FormBase", typeof(Component)); - - return - "class TestForm < FormBase::FormBase\r\n" + - " def InitializeComponent()\r\n" + - " end\r\n" + - "end"; - } - } - - [Test] - public void BaseClassNamePassedAsGetTypeParam() - { - Assert.AreEqual("FormBase.FormBase", ComponentCreator.TypeNames[0]); - } - - [Test] - public void BaseClassTypePassedToCreateComponent() - { - Assert.AreEqual(typeof(Component).FullName, ComponentCreator.CreatedComponents[0].TypeName); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/FormsDesignerDisplayBindingTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/FormsDesignerDisplayBindingTestFixture.cs deleted file mode 100644 index 543da42fb5..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/FormsDesignerDisplayBindingTestFixture.cs +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.Core; -using ICSharpCode.FormsDesigner; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Gui; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests the RubyFormsDesignerDisplayBinding. - /// - [TestFixture] - public class FormsDesignerDisplayBindingTestFixture - { - DerivedRubyFormsDesignerDisplayBinding displayBinding; - MockTextEditorViewContent viewContent; - bool canAttachToDesignableClass; - ParseInformation parseInfo; - - [SetUp] - public void SetUp() - { - displayBinding = new DerivedRubyFormsDesignerDisplayBinding(); - viewContent = new MockTextEditorViewContent(); - viewContent.PrimaryFileName = new FileName("test.rb"); - viewContent.TextEditor.Document.Text = "text content"; - parseInfo = new ParseInformation(new DefaultCompilationUnit(new DefaultProjectContent())); - displayBinding.ParseServiceParseInfoToReturn = parseInfo; - displayBinding.IsParseInfoDesignable = true; - canAttachToDesignableClass = displayBinding.CanAttachTo(viewContent); - } - - [Test] - public void ReattachWhenParserServiceIsReady() - { - Assert.IsTrue(displayBinding.ReattachWhenParserServiceIsReady); - } - - [Test] - public void CanAttachToNullViewContent() - { - Assert.IsFalse(displayBinding.CanAttachTo(null)); - } - - [Test] - public void CanAttachToDesignableClass() - { - Assert.IsTrue(canAttachToDesignableClass); - } - - [Test] - public void CannotAttachToNonTextEditorViewContent() - { - MockViewContent viewContent = new MockViewContent(); - Assert.IsFalse(displayBinding.CanAttachTo(viewContent)); - } - - [Test] - public void ParseInfoPassedToFormsDesignerIsDesignableMethod() - { - Assert.AreEqual(parseInfo, displayBinding.ParseInfoTestedForDesignability); - } - - [Test] - public void ParseInfoIsNotDesignable() - { - displayBinding.IsParseInfoDesignable = false; - Assert.IsFalse(displayBinding.CanAttachTo(viewContent)); - } - - [Test] - public void NullViewContentFileName() - { - viewContent.PrimaryFileName = null; - Assert.IsFalse(displayBinding.CanAttachTo(viewContent)); - } - - [Test] - public void FileNamePassedToGetParseInfo() - { - Assert.AreEqual("test.rb", displayBinding.FileNamePassedToGetParseInfo); - } - - [Test] - public void TextContentPassedToGetParseInfo() - { - Assert.AreEqual("text content", displayBinding.TextContentPassedToGetParseInfo); - } - - [Test] - public void NonRubyFileNameCannotBeAttachedTo() - { - viewContent.PrimaryFileName = new FileName("test.cs"); - Assert.IsFalse(displayBinding.CanAttachTo(viewContent)); - } - - [Test] - public void NullViewContentPrimaryFileName() - { - viewContent.PrimaryFileName = null; - Assert.IsFalse(displayBinding.CanAttachTo(viewContent)); - } - - [Test] - public void CreatesRubyFormsDesigner() - { - MockTextEditorViewContent view = new MockTextEditorViewContent(); - IViewContent[] views = displayBinding.CreateSecondaryViewContent(view, new MockTextEditorOptions()); - Assert.AreEqual(1, views.Length); - Assert.IsTrue(views[0] is FormsDesignerViewContent); - views[0].Dispose(); - } - - [Test] - public void FormDesignerNotCreatedIfAlreadyAttached() - { - MockTextEditorViewContent view = new MockTextEditorViewContent(); - IViewContent[] views = null; - using (FormsDesignerViewContent formsDesigner = new FormsDesignerViewContent(view, new MockOpenedFile("test.rb"))) { - view.SecondaryViewContents.Add(formsDesigner); - views = displayBinding.CreateSecondaryViewContent(view, new MockTextEditorOptions()); - } - Assert.AreEqual(0, views.Length); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateAcceptButtonFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateAcceptButtonFormTestFixture.cs deleted file mode 100644 index bdfb5dc6e5..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateAcceptButtonFormTestFixture.cs +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateAcceptButtonFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - Button button = (Button)host.CreateComponent(typeof(Button), "button1"); - button.Location = new Point(0, 0); - button.Size = new Size(10, 10); - button.Text = "button1"; - button.UseCompatibleTextRendering = false; - form.Controls.Add(button); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor acceptButtonPropertyDescriptor = descriptors.Find("AcceptButton", false); - acceptButtonPropertyDescriptor.SetValue(form, button); - - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = "@button1 = System::Windows::Forms::Button.new()\r\n" + - "self.SuspendLayout()\r\n" + - "# \r\n" + - "# button1\r\n" + - "# \r\n" + - "@button1.Location = System::Drawing::Point.new(0, 0)\r\n" + - "@button1.Name = \"button1\"\r\n" + - "@button1.Size = System::Drawing::Size.new(10, 10)\r\n" + - "@button1.TabIndex = 0\r\n" + - "@button1.Text = \"button1\"\r\n" + - "# \r\n" + - "# MainForm\r\n" + - "# \r\n" + - "self.AcceptButton = @button1\r\n" + - "self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - "self.Controls.Add(@button1)\r\n" + - "self.Name = \"MainForm\"\r\n" + - "self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateAccessibleRoleFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateAccessibleRoleFormTestFixture.cs deleted file mode 100644 index f78fc6a984..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateAccessibleRoleFormTestFixture.cs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateAccessibleRoleFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor accessibleRoleDescriptor = descriptors.Find("AccessibleRole", false); - accessibleRoleDescriptor.SetValue(form, AccessibleRole.None); - - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = "self.SuspendLayout()\r\n" + - "# \r\n" + - "# MainForm\r\n" + - "# \r\n" + - "self.AccessibleRole = System::Windows::Forms::AccessibleRole.None\r\n" + - "self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - "self.Name = \"MainForm\"\r\n" + - "self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateAutoScaleModeFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateAutoScaleModeFormTestFixture.cs deleted file mode 100644 index 0351878c5a..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateAutoScaleModeFormTestFixture.cs +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateAutoScaleModeFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - PropertyDescriptor autoScaleModeDescriptor = descriptors.Find("AutoScaleMode", false); - autoScaleModeDescriptor.SetValue(form, AutoScaleMode.Font); - - PropertyDescriptor autoScaleDimensionsDescriptor = descriptors.Find("AutoScaleDimensions", false); - autoScaleDimensionsDescriptor.SetValue(form, new SizeF(6F, 13F)); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.AutoScaleDimensions = System::Drawing::SizeF.new(6, 13)\r\n" + - " self.AutoScaleMode = System::Windows::Forms::AutoScaleMode.Font\r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateAutoScrollFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateAutoScrollFormTestFixture.cs deleted file mode 100644 index 411fe836ab..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateAutoScrollFormTestFixture.cs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateAutoScrollFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor autoScrollDescriptor = descriptors.Find("AutoScroll", false); - autoScrollDescriptor.SetValue(form, true); - - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = "self.SuspendLayout()\r\n" + - "# \r\n" + - "# MainForm\r\n" + - "# \r\n" + - "self.AutoScroll = true\r\n" + - "self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - "self.Name = \"MainForm\"\r\n" + - "self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateBackgroundWorkerTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateBackgroundWorkerTestFixture.cs deleted file mode 100644 index e8a5136184..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateBackgroundWorkerTestFixture.cs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateBackgroundWorkerTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor propertyDescriptor = descriptors.Find("Name", false); - propertyDescriptor.SetValue(form, "MainForm"); - - BackgroundWorker worker = (BackgroundWorker)host.CreateComponent(typeof(BackgroundWorker), "backgroundWorker1"); - descriptors = TypeDescriptor.GetProperties(worker); - propertyDescriptor = descriptors.Find("WorkerReportsProgress", false); - propertyDescriptor.SetValue(worker, true); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @backgroundWorker1 = System::ComponentModel::BackgroundWorker.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # backgroundWorker1\r\n" + - " # \r\n" + - " @backgroundWorker1.WorkerReportsProgress = true\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateButtonFlatAppearanceTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateButtonFlatAppearanceTestFixture.cs deleted file mode 100644 index 76201acb47..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateButtonFlatAppearanceTestFixture.cs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateButtonFlatAppearanceTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - Button button = (Button)host.CreateComponent(typeof(Button), "button1"); - button.Location = new Point(0, 0); - button.Size = new Size(10, 10); - button.Text = "button1"; - button.UseCompatibleTextRendering = false; - - button.FlatAppearance.BorderSize = 2; - button.FlatAppearance.BorderColor = Color.Red; - button.FlatAppearance.MouseOverBackColor = Color.Yellow; - - form.Controls.Add(button); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @button1 = System::Windows::Forms::Button.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # button1\r\n" + - " # \r\n" + - " @button1.FlatAppearance.BorderColor = System::Drawing::Color.Red\r\n" + - " @button1.FlatAppearance.BorderSize = 2\r\n" + - " @button1.FlatAppearance.MouseOverBackColor = System::Drawing::Color.Yellow\r\n" + - " @button1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @button1.Name = \"button1\"\r\n" + - " @button1.Size = System::Drawing::Size.new(10, 10)\r\n" + - " @button1.TabIndex = 0\r\n" + - " @button1.Text = \"button1\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@button1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateComboBoxItemsTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateComboBoxItemsTestFixture.cs deleted file mode 100644 index 5a78473ce1..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateComboBoxItemsTestFixture.cs +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateComboBoxItemsFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add combo box. - ComboBox comboBox = (ComboBox)host.CreateComponent(typeof(ComboBox), "comboBox1"); - comboBox.TabIndex = 0; - comboBox.Location = new Point(0, 0); - comboBox.Size = new System.Drawing.Size(121, 21); - comboBox.Items.Add("aaa"); - comboBox.Items.Add("bbb"); - comboBox.Items.Add("ccc"); - - form.Controls.Add(comboBox); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @comboBox1 = System::Windows::Forms::ComboBox.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # comboBox1\r\n" + - " # \r\n" + - " @comboBox1.Items.AddRange(System::Array[System::Object].new(\r\n" + - " [\"aaa\",\r\n" + - " \"bbb\",\r\n" + - " \"ccc\"]))\r\n" + - " @comboBox1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @comboBox1.Name = \"comboBox1\"\r\n" + - " @comboBox1.Size = System::Drawing::Size.new(121, 21)\r\n" + - " @comboBox1.TabIndex = 0\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@comboBox1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateContextMenuStripTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateContextMenuStripTestFixture.cs deleted file mode 100644 index 202382e1f2..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateContextMenuStripTestFixture.cs +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateContextMenuStripTestFixture - { - string generatedRubyCode; - Size menuStripSize; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add timer. This checks that the components Container is only created once in the - // generated code. - Timer timer = (Timer)host.CreateComponent(typeof(Timer), "timer1"); - - // Add menu strip. - ContextMenuStrip menuStrip = (ContextMenuStrip)host.CreateComponent(typeof(ContextMenuStrip), "contextMenuStrip1"); - - // Set the context menu strip OwnerItem to simulate leaving the context menu - // open in the designer before generating the source code. We do not want the - // OwnerItem to be serialized. - menuStrip.OwnerItem = new DerivedToolStripMenuItem(); - menuStrip.RightToLeft = RightToLeft.No; - menuStripSize = menuStrip.Size; - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @components = System::ComponentModel::Container.new()\r\n" + - " @timer1 = System::Windows::Forms::Timer.new(@components)\r\n" + - " @contextMenuStrip1 = System::Windows::Forms::ContextMenuStrip.new(@components)\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # contextMenuStrip1\r\n" + - " # \r\n" + - " @contextMenuStrip1.Name = \"contextMenuStrip1\"\r\n" + - " @contextMenuStrip1.Size = " + RubyPropertyValueAssignment.ToString(menuStripSize) + "\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateCursorFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateCursorFormTestFixture.cs deleted file mode 100644 index 828bd0fb52..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateCursorFormTestFixture.cs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateCursorFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor cursorDescriptor = descriptors.Find("Cursor", false); - cursorDescriptor.SetValue(form, Cursors.Help); - - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Cursor = System::Windows::Forms::Cursors.Help\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateCustomCollectionItemsTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateCustomCollectionItemsTestFixture.cs deleted file mode 100644 index c1c43f73e0..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateCustomCollectionItemsTestFixture.cs +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that a custom collection class generates the correct code. - /// The collection class should be a property of a custom component or user control - /// and it should be marked with DesignerSerializationVisibility.Content. - /// - [TestFixture] - public class GenerateCustomCollectionItemsTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add custom control - CustomUserControl userControl = (CustomUserControl)host.CreateComponent(typeof(CustomUserControl), "userControl1"); - userControl.Location = new Point(0, 0); - userControl.ClientSize = new Size(200, 100); - - DesignerSerializationManager designerSerializationManager = new DesignerSerializationManager(host); - IDesignerSerializationManager serializationManager = (IDesignerSerializationManager)designerSerializationManager; - using (designerSerializationManager.CreateSession()) { - FooItem fooItem = (FooItem)serializationManager.CreateInstance(typeof(FooItem), new object[] {"aa"}, "fooItem1", false); - userControl.FooItems.Add(fooItem); - fooItem = (FooItem)serializationManager.CreateInstance(typeof(FooItem), new object[] {"bb"}, "fooItem2", false); - userControl.FooItems.Add(fooItem); - - BarItem barItem = (BarItem)serializationManager.CreateInstance(typeof(BarItem), new object[] {"cc"}, "barItem1", false); - userControl.ParentComponent.ParentBarItems.Add(barItem); - barItem = (BarItem)serializationManager.CreateInstance(typeof(BarItem), new object[] {"dd"}, "barItem2", false); - userControl.ParentComponent.ParentBarItems.Add(barItem); - form.Controls.Add(userControl); - - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " fooItem1 = ICSharpCode::Scripting::Tests::Utils::FooItem.new()\r\n" + - " fooItem2 = ICSharpCode::Scripting::Tests::Utils::FooItem.new()\r\n" + - " barItem1 = ICSharpCode::Scripting::Tests::Utils::BarItem.new()\r\n" + - " barItem2 = ICSharpCode::Scripting::Tests::Utils::BarItem.new()\r\n" + - " @userControl1 = ICSharpCode::Scripting::Tests::Utils::CustomUserControl.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # userControl1\r\n" + - " # \r\n" + - " fooItem1.Text = \"aa\"\r\n" + - " fooItem2.Text = \"bb\"\r\n" + - " @userControl1.FooItems.AddRange(System::Array[ICSharpCode::Scripting::Tests::Utils::FooItem].new(\r\n" + - " [fooItem1,\r\n" + - " fooItem2]))\r\n" + - " @userControl1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @userControl1.Name = \"userControl1\"\r\n" + - " # \r\n" + - " # \r\n" + - " # \r\n" + - " barItem1.Text = \"cc\"\r\n" + - " barItem2.Text = \"dd\"\r\n" + - " @userControl1.ParentComponent.ParentBarItems.AddRange(System::Array[ICSharpCode::Scripting::Tests::Utils::BarItem].new(\r\n" + - " [barItem1,\r\n" + - " barItem2]))\r\n" + - " @userControl1.Size = System::Drawing::Size.new(200, 100)\r\n" + - " @userControl1.TabIndex = 0\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@userControl1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateDataSetTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateDataSetTestFixture.cs deleted file mode 100644 index e706daad5f..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateDataSetTestFixture.cs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Data; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateDataSetTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - DataGridView dataGridView = (DataGridView)host.CreateComponent(typeof(DataGridView), "dataGridView1"); - dataGridView.Location = new Point(0, 0); - dataGridView.Size = new Size(100, 100); - form.Controls.Add(dataGridView); - - DataSet dataSet = (DataSet)host.CreateComponent(typeof(DataSet), "dataSet1"); - dataGridView.DataSource = dataSet; - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @dataGridView1 = System::Windows::Forms::DataGridView.new()\r\n" + - " @dataSet1 = System::Data::DataSet.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # dataGridView1\r\n" + - " # \r\n" + - " @dataGridView1.AutoGenerateColumns = false\r\n" + - " @dataGridView1.DataSource = @dataSet1\r\n" + - " @dataGridView1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @dataGridView1.Name = \"dataGridView1\"\r\n" + - " @dataGridView1.Size = System::Drawing::Size.new(100, 100)\r\n" + - " @dataGridView1.TabIndex = 0\r\n" + - " # \r\n" + - " # dataSet1\r\n" + - " # \r\n" + - " @dataSet1.DataSetName = \"NewDataSet\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@dataGridView1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateDoubleBufferedFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateDoubleBufferedFormTestFixture.cs deleted file mode 100644 index cf5eb9235e..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateDoubleBufferedFormTestFixture.cs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// The DoubleBuffered property on the Control class is a protected method so using the GetType().GetProperty(...) - /// method will not return it. This test checks that this property is generated when creating the Ruby code - /// for the form. - /// - [TestFixture] - public class GenerateDoubleBufferedFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - form.AllowDrop = false; - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor doubleBufferedPropertyDescriptor = descriptors.Find("DoubleBuffered", false); - doubleBufferedPropertyDescriptor.SetValue(form, true); - - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.DoubleBuffered = true\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateEventHandlerFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateEventHandlerFormTestFixture.cs deleted file mode 100644 index c268b2f39f..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateEventHandlerFormTestFixture.cs +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Globalization; -using System.Reflection; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that an event is wired to its event handler after the user specifies an event handler - /// method in the property grid. - /// - [TestFixture] - public class GenerateEventHandlerFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - host.AddService(typeof(IEventBindingService), eventBindingService); - - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Simulate giving a name to the Load event handler in the property grid. - EventDescriptorCollection events = TypeDescriptor.GetEvents(form); - EventDescriptor loadEvent = events.Find("Load", false); - PropertyDescriptor loadEventProperty = eventBindingService.GetEventProperty(loadEvent); - loadEventProperty.SetValue(form, "MainFormLoad"); - - // Add a second event handler method. - EventDescriptor closedEvent = events.Find("FormClosed", false); - PropertyDescriptor closedEventProperty = eventBindingService.GetEventProperty(closedEvent); - closedEventProperty.SetValue(form, "MainFormClosed"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.FormClosed { |sender, e| self.MainFormClosed(sender, e) }\r\n" + - " self.Load { |sender, e| self.MainFormLoad(sender, e) }\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateEventLogTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateEventLogTestFixture.cs deleted file mode 100644 index 4222542c86..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateEventLogTestFixture.cs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Diagnostics; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateEventLogTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - EventLog eventLog = (EventLog)host.CreateComponent(typeof(EventLog), "eventLog1"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - - [Test] - public void GeneratedCode() - { - string expectedCode = " @eventLog1 = System::Diagnostics::EventLog.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # eventLog1\r\n" + - " # \r\n" + - " @eventLog1.SynchronizingObject = self\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFolderBrowserDialogRootFolderTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFolderBrowserDialogRootFolderTestFixture.cs deleted file mode 100644 index 4553e07e90..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFolderBrowserDialogRootFolderTestFixture.cs +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateFolderBrowserDialogRootFolderTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - FolderBrowserDialog dialog = (FolderBrowserDialog)host.CreateComponent(typeof(FolderBrowserDialog), "folderBrowserDialog1"); - dialog.RootFolder = Environment.SpecialFolder.ApplicationData; - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = - "@folderBrowserDialog1 = System::Windows::Forms::FolderBrowserDialog.new()\r\n" + - "self.SuspendLayout()\r\n" + - "# \r\n" + - "# folderBrowserDialog1\r\n" + - "# \r\n" + - "@folderBrowserDialog1.RootFolder = System::Environment::SpecialFolder.ApplicationData\r\n" + - "# \r\n" + - "# MainForm\r\n" + - "# \r\n" + - "self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - "self.Name = \"MainForm\"\r\n" + - "self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFormColorTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFormColorTestFixture.cs deleted file mode 100644 index f6b5f1dd7b..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFormColorTestFixture.cs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateFormColorTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor colorDescriptor = descriptors.Find("BackColor", false); - colorDescriptor.SetValue(form, SystemColors.HotTrack); - colorDescriptor = descriptors.Find("ForeColor", false); - colorDescriptor.SetValue(form, Color.Red); - - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.BackColor = System::Drawing::SystemColors.HotTrack\r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.ForeColor = System::Drawing::Color.Red\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFormLocationTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFormLocationTestFixture.cs deleted file mode 100644 index de7185238d..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFormLocationTestFixture.cs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateFormLocationTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor descriptor = descriptors.Find("Location", false); - descriptor.SetValue(form, new Point(10, 20)); - - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Location = System::Drawing::Point.new(10, 20)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFormPaddingTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFormPaddingTestFixture.cs deleted file mode 100644 index ed86ffbeeb..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFormPaddingTestFixture.cs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateFormPaddingTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor descriptor = descriptors.Find("Padding", false); - descriptor.SetValue(form, new Padding(10, 20, 15, 18)); - - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.Padding = System::Windows::Forms::Padding.new(10, 20, 15, 18)\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFormResourceTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFormResourceTestFixture.cs deleted file mode 100644 index 98fc4f2e25..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateFormResourceTestFixture.cs +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Globalization; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateFormResourceTestFixture - { - MockResourceWriter resourceWriter; - MockComponentCreator componentCreator; - string generatedRubyCode; - Bitmap bitmap; - Icon icon; - - [TestFixtureSetUp] - public void SetUpFixture() - { - resourceWriter = new MockResourceWriter(); - componentCreator = new MockComponentCreator(); - componentCreator.SetResourceWriter(resourceWriter); - - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - host.AddService(typeof(IResourceService), componentCreator); - - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Set bitmap as form background image. - bitmap = new Bitmap(10, 10); - form.BackgroundImage = bitmap; - - icon = new Icon(typeof(GenerateFormResourceTestFixture), "App.ico"); - form.Icon = icon; - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, "RootNamespace", 1); - } - } - } - - [Test] - public void TearDownFixture() - { - bitmap.Dispose(); - icon.Dispose(); - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " resources = System::Resources::ResourceManager.new(\"RootNamespace.MainForm\", System::Reflection::Assembly.GetEntryAssembly())\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.BackgroundImage = resources.GetObject(\"$this.BackgroundImage\")\r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Icon = resources.GetObject(\"$this.Icon\")\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - - [Test] - public void BitmapAddedToResourceWriter() - { - Assert.IsTrue(Object.ReferenceEquals(bitmap, resourceWriter.GetResource("$this.BackgroundImage"))); - } - - [Test] - public void IconAddedToResourceWriter() - { - Assert.IsTrue(Object.ReferenceEquals(icon, resourceWriter.GetResource("$this.Icon"))); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateImageListResourceTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateImageListResourceTestFixture.cs deleted file mode 100644 index bf9dc1754a..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateImageListResourceTestFixture.cs +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Globalization; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateImageListResourceTestFixture - { - MockResourceWriter resourceWriter; - MockComponentCreator componentCreator; - string generatedRubyCode; - Icon icon; - - [TestFixtureSetUp] - public void SetUpFixture() - { - resourceWriter = new MockResourceWriter(); - componentCreator = new MockComponentCreator(); - componentCreator.SetResourceWriter(resourceWriter); - - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - host.AddService(typeof(IResourceService), componentCreator); - - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add ImageList. - icon = new Icon(typeof(GenerateFormResourceTestFixture), "App.ico"); - ImageList imageList = (ImageList)host.CreateComponent(typeof(ImageList), "imageList1"); - imageList.Images.Add("App.ico", icon); - imageList.Images.Add("", icon); - imageList.Images.Add("", icon); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, "RootNamespace", 1); - } - } - } - - [Test] - public void TearDownFixture() - { - icon.Dispose(); - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @components = System::ComponentModel::Container.new()\r\n" + - " resources = System::Resources::ResourceManager.new(\"RootNamespace.MainForm\", System::Reflection::Assembly.GetEntryAssembly())\r\n" + - " @imageList1 = System::Windows::Forms::ImageList.new(@components)\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # imageList1\r\n" + - " # \r\n" + - " @imageList1.ImageStream = resources.GetObject(\"imageList1.ImageStream\")\r\n" + - " @imageList1.TransparentColor = System::Drawing::Color.Transparent\r\n" + - " @imageList1.Images.SetKeyName(0, \"App.ico\")\r\n" + - " @imageList1.Images.SetKeyName(1, \"\")\r\n" + - " @imageList1.Images.SetKeyName(2, \"\")\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - - [Test] - public void ImageStreamAddedToResourceWriter() - { - Assert.IsNotNull(resourceWriter.GetResource("imageList1.ImageStream")); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateImeModeFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateImeModeFormTestFixture.cs deleted file mode 100644 index 2738b2c39a..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateImeModeFormTestFixture.cs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateImeModeFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor doubleBufferedPropertyDescriptor = descriptors.Find("ImeMode", false); - doubleBufferedPropertyDescriptor.SetValue(form, ImeMode.Alpha); - - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.ImeMode = System::Windows::Forms::ImeMode.Alpha\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateInheritedFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateInheritedFormTestFixture.cs deleted file mode 100644 index 42aeac9027..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateInheritedFormTestFixture.cs +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - class BaseForm : Form - { - Button button1 = new Button(); - - public BaseForm() - { - button1.Name = "button1"; - Controls.Add(button1); - } - } - - class DerivedForm : BaseForm - { - } - - /// - /// Tests that no code is generated for controls that are inherited from the base class. - /// - [TestFixture] - public class GenerateInheritedFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(DerivedForm))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateInheritedProtectedPanelFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateInheritedProtectedPanelFormTestFixture.cs deleted file mode 100644 index e0053370d4..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateInheritedProtectedPanelFormTestFixture.cs +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - class ProtectedPanelBaseForm : Form - { - protected Panel panel1 = new Panel(); - Button button1 = new Button(); - - public ProtectedPanelBaseForm() - { - button1.Name = "button1"; - - panel1.Name = "panel1"; - panel1.Location = new Point(5, 10); - panel1.Size = new Size(200, 100); - panel1.Controls.Add(button1); - - Controls.Add(panel1); - } - } - - class ProtectedPanelDerivedForm : ProtectedPanelBaseForm - { - [EditorBrowsableAttribute(EditorBrowsableState.Never)] - internal Point PanelLocation { - get { return panel1.Location; } - set { panel1.Location = value; } - } - - [EditorBrowsableAttribute(EditorBrowsableState.Never)] - internal Size PanelSize { - get { return panel1.Size; } - set { panel1.Size = value; } - } - - [EditorBrowsableAttribute(EditorBrowsableState.Never)] - internal Panel GetPanel() - { - return panel1; - } - } - - /// - /// Tests that no code is generated for a protected panel control in the base class - /// that has child controls. - /// - [TestFixture] - public class GenerateInheritedProtectedPanelFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(ProtectedPanelDerivedForm))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Move protected panel so we generate code for the new location. - ProtectedPanelDerivedForm derivedForm = (ProtectedPanelDerivedForm)form; - derivedForm.PanelLocation = new Point(10, 15); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " self.SuspendLayout()\r\n" + - " # \r\n" + - " # panel1\r\n" + - " # \r\n" + - " self.panel1.Location = System::Drawing::Point.new(10, 15)\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateInheritedToolTipTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateInheritedToolTipTestFixture.cs deleted file mode 100644 index 8cbe908112..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateInheritedToolTipTestFixture.cs +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - class PublicToolTipBaseForm : Form - { - public ToolTip toolTip; - Container components = new Container(); - - public PublicToolTipBaseForm() - { - toolTip = new ToolTip(components); - } - } - - class PublicToolTipDerivedForm : PublicToolTipBaseForm - { - } - - [TestFixture] - public class GenerateInheritedToolTipTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(PublicToolTipDerivedForm))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - PublicToolTipDerivedForm form = (PublicToolTipDerivedForm)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor descriptor = descriptors.Find("Name", false); - descriptor.SetValue(form, "MainForm"); - - form.toolTip.SetToolTip(form, "test"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.toolTip.SetToolTip(self, \"test\")\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateListViewGroupsTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateListViewGroupsTestFixture.cs deleted file mode 100644 index d6ab8df64c..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateListViewGroupsTestFixture.cs +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateListViewGroupsTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add list view. - ListView listView = (ListView)host.CreateComponent(typeof(ListView), "listView1"); - listView.TabIndex = 0; - listView.Location = new Point(0, 0); - listView.ClientSize = new Size(200, 100); - descriptors = TypeDescriptor.GetProperties(listView); - PropertyDescriptor descriptor = descriptors.Find("UseCompatibleStateImageBehavior", false); - descriptor.SetValue(listView, true); - descriptor = descriptors.Find("View", false); - descriptor.SetValue(listView, View.Details); - form.Controls.Add(listView); - - DesignerSerializationManager designerSerializationManager = new DesignerSerializationManager(host); - IDesignerSerializationManager serializationManager = (IDesignerSerializationManager)designerSerializationManager; - using (designerSerializationManager.CreateSession()) { - - // Add groups. - ListViewGroup group1 = (ListViewGroup)serializationManager.CreateInstance(typeof(ListViewGroup), new object[0], "listViewGroup1", false); - group1.Header = "ListViewGroup"; - group1.HeaderAlignment = HorizontalAlignment.Right; - group1.Name = "defaultGroup"; - group1.Tag = "tag1"; - listView.Groups.Add(group1); - - ListViewGroup group2 = (ListViewGroup)serializationManager.CreateInstance(typeof(ListViewGroup), new object[0], "listViewGroup2", false); - group2.Header = "ListViewGroup"; - group2.HeaderAlignment = HorizontalAlignment.Center; - group2.Name = "listViewGroup2"; - listView.Groups.Add(group2); - - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, designerSerializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " listViewGroup1 = System::Windows::Forms::ListViewGroup.new(\"ListViewGroup\", System::Windows::Forms::HorizontalAlignment.Right)\r\n" + - " listViewGroup2 = System::Windows::Forms::ListViewGroup.new(\"ListViewGroup\", System::Windows::Forms::HorizontalAlignment.Center)\r\n" + - " @listView1 = System::Windows::Forms::ListView.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # listView1\r\n" + - " # \r\n" + - " listViewGroup1.Header = \"ListViewGroup\"\r\n" + - " listViewGroup1.HeaderAlignment = System::Windows::Forms::HorizontalAlignment.Right\r\n" + - " listViewGroup1.Name = \"defaultGroup\"\r\n" + - " listViewGroup1.Tag = \"tag1\"\r\n" + - " listViewGroup2.Header = \"ListViewGroup\"\r\n" + - " listViewGroup2.HeaderAlignment = System::Windows::Forms::HorizontalAlignment.Center\r\n" + - " listViewGroup2.Name = \"listViewGroup2\"\r\n" + - " @listView1.Groups.AddRange(System::Array[System::Windows::Forms::ListViewGroup].new(\r\n" + - " [listViewGroup1,\r\n" + - " listViewGroup2]))\r\n" + - " @listView1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @listView1.Name = \"listView1\"\r\n" + - " @listView1.Size = System::Drawing::Size.new(204, 104)\r\n" + - " @listView1.TabIndex = 0\r\n" + - " @listView1.View = System::Windows::Forms::View.Details\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@listView1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateListViewItemTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateListViewItemTestFixture.cs deleted file mode 100644 index 74de9d66da..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateListViewItemTestFixture.cs +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateListViewItemsFormTestFixture - { - string generatedRubyCode; - ColumnHeader columnHeader1; - ColumnHeader columnHeader2; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add list view. - ListView listView = (ListView)host.CreateComponent(typeof(ListView), "listView1"); - listView.TabIndex = 0; - listView.Location = new Point(0, 0); - listView.ClientSize = new Size(200, 100); - descriptors = TypeDescriptor.GetProperties(listView); - PropertyDescriptor descriptor = descriptors.Find("UseCompatibleStateImageBehavior", false); - descriptor.SetValue(listView, true); - descriptor = descriptors.Find("View", false); - descriptor.SetValue(listView, View.Details); - form.Controls.Add(listView); - - // Add column headers. - columnHeader1 = (ColumnHeader)host.CreateComponent(typeof(ColumnHeader), "columnHeader1"); - descriptors = TypeDescriptor.GetProperties(columnHeader1); - descriptor = descriptors.Find("Text", false); - descriptor.SetValue(columnHeader1, "columnHeader1"); - listView.Columns.Add(columnHeader1); - - columnHeader2 = (ColumnHeader)host.CreateComponent(typeof(ColumnHeader), "columnHeader2"); - descriptors = TypeDescriptor.GetProperties(columnHeader2); - descriptor = descriptors.Find("Text", false); - descriptor.SetValue(columnHeader2, "columnHeader2"); - listView.Columns.Add(columnHeader2); - - // Add list view items. - DesignerSerializationManager designerSerializationManager = new DesignerSerializationManager(host); - IDesignerSerializationManager serializationManager = (IDesignerSerializationManager)designerSerializationManager; - using (designerSerializationManager.CreateSession()) { - ListViewItem item = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[] {"aaa"}, "listViewItem1", false); - item.ToolTipText = "tooltip"; - listView.Items.Add(item); - - item = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[] {"bbb"}, "listViewItem2", false); - listView.Items.Add(item); - - item = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[0], "listViewItem3", false); - listView.Items.Add(item); - - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " listViewItem1 = System::Windows::Forms::ListViewItem.new(\"aaa\")\r\n" + - " listViewItem2 = System::Windows::Forms::ListViewItem.new(\"bbb\")\r\n" + - " listViewItem3 = System::Windows::Forms::ListViewItem.new(\"\")\r\n" + - " @listView1 = System::Windows::Forms::ListView.new()\r\n" + - " @columnHeader1 = System::Windows::Forms::ColumnHeader.new()\r\n" + - " @columnHeader2 = System::Windows::Forms::ColumnHeader.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # listView1\r\n" + - " # \r\n" + - " @listView1.Columns.AddRange(System::Array[System::Windows::Forms::ColumnHeader].new(\r\n" + - " [@columnHeader1,\r\n" + - " @columnHeader2]))\r\n" + - " listViewItem1.ToolTipText = \"tooltip\"\r\n" + - " @listView1.Items.AddRange(System::Array[System::Windows::Forms::ListViewItem].new(\r\n" + - " [listViewItem1,\r\n" + - " listViewItem2,\r\n" + - " listViewItem3]))\r\n" + - " @listView1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @listView1.Name = \"listView1\"\r\n" + - " @listView1.Size = System::Drawing::Size.new(204, 104)\r\n" + - " @listView1.TabIndex = 0\r\n" + - " @listView1.View = System::Windows::Forms::View.Details\r\n" + - " # \r\n" + - " # columnHeader1\r\n" + - " # \r\n" + - " @columnHeader1.Text = \"columnHeader1\"\r\n" + - " # \r\n" + - " # columnHeader2\r\n" + - " # \r\n" + - " @columnHeader2.Text = \"columnHeader2\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@listView1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateListViewSubItemsTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateListViewSubItemsTestFixture.cs deleted file mode 100644 index f29d4578e1..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateListViewSubItemsTestFixture.cs +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateListViewSubItemsTestFixture - { - string generatedRubyCode; - ColumnHeader columnHeader1; - ColumnHeader columnHeader2; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add list view. - ListView listView = (ListView)host.CreateComponent(typeof(ListView), "listView1"); - listView.TabIndex = 0; - listView.Location = new Point(0, 0); - listView.ClientSize = new Size(200, 100); - descriptors = TypeDescriptor.GetProperties(listView); - PropertyDescriptor descriptor = descriptors.Find("UseCompatibleStateImageBehavior", false); - descriptor.SetValue(listView, true); - descriptor = descriptors.Find("View", false); - descriptor.SetValue(listView, View.Details); - form.Controls.Add(listView); - - // Add column headers. - columnHeader1 = (ColumnHeader)host.CreateComponent(typeof(ColumnHeader), "columnHeader1"); - descriptors = TypeDescriptor.GetProperties(columnHeader1); - descriptor = descriptors.Find("Text", false); - descriptor.SetValue(columnHeader1, "columnHeader1"); - listView.Columns.Add(columnHeader1); - - columnHeader2 = (ColumnHeader)host.CreateComponent(typeof(ColumnHeader), "columnHeader2"); - descriptors = TypeDescriptor.GetProperties(columnHeader2); - descriptor = descriptors.Find("Text", false); - descriptor.SetValue(columnHeader2, "columnHeader2"); - listView.Columns.Add(columnHeader2); - - DesignerSerializationManager designerSerializationManager = new DesignerSerializationManager(host); - IDesignerSerializationManager serializationManager = (IDesignerSerializationManager)designerSerializationManager; - using (designerSerializationManager.CreateSession()) { - - // Add list view item with 3 sub items. - ListViewItem item = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[] {"listItem1"}, "listViewItem1", false); - item.SubItems.Add("subItem1"); - item.SubItems.Add("subItem2"); - item.SubItems.Add("subItem3"); - listView.Items.Add(item); - - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, designerSerializationManager, String.Empty, 1); - } - } - } - - /// - /// Should include the column header and list view item creation. - /// - [Test] - public void GeneratedCode() - { - string expectedCode = " listViewItem1 = System::Windows::Forms::ListViewItem.new(System::Array[System::String].new(\r\n" + - " [\"listItem1\",\r\n" + - " \"subItem1\",\r\n" + - " \"subItem2\",\r\n" + - " \"subItem3\"]), -1)\r\n" + - " @listView1 = System::Windows::Forms::ListView.new()\r\n" + - " @columnHeader1 = System::Windows::Forms::ColumnHeader.new()\r\n" + - " @columnHeader2 = System::Windows::Forms::ColumnHeader.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # listView1\r\n" + - " # \r\n" + - " @listView1.Columns.AddRange(System::Array[System::Windows::Forms::ColumnHeader].new(\r\n" + - " [@columnHeader1,\r\n" + - " @columnHeader2]))\r\n" + - " @listView1.Items.AddRange(System::Array[System::Windows::Forms::ListViewItem].new(\r\n" + - " [listViewItem1]))\r\n" + - " @listView1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @listView1.Name = \"listView1\"\r\n" + - " @listView1.Size = System::Drawing::Size.new(204, 104)\r\n" + - " @listView1.TabIndex = 0\r\n" + - " @listView1.View = System::Windows::Forms::View.Details\r\n" + - " # \r\n" + - " # columnHeader1\r\n" + - " # \r\n" + - " @columnHeader1.Text = \"columnHeader1\"\r\n" + - " # \r\n" + - " # columnHeader2\r\n" + - " # \r\n" + - " @columnHeader2.Text = \"columnHeader2\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@listView1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateListViewWithImageListFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateListViewWithImageListFormTestFixture.cs deleted file mode 100644 index 2171a30714..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateListViewWithImageListFormTestFixture.cs +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateListViewWithImageListFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add list view. - ListView listView = (ListView)host.CreateComponent(typeof(ListView), "listView1"); - listView.TabIndex = 0; - listView.Location = new Point(0, 0); - listView.ClientSize = new Size(200, 100); - descriptors = TypeDescriptor.GetProperties(listView); - PropertyDescriptor descriptor = descriptors.Find("UseCompatibleStateImageBehavior", false); - descriptor.SetValue(listView, true); - descriptor = descriptors.Find("View", false); - descriptor.SetValue(listView, View.Details); - form.Controls.Add(listView); - - // Add ImageList. - Icon icon = new Icon(typeof(GenerateFormResourceTestFixture), "App.ico"); - ImageList imageList = (ImageList)host.CreateComponent(typeof(ImageList), "imageList1"); - imageList.Images.Add("App.ico", icon); - imageList.Images.Add("b.ico", icon); - imageList.Images.Add("c.ico", icon); - - DesignerSerializationManager designerSerializationManager = new DesignerSerializationManager(host); - IDesignerSerializationManager serializationManager = (IDesignerSerializationManager)designerSerializationManager; - using (designerSerializationManager.CreateSession()) { - // Add list view items. - ListViewItem item = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[] {"aaa"}, "listViewItem1", false); - item.ImageIndex = 1; - listView.Items.Add(item); - - ListViewItem item2 = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[] {"bbb"}, "listViewItem2", false); - item2.ImageKey = "App.ico"; - listView.Items.Add(item2); - - ListViewItem item3 = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[0], "listViewItem3", false); - item3.ImageIndex = 2; - listView.Items.Add(item3); - - ListViewItem item4 = (ListViewItem)serializationManager.CreateInstance(typeof(ListViewItem), new object[0], "listViewItem4", false); - item4.ImageKey = "b.ico"; - listView.Items.Add(item4); - - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager); - } - } - } - - /// - /// Should include the column header and list view item creation. - /// - [Test] - public void GenerateCode() - { - string expectedCode = "@components = System::ComponentModel::Container.new()\r\n" + - "listViewItem1 = System::Windows::Forms::ListViewItem.new(\"aaa\", 1)\r\n" + - "listViewItem2 = System::Windows::Forms::ListViewItem.new(\"bbb\", \"App.ico\")\r\n" + - "listViewItem3 = System::Windows::Forms::ListViewItem.new(\"\", 2)\r\n" + - "listViewItem4 = System::Windows::Forms::ListViewItem.new(\"\", \"b.ico\")\r\n" + - "resources = System::Resources::ResourceManager.new(\"MainForm\", System::Reflection::Assembly.GetEntryAssembly())\r\n" + - "@listView1 = System::Windows::Forms::ListView.new()\r\n" + - "@imageList1 = System::Windows::Forms::ImageList.new(@components)\r\n" + - "self.SuspendLayout()\r\n" + - "# \r\n" + - "# listView1\r\n" + - "# \r\n" + - "@listView1.Items.AddRange(System::Array[System::Windows::Forms::ListViewItem].new(\r\n" + - " [listViewItem1,\r\n" + - " listViewItem2,\r\n" + - " listViewItem3,\r\n" + - " listViewItem4]))\r\n" + - "@listView1.Location = System::Drawing::Point.new(0, 0)\r\n" + - "@listView1.Name = \"listView1\"\r\n" + - "@listView1.Size = System::Drawing::Size.new(204, 104)\r\n" + - "@listView1.TabIndex = 0\r\n" + - "@listView1.View = System::Windows::Forms::View.Details\r\n" + - "# \r\n" + - "# imageList1\r\n" + - "# \r\n" + - "@imageList1.ImageStream = resources.GetObject(\"imageList1.ImageStream\")\r\n" + - "@imageList1.TransparentColor = System::Drawing::Color.Transparent\r\n" + - "@imageList1.Images.SetKeyName(0, \"App.ico\")\r\n" + - "@imageList1.Images.SetKeyName(1, \"b.ico\")\r\n" + - "@imageList1.Images.SetKeyName(2, \"c.ico\")\r\n" + - "# \r\n" + - "# MainForm\r\n" + - "# \r\n" + - "self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - "self.Controls.Add(@listView1)\r\n" + - "self.Name = \"MainForm\"\r\n" + - "self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateLocalImageResourceTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateLocalImageResourceTestFixture.cs deleted file mode 100644 index 3ad8fe858d..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateLocalImageResourceTestFixture.cs +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Globalization; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateLocalImageResourceTestFixture - { - MockResourceWriter resourceWriter; - MockComponentCreator componentCreator; - string generatedRubyCode; - MockResourceWriter resourceWriter2; - MockComponentCreator componentCreator2; - Bitmap bitmap; - - [TestFixtureSetUp] - public void SetUpFixture() - { - resourceWriter = new MockResourceWriter(); - componentCreator = new MockComponentCreator(); - componentCreator.SetResourceWriter(resourceWriter); - - resourceWriter2 = new MockResourceWriter(); - componentCreator2 = new MockComponentCreator(); - componentCreator2.SetResourceWriter(resourceWriter2); - - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - host.AddService(typeof(IResourceService), componentCreator); - - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add picture box - PictureBox pictureBox = (PictureBox)host.CreateComponent(typeof(PictureBox), "pictureBox1"); - pictureBox.Location = new Point(0, 0); - bitmap = new Bitmap(10, 10); - pictureBox.Image = bitmap; - pictureBox.Size = new Size(100, 120); - pictureBox.TabIndex = 0; - form.Controls.Add(pictureBox); - - // Add bitmap to form. - form.BackgroundImage = new Bitmap(10, 10); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - - // Check that calling the GenerateInitializeComponentMethodBody also generates a resource file. - host.RemoveService(typeof(IResourceService)); - host.AddService(typeof(IResourceService), componentCreator2); - - serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " resources = System::Resources::ResourceManager.new(\"MainForm\", System::Reflection::Assembly.GetEntryAssembly())\r\n" + - " @pictureBox1 = System::Windows::Forms::PictureBox.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # pictureBox1\r\n" + - " # \r\n" + - " @pictureBox1.Image = resources.GetObject(\"pictureBox1.Image\")\r\n" + - " @pictureBox1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @pictureBox1.Name = \"pictureBox1\"\r\n" + - " @pictureBox1.Size = System::Drawing::Size.new(100, 120)\r\n" + - " @pictureBox1.TabIndex = 0\r\n" + - " @pictureBox1.TabStop = false\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.BackgroundImage = resources.GetObject(\"$this.BackgroundImage\")\r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@pictureBox1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - - [Test] - public void ResourceWriterRetrievedFromComponentCreator() - { - Assert.IsTrue(componentCreator.GetResourceWriterCalled); - } - - [Test] - public void CultureInfoInvariantCulturePassedToGetResourceWriter() - { - Assert.AreEqual(CultureInfo.InvariantCulture, componentCreator.CultureInfoPassedToGetResourceWriter); - } - - [Test] - public void ResourceWriterRetrievedFromComponentCreator2() - { - Assert.IsTrue(componentCreator2.GetResourceWriterCalled); - } - - [Test] - public void CultureInfoInvariantCulturePassedToGetResourceWriter2() - { - Assert.AreEqual(CultureInfo.InvariantCulture, componentCreator2.CultureInfoPassedToGetResourceWriter); - } - -// [Test] -// public void ResourceWriter2IsDisposed() -// { -// Assert.IsTrue(resourceWriter2.IsDisposed); -// } - - [Test] - public void BitmapAddedToResourceWriter() - { - Assert.IsTrue(Object.ReferenceEquals(bitmap, resourceWriter.GetResource("pictureBox1.Image"))); - } - - [Test] - public void ResourceWriterHasNonNullPictureBox1ImageResource() - { - Assert.IsNotNull(resourceWriter.GetResource("pictureBox1.Image")); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateMenuStripFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateMenuStripFormTestFixture.cs deleted file mode 100644 index b7a7575cbc..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateMenuStripFormTestFixture.cs +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Adding a MenuStrip control to a form in the designer generates code for a - /// miniToolStrip - System.Windows.Forms.Design.ToolStripTemplateNode+TransparentToolStrip() - /// This is a design time control and should be ignored. - /// - [TestFixture] - public class GenerateMenuStripFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add menu strip. - MenuStrip menuStrip = (MenuStrip)host.CreateComponent(typeof(MenuStrip), "menuStrip1"); - menuStrip.Text = "menuStrip1"; - menuStrip.TabIndex = 0; - menuStrip.Location = new Point(0, 0); - form.Controls.Add(menuStrip); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @menuStrip1 = System::Windows::Forms::MenuStrip.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # menuStrip1\r\n" + - " # \r\n" + - " @menuStrip1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @menuStrip1.Name = \"menuStrip1\"\r\n" + - " @menuStrip1.Size = System::Drawing::Size.new(200, 24)\r\n" + - " @menuStrip1.TabIndex = 0\r\n" + - " @menuStrip1.Text = \"menuStrip1\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@menuStrip1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " self.PerformLayout()\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateMenuStripItemsFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateMenuStripItemsFormTestFixture.cs deleted file mode 100644 index 4a8ce8bbdc..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateMenuStripItemsFormTestFixture.cs +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateMenuStripItemsFormTestFixture - { - string generatedRubyCode; - Size fileMenuItemSize; - Size openMenuItemSize; - Size exitMenuItemSize; - Size editMenuItemSize; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add menu strip. - MenuStrip menuStrip = (MenuStrip)host.CreateComponent(typeof(MenuStrip), "menuStrip1"); - menuStrip.Text = "menuStrip1"; - menuStrip.TabIndex = 0; - menuStrip.Location = new Point(0, 0); - menuStrip.Size = new System.Drawing.Size(200, 24); - - // Add menu strip items. - ToolStripMenuItem fileMenuItem = (ToolStripMenuItem)host.CreateComponent(typeof(ToolStripMenuItem), "fileToolStripMenuItem"); - fileMenuItem.Text = "&File"; - - ToolStripMenuItem openMenuItem = (ToolStripMenuItem)host.CreateComponent(typeof(ToolStripMenuItem), "openToolStripMenuItem"); - openMenuItem.Text = "&Open"; - - ToolStripMenuItem exitMenuItem = (ToolStripMenuItem)host.CreateComponent(typeof(ToolStripMenuItem), "exitToolStripMenuItem"); - exitMenuItem.Text = "E&xit"; - fileMenuItem.DropDownItems.Add(openMenuItem); - fileMenuItem.DropDownItems.Add(exitMenuItem); - - // Add non-sited component. - fileMenuItem.DropDownItems.Add(new ToolStripMenuItem()); - - menuStrip.Items.Add(fileMenuItem); - - ToolStripMenuItem editMenuItem = (ToolStripMenuItem)host.CreateComponent(typeof(ToolStripMenuItem), "editToolStripMenuItem"); - editMenuItem.Text = "&Edit"; - menuStrip.Items.Add(editMenuItem); - - form.Controls.Add(menuStrip); - - fileMenuItemSize = fileMenuItem.Size; - openMenuItemSize = openMenuItem.Size; - exitMenuItemSize = exitMenuItem.Size; - editMenuItemSize = editMenuItem.Size; - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @menuStrip1 = System::Windows::Forms::MenuStrip.new()\r\n" + - " @fileToolStripMenuItem = System::Windows::Forms::ToolStripMenuItem.new()\r\n" + - " @openToolStripMenuItem = System::Windows::Forms::ToolStripMenuItem.new()\r\n" + - " @exitToolStripMenuItem = System::Windows::Forms::ToolStripMenuItem.new()\r\n" + - " @editToolStripMenuItem = System::Windows::Forms::ToolStripMenuItem.new()\r\n" + - " @menuStrip1.SuspendLayout()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # menuStrip1\r\n" + - " # \r\n" + - " @menuStrip1.Items.AddRange(System::Array[System::Windows::Forms::ToolStripItem].new(\r\n" + - " [@fileToolStripMenuItem,\r\n" + - " @editToolStripMenuItem]))\r\n" + - " @menuStrip1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @menuStrip1.Name = \"menuStrip1\"\r\n" + - " @menuStrip1.Size = System::Drawing::Size.new(200, 24)\r\n" + - " @menuStrip1.TabIndex = 0\r\n" + - " @menuStrip1.Text = \"menuStrip1\"\r\n" + - " # \r\n" + - " # fileToolStripMenuItem\r\n" + - " # \r\n" + - " @fileToolStripMenuItem.DropDownItems.AddRange(System::Array[System::Windows::Forms::ToolStripItem].new(\r\n" + - " [@openToolStripMenuItem,\r\n" + - " @exitToolStripMenuItem]))\r\n" + - " @fileToolStripMenuItem.Name = \"fileToolStripMenuItem\"\r\n" + - " @fileToolStripMenuItem.Size = " + SizeToString(fileMenuItemSize) + "\r\n" + - " @fileToolStripMenuItem.Text = \"&File\"\r\n" + - " # \r\n" + - " # openToolStripMenuItem\r\n" + - " # \r\n" + - " @openToolStripMenuItem.Name = \"openToolStripMenuItem\"\r\n" + - " @openToolStripMenuItem.Size = " + SizeToString(openMenuItemSize) + "\r\n" + - " @openToolStripMenuItem.Text = \"&Open\"\r\n" + - " # \r\n" + - " # exitToolStripMenuItem\r\n" + - " # \r\n" + - " @exitToolStripMenuItem.Name = \"exitToolStripMenuItem\"\r\n" + - " @exitToolStripMenuItem.Size = " + SizeToString(exitMenuItemSize) + "\r\n" + - " @exitToolStripMenuItem.Text = \"E&xit\"\r\n" + - " # \r\n" + - " # editToolStripMenuItem\r\n" + - " # \r\n" + - " @editToolStripMenuItem.Name = \"editToolStripMenuItem\"\r\n" + - " @editToolStripMenuItem.Size = " + SizeToString(editMenuItemSize) + "\r\n" + - " @editToolStripMenuItem.Text = \"&Edit\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@menuStrip1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " @menuStrip1.ResumeLayout(false)\r\n" + - " @menuStrip1.PerformLayout()\r\n" + - " self.ResumeLayout(false)\r\n" + - " self.PerformLayout()\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - - string SizeToString(Size size) - { - return RubyPropertyValueAssignment.ToString(size); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateMinSizeFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateMinSizeFormTestFixture.cs deleted file mode 100644 index 9473ca1d3b..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateMinSizeFormTestFixture.cs +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that a form's MinimumSize, AutoScrollMinSize and AutoScrollMargin properties are generated - /// in the InitializeComponent method. - /// - [TestFixture] - public class GenerateMinSizeFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor descriptor = descriptors.Find("MinimumSize", false); - descriptor.SetValue(form, new Size(100, 200)); - descriptor = descriptors.Find("AutoScrollMinSize", false); - descriptor.SetValue(form, new Size(10, 20)); - descriptor = descriptors.Find("AutoScrollMargin", false); - descriptor.SetValue(form, new Size(11, 22)); - descriptor = descriptors.Find("AutoScroll", false); - descriptor.SetValue(form, false); - - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.AutoScrollMargin = System::Drawing::Size.new(11, 22)\r\n" + - " self.AutoScrollMinSize = System::Drawing::Size.new(10, 20)\r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.MinimumSize = System::Drawing::Size.new(100, 200)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateMonthCalendarTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateMonthCalendarTestFixture.cs deleted file mode 100644 index 5c7202275f..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateMonthCalendarTestFixture.cs +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateMonthCalendarTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add month calendar. - MonthCalendar calendar = (MonthCalendar)host.CreateComponent(typeof(MonthCalendar), "monthCalendar1"); - calendar.TabIndex = 0; - calendar.Location = new Point(0, 0); - calendar.AddMonthlyBoldedDate(new DateTime(2009, 1, 2)); - calendar.AddMonthlyBoldedDate(new DateTime(0)); - - form.Controls.Add(calendar); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @monthCalendar1 = System::Windows::Forms::MonthCalendar.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # monthCalendar1\r\n" + - " # \r\n" + - " @monthCalendar1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @monthCalendar1.MonthlyBoldedDates = System::Array[System::DateTime].new(\r\n" + - " [System::DateTime.new(2009, 1, 2, 0, 0, 0, 0),\r\n" + - " System::DateTime.new(0)])\r\n" + - " @monthCalendar1.Name = \"monthCalendar1\"\r\n" + - " @monthCalendar1.TabIndex = 0\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@monthCalendar1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateNestedPanelFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateNestedPanelFormTestFixture.cs deleted file mode 100644 index 93fa5d6092..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateNestedPanelFormTestFixture.cs +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Ensures that SuspendLayout and ResumeLayout methods are generated for a panel containing controls and sitting on top of - /// another panel. - /// - [TestFixture] - public class GenerateNestedPanelFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - Panel panel1 = (Panel)host.CreateComponent(typeof(Panel), "panel1"); - panel1.Location = new Point(0, 0); - panel1.TabIndex = 0; - panel1.Size = new Size(200, 220); - - Panel panel2 = (Panel)host.CreateComponent(typeof(Panel), "panel2"); - panel2.Location = new Point(10, 15); - panel2.TabIndex = 0; - panel2.Size = new Size(100, 120); - TextBox textBox = (TextBox)host.CreateComponent(typeof(TextBox), "textBox1"); - textBox.Location = new Point(5, 5); - textBox.TabIndex = 0; - textBox.Size = new Size(110, 20); - panel2.Controls.Add(textBox); - - panel1.Controls.Add(panel2); - form.Controls.Add(panel1); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @panel1 = System::Windows::Forms::Panel.new()\r\n" + - " @panel2 = System::Windows::Forms::Panel.new()\r\n" + - " @textBox1 = System::Windows::Forms::TextBox.new()\r\n" + - " @panel1.SuspendLayout()\r\n" + - " @panel2.SuspendLayout()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # panel1\r\n" + - " # \r\n" + - " @panel1.Controls.Add(@panel2)\r\n" + - " @panel1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @panel1.Name = \"panel1\"\r\n" + - " @panel1.Size = System::Drawing::Size.new(200, 220)\r\n" + - " @panel1.TabIndex = 0\r\n" + - " # \r\n" + - " # panel2\r\n" + - " # \r\n" + - " @panel2.Controls.Add(@textBox1)\r\n" + - " @panel2.Location = System::Drawing::Point.new(10, 15)\r\n" + - " @panel2.Name = \"panel2\"\r\n" + - " @panel2.Size = System::Drawing::Size.new(100, 120)\r\n" + - " @panel2.TabIndex = 0\r\n" + - " # \r\n" + - " # textBox1\r\n" + - " # \r\n" + - " @textBox1.Location = System::Drawing::Point.new(5, 5)\r\n" + - " @textBox1.Name = \"textBox1\"\r\n" + - " @textBox1.Size = System::Drawing::Size.new(110, 20)\r\n" + - " @textBox1.TabIndex = 0\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Controls.Add(@panel1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " @panel1.ResumeLayout(false)\r\n" + - " @panel2.ResumeLayout(false)\r\n" + - " @panel2.PerformLayout()\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GeneratePanelFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GeneratePanelFormTestFixture.cs deleted file mode 100644 index 49be687541..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GeneratePanelFormTestFixture.cs +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GeneratePanelFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - host.AddService(typeof(IEventBindingService), eventBindingService); - - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - Panel panel = (Panel)host.CreateComponent(typeof(Panel), "panel1"); - panel.Location = new Point(10, 15); - panel.Anchor = AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - panel.TabIndex = 0; - panel.Size = new Size(100, 120); - TextBox textBox = (TextBox)host.CreateComponent(typeof(TextBox), "textBox1"); - textBox.Location = new Point(5, 5); - textBox.TabIndex = 0; - textBox.Size = new Size(110, 20); - panel.Controls.Add(textBox); - - // Add an event handler to the panel to check that this code is generated - // before the text box is initialized. - EventDescriptorCollection events = TypeDescriptor.GetEvents(panel); - EventDescriptor clickEvent = events.Find("Click", false); - PropertyDescriptor clickEventProperty = eventBindingService.GetEventProperty(clickEvent); - clickEventProperty.SetValue(panel, "Panel1Click"); - - form.Controls.Add(panel); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = - " @panel1 = System::Windows::Forms::Panel.new()\r\n" + - " @textBox1 = System::Windows::Forms::TextBox.new()\r\n" + - " @panel1.SuspendLayout()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # panel1\r\n" + - " # \r\n" + - " @panel1.Anchor = System::Windows::Forms::AnchorStyles.Top | System::Windows::Forms::AnchorStyles.Bottom | System::Windows::Forms::AnchorStyles.Left | System::Windows::Forms::AnchorStyles.Right\r\n" + - " @panel1.Controls.Add(@textBox1)\r\n" + - " @panel1.Location = System::Drawing::Point.new(10, 15)\r\n" + - " @panel1.Name = \"panel1\"\r\n" + - " @panel1.Size = System::Drawing::Size.new(100, 120)\r\n" + - " @panel1.TabIndex = 0\r\n" + - " @panel1.Click { |sender, e| self.Panel1Click(sender, e) }\r\n" + - " # \r\n" + - " # textBox1\r\n" + - " # \r\n" + - " @textBox1.Location = System::Drawing::Point.new(5, 5)\r\n" + - " @textBox1.Name = \"textBox1\"\r\n" + - " @textBox1.Size = System::Drawing::Size.new(110, 20)\r\n" + - " @textBox1.TabIndex = 0\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Controls.Add(@panel1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " @panel1.ResumeLayout(false)\r\n" + - " @panel1.PerformLayout()\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GeneratePictureBoxBeginInitTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GeneratePictureBoxBeginInitTestFixture.cs deleted file mode 100644 index 01ec9787b2..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GeneratePictureBoxBeginInitTestFixture.cs +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.ComponentModel.Design.Serialization; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GeneratePictureBoxBeginInitTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - using (Form form = new Form()) { - form.Site = new MockSite(); - CodeMemberMethod method = CreateMethod(); - DesignerSerializationManager serializationManager = new DesignerSerializationManager(); - using (serializationManager.CreateSession()) { - generatedRubyCode = serializer.GenerateMethodBody(form, method, serializationManager, String.Empty, 0); - } - } - } - - CodeMemberMethod CreateMethod() - { - CodeMemberMethod method = new CodeMemberMethod(); - - // BeginInit method call. - CodeExpressionStatement statement = new CodeExpressionStatement(); - CodeMethodInvokeExpression methodInvoke = new CodeMethodInvokeExpression(); - statement.Expression = methodInvoke; - - CodeMethodReferenceExpression methodRef = new CodeMethodReferenceExpression(); - methodRef.MethodName = "BeginInit"; - - CodeCastExpression cast = new CodeCastExpression(); - cast.TargetType = new CodeTypeReference(); - cast.TargetType.BaseType = "System.ComponentModel.ISupportInitialize"; - - CodeFieldReferenceExpression fieldRef = new CodeFieldReferenceExpression(); - fieldRef.FieldName = "pictureBox1"; - fieldRef.TargetObject = new CodeThisReferenceExpression(); - cast.Expression = fieldRef; - - methodRef.TargetObject = cast; - methodInvoke.Method = methodRef; - - method.Statements.Add(statement); - return method; - } - - [Test] - public void GeneratedCode() - { - string expectedCode = - "@pictureBox1.clr_member(System::ComponentModel::ISupportInitialize, :BeginInit).call()\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateRichTextBoxTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateRichTextBoxTestFixture.cs deleted file mode 100644 index f7d3602468..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateRichTextBoxTestFixture.cs +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that multiline text is correctly generated for the RichTextBox. - /// - [TestFixture] - public class GenerateRichTextBoxTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - RichTextBox textBox = (RichTextBox)host.CreateComponent(typeof(RichTextBox), "richTextBox1"); - textBox.Size = new Size(110, 20); - textBox.TabIndex = 1; - textBox.Location = new Point(10, 10); - textBox.Text = "abc\r\n" + - "def\r\n" + - "ghi\r\n"; - - form.Controls.Add(textBox); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @richTextBox1 = System::Windows::Forms::RichTextBox.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # richTextBox1\r\n" + - " # \r\n" + - " @richTextBox1.Location = System::Drawing::Point.new(10, 10)\r\n" + - " @richTextBox1.Name = \"richTextBox1\"\r\n" + - " @richTextBox1.Size = System::Drawing::Size.new(110, 20)\r\n" + - " @richTextBox1.TabIndex = 1\r\n" + - " @richTextBox1.Text = \"\"\"abc\n" + - "def\n" + - "ghi\n" + - "\"\"\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Controls.Add(@richTextBox1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateRightToLeftFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateRightToLeftFormTestFixture.cs deleted file mode 100644 index 381074132c..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateRightToLeftFormTestFixture.cs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateRightToLeftFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor doubleBufferedPropertyDescriptor = descriptors.Find("RightToLeft", false); - doubleBufferedPropertyDescriptor.SetValue(form, RightToLeft.Yes); - - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.RightToLeft = System::Windows::Forms::RightToLeft.Yes\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateSimpleFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateSimpleFormTestFixture.cs deleted file mode 100644 index 3297f0b1fa..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateSimpleFormTestFixture.cs +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateSimpleFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateTableLayoutPanelTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateTableLayoutPanelTestFixture.cs deleted file mode 100644 index b9ccafd810..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateTableLayoutPanelTestFixture.cs +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateTableLayoutPanelTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add table layout panel. - TableLayoutPanel tableLayoutPanel1 = (TableLayoutPanel)host.CreateComponent(typeof(TableLayoutPanel), "tableLayoutPanel1"); - tableLayoutPanel1.ColumnCount = 2; - tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F)); - tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 60F)); - tableLayoutPanel1.Location = new Point(0, 0); - tableLayoutPanel1.RowCount = 2; - tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F)); - tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 25F)); - tableLayoutPanel1.Size = new Size(200, 100); - tableLayoutPanel1.TabIndex = 0; - - form.Controls.Add(tableLayoutPanel1); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @tableLayoutPanel1 = System::Windows::Forms::TableLayoutPanel.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # tableLayoutPanel1\r\n" + - " # \r\n" + - " @tableLayoutPanel1.ColumnCount = 2\r\n" + - " @tableLayoutPanel1.ColumnStyles.Add(System::Windows::Forms::ColumnStyle.new(System::Windows::Forms::SizeType.Percent, 40))\r\n" + - " @tableLayoutPanel1.ColumnStyles.Add(System::Windows::Forms::ColumnStyle.new(System::Windows::Forms::SizeType.Percent, 60))\r\n" + - " @tableLayoutPanel1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @tableLayoutPanel1.Name = \"tableLayoutPanel1\"\r\n" + - " @tableLayoutPanel1.RowCount = 2\r\n" + - " @tableLayoutPanel1.RowStyles.Add(System::Windows::Forms::RowStyle.new(System::Windows::Forms::SizeType.Absolute, 20))\r\n" + - " @tableLayoutPanel1.RowStyles.Add(System::Windows::Forms::RowStyle.new(System::Windows::Forms::SizeType.Absolute, 25))\r\n" + - " @tableLayoutPanel1.Size = System::Drawing::Size.new(200, 100)\r\n" + - " @tableLayoutPanel1.TabIndex = 0\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@tableLayoutPanel1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateTextBoxFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateTextBoxFormTestFixture.cs deleted file mode 100644 index 78f5a5c937..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateTextBoxFormTestFixture.cs +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateTextBoxFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - TextBox textBox = (TextBox)host.CreateComponent(typeof(TextBox), "textBox1"); - textBox.Size = new Size(110, 20); - textBox.TabIndex = 1; - textBox.Location = new Point(10, 10); - - form.Controls.Add(textBox); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @textBox1 = System::Windows::Forms::TextBox.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # textBox1\r\n" + - " # \r\n" + - " @textBox1.Location = System::Drawing::Point.new(10, 10)\r\n" + - " @textBox1.Name = \"textBox1\"\r\n" + - " @textBox1.Size = System::Drawing::Size.new(110, 20)\r\n" + - " @textBox1.TabIndex = 1\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Controls.Add(@textBox1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " self.PerformLayout()\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateTimerTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateTimerTestFixture.cs deleted file mode 100644 index 2865d303ce..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateTimerTestFixture.cs +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateTimerTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - Timer timer = (Timer)host.CreateComponent(typeof(Timer), "timer1"); - descriptors = TypeDescriptor.GetProperties(timer); - namePropertyDescriptor = descriptors.Find("Interval", false); - namePropertyDescriptor.SetValue(timer, 1000); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @components = System::ComponentModel::Container.new()\r\n" + - " @timer1 = System::Windows::Forms::Timer.new(@components)\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # timer1\r\n" + - " # \r\n" + - " @timer1.Interval = 1000\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateToolTipFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateToolTipFormTestFixture.cs deleted file mode 100644 index 46f196342d..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateToolTipFormTestFixture.cs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateToolTipFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor descriptor = descriptors.Find("Name", false); - descriptor.SetValue(form, "MainForm"); - - ToolTip toolTip = (ToolTip)host.CreateComponent(typeof(ToolTip), "toolTip1"); - toolTip.SetToolTip(form, "test"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @components = System::ComponentModel::Container.new()\r\n" + - " @toolTip1 = System::Windows::Forms::ToolTip.new(@components)\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " @toolTip1.SetToolTip(self, \"test\")\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateTreeViewTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateTreeViewTestFixture.cs deleted file mode 100644 index f1bca228ab..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateTreeViewTestFixture.cs +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class GenerateTreeViewTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add tree view. - TreeView treeView = (TreeView)host.CreateComponent(typeof(TreeView), "treeView1"); - treeView.LineColor = Color.Black; - treeView.Location = new Point(0, 0); - treeView.Size = new Size(100, 100); - - DesignerSerializationManager designerSerializationManager = new DesignerSerializationManager(host); - IDesignerSerializationManager serializationManager = (IDesignerSerializationManager)designerSerializationManager; - using (designerSerializationManager.CreateSession()) { - - // Add first root node. - TreeNode firstRootNode = (TreeNode)serializationManager.CreateInstance(typeof(TreeNode), new object[0], "treeNode3", false); - firstRootNode.Name = "RootNode0"; - firstRootNode.Text = "RootNode0.Text"; - treeView.Nodes.Add(firstRootNode); - - // Add first child node. - TreeNode firstChildNode = (TreeNode)serializationManager.CreateInstance(typeof(TreeNode), new object[0], "treeNode2", false); - firstChildNode.Name = "ChildNode0"; - firstChildNode.Text = "ChildNode0.Text"; - firstRootNode.Nodes.Add(firstChildNode); - - // Add second child node. - TreeNode secondChildNode = (TreeNode)serializationManager.CreateInstance(typeof(TreeNode), new object[0], "treeNode1", false); - secondChildNode.Name = "ChildNode1"; - secondChildNode.Text = "ChildNode1.Text"; - firstChildNode.Nodes.Add(secondChildNode); - - form.Controls.Add(treeView); - - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, designerSerializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " treeNode1 = System::Windows::Forms::TreeNode.new(\"ChildNode1.Text\")\r\n" + - " treeNode2 = System::Windows::Forms::TreeNode.new(\"ChildNode0.Text\", System::Array[System::Windows::Forms::TreeNode].new(\r\n" + - " [treeNode1]))\r\n" + - " treeNode3 = System::Windows::Forms::TreeNode.new(\"RootNode0.Text\", System::Array[System::Windows::Forms::TreeNode].new(\r\n" + - " [treeNode2]))\r\n" + - " @treeView1 = System::Windows::Forms::TreeView.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # treeView1\r\n" + - " # \r\n" + - " @treeView1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @treeView1.Name = \"treeView1\"\r\n" + - " treeNode1.Name = \"ChildNode1\"\r\n" + - " treeNode1.Text = \"ChildNode1.Text\"\r\n" + - " treeNode2.Name = \"ChildNode0\"\r\n" + - " treeNode2.Text = \"ChildNode0.Text\"\r\n" + - " treeNode3.Name = \"RootNode0\"\r\n" + - " treeNode3.Text = \"RootNode0.Text\"\r\n" + - " @treeView1.Nodes.AddRange(System::Array[System::Windows::Forms::TreeNode].new(\r\n" + - " [treeNode3]))\r\n" + - " @treeView1.Size = System::Drawing::Size.new(100, 100)\r\n" + - " @treeView1.TabIndex = 0\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@treeView1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateUserControlWithNullPropertyValueTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateUserControlWithNullPropertyValueTests.cs deleted file mode 100644 index cce4252bfa..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GenerateUserControlWithNullPropertyValueTests.cs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.Scripting; -using ICSharpCode.Scripting.Tests.Designer; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that a null property value does not cause a NullReferenceException. - /// - [TestFixture] - public class GenerateUserControlWithNullPropertyValueTests : GenerateUserControlWithNullPropertyValueTestsBase - { - [Test] - public void GeneratedCode() - { - string expectedCode = - "@userControl1 = ICSharpCode::Scripting::Tests::Utils::NullPropertyUserControl.new()\r\n" + - "self.SuspendLayout()\r\n" + - "# \r\n" + - "# userControl1\r\n" + - "# \r\n" + - "@userControl1.FooBar = nil\r\n" + - "@userControl1.Location = System::Drawing::Point.new(0, 0)\r\n" + - "@userControl1.Name = \"userControl1\"\r\n" + - "@userControl1.Size = System::Drawing::Size.new(10, 10)\r\n" + - "@userControl1.TabIndex = 0\r\n" + - "# \r\n" + - "# MainControl\r\n" + - "# \r\n" + - "self.Controls.Add(@userControl1)\r\n" + - "self.Name = \"MainControl\"\r\n" + - "self.Size = System::Drawing::Size.new(200, 300)\r\n" + - "self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedCode, generatedCode); - } - - protected override IScriptingCodeDomSerializer CreateSerializer() - { - return RubyCodeDomSerializerHelper.CreateSerializer(); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GeneratedControlOrderingTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GeneratedControlOrderingTestFixture.cs deleted file mode 100644 index 391c493baf..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/GeneratedControlOrderingTestFixture.cs +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the controls are initialized in the order they were put on the form. - /// The forms designer has them in reverse order in the Controls collection. - /// - [TestFixture] - public class GeneratedControlOrderingTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(284, 264); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - Button button = (Button)host.CreateComponent(typeof(Button), "button1"); - button.Location = new Point(0, 0); - button.Size = new Size(10, 10); - button.Text = "button1"; - button.TabIndex = 0; - button.UseCompatibleTextRendering = false; - form.Controls.Add(button); - - RadioButton radioButton = (RadioButton)host.CreateComponent(typeof(RadioButton), "radioButton1"); - radioButton.Location = new Point(20, 0); - radioButton.Size = new Size(10, 10); - radioButton.Text = "radioButton1"; - radioButton.TabIndex = 1; - radioButton.UseCompatibleTextRendering = false; - form.Controls.Add(radioButton); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = " @button1 = System::Windows::Forms::Button.new()\r\n" + - " @radioButton1 = System::Windows::Forms::RadioButton.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # button1\r\n" + - " # \r\n" + - " @button1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @button1.Name = \"button1\"\r\n" + - " @button1.Size = System::Drawing::Size.new(10, 10)\r\n" + - " @button1.TabIndex = 0\r\n" + - " @button1.Text = \"button1\"\r\n" + - " # \r\n" + - " # radioButton1\r\n" + - " # \r\n" + - " @radioButton1.Location = System::Drawing::Point.new(20, 0)\r\n" + - " @radioButton1.Name = \"radioButton1\"\r\n" + - " @radioButton1.Size = System::Drawing::Size.new(10, 10)\r\n" + - " @radioButton1.TabIndex = 1\r\n" + - " @radioButton1.Text = \"radioButton1\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Controls.Add(@button1)\r\n" + - " self.Controls.Add(@radioButton1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/IgnoreDesignTimePropertiesTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/IgnoreDesignTimePropertiesTestFixture.cs deleted file mode 100644 index d412f75d38..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/IgnoreDesignTimePropertiesTestFixture.cs +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Designer -{ - /// - /// The Ruby form code generator should ignore any design time properties (e.g. Locked) of the form. - /// These are put in the .resx file not the source code. - /// - [TestFixture] - public class IgnoreDesignTimePropertiesTestFixture - { - string expectedCode = " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - string generatedRubyCode; - - /// - /// After a form is loaded onto a DesignSurface this checks that the RubyForm does not try to - /// add design time properties and does not throw a null reference exception. - /// - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void DesignTimePropertyIsIgnoredInGeneratedCode() - { - Assert.AreEqual(expectedCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/InsertEventHandlerTestFixtureBase.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/InsertEventHandlerTestFixtureBase.cs deleted file mode 100644 index 88e3ccea48..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/InsertEventHandlerTestFixtureBase.cs +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.FormsDesigner; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Base class that tests the RubyDesignerGenerator.InsertEventComponent method. - /// - public class InsertEventHandlerTestFixtureBase - { - protected string file; - protected int position; - protected bool insertedEventHandler; - protected MockTextEditorViewContent mockViewContent; - protected DerivedFormDesignerViewContent viewContent; - protected string fileName = @"C:\Projects\Ruby\mainform.rb"; - protected DerivedRubyDesignerGenerator generator; - protected MockTextEditorOptions textEditorOptions; - - [TestFixtureSetUp] - public void SetUpFixture() - { - textEditorOptions = new MockTextEditorOptions(); - generator = new DerivedRubyDesignerGenerator(textEditorOptions); - mockViewContent = new MockTextEditorViewContent(); - viewContent = new DerivedFormDesignerViewContent(mockViewContent, new MockOpenedFile(fileName)); - generator.Attach(viewContent); - viewContent.DesignerCodeFileContent = GetTextEditorCode(); - - RubyParser parser = new RubyParser(); - ICompilationUnit parserCompilationUnit = parser.Parse(new DefaultProjectContent(), fileName, GetTextEditorCode()); - ParseInformation parseInfo = new ParseInformation(parserCompilationUnit); - generator.ParseInfoToReturnFromParseFileMethod = parseInfo; - - AfterSetUpFixture(); - } - - /// - /// Called at the end of the SetUpFixture method. - /// - public virtual void AfterSetUpFixture() - { - } - - /// - /// Gets the form's code. - /// - protected virtual string GetTextEditorCode() - { - return String.Empty; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/InsertEventHandlerWithSpaceIndentTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/InsertEventHandlerWithSpaceIndentTestFixture.cs deleted file mode 100644 index 93b26d6cb8..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/InsertEventHandlerWithSpaceIndentTestFixture.cs +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.FormsDesigner; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests the RubyDesignerGenerator uses the text editor properties for indentation when - /// inserting an event handler into the document. - /// - [TestFixture] - public class InsertEventHandlerWithSpaceIndentTestFixture : InsertEventHandlerTestFixtureBase - { - public override void AfterSetUpFixture() - { - textEditorOptions.ConvertTabsToSpaces = true; - textEditorOptions.IndentationSize = 4; - MockEventDescriptor mockEventDescriptor = new MockEventDescriptor("Click"); - insertedEventHandler = generator.InsertComponentEvent(null, mockEventDescriptor, "button1_click", String.Empty, out file, out position); - } - - [Test] - public void ExpectedCodeAfterEventHandlerInserted() - { - string expectedCode = - "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MainForm < Form\r\n" + - " def initialize()\r\n" + - " self.InitializeComponents()\r\n" + - " end\r\n" + - " \r\n" + - " def InitializeComponents()\r\n" + - " @button1 = System::Windows::Forms::Button.new()\r\n" + - " self.Controls.Add(@button1)\r\n" + - " end\r\n" + - "\r\n" + - " def button1_click(sender, e)\r\n" + - " \r\n" + - " end\r\n" + - "end"; - Assert.AreEqual(expectedCode, viewContent.DesignerCodeFileContent, viewContent.DesignerCodeFileContent); - } - - /// - /// Note that the text editor code already has the - /// statement: - /// - /// "self._button1.Click += button1_click" - /// - /// This is generated by the form designer framework and not - /// by the designer generator. - /// - protected override string GetTextEditorCode() - { - return "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MainForm < Form\r\n" + - " def initialize()\r\n" + - " self.InitializeComponents()\r\n" + - " end\r\n" + - " \r\n" + - " def InitializeComponents()\r\n" + - " @button1 = System::Windows::Forms::Button.new()\r\n" + - " self.Controls.Add(@button1)\r\n" + - " end\r\n" + - "end"; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/InsertNewEventHandlerTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/InsertNewEventHandlerTestFixture.cs deleted file mode 100644 index f4249d2d95..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/InsertNewEventHandlerTestFixture.cs +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.FormsDesigner; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests the RubyDesignerGenerator inserts an event handler - /// into the document correctly. - /// - [TestFixture] - public class InsertNewEventHandlerTestFixture : InsertEventHandlerTestFixtureBase - { - public override void AfterSetUpFixture() - { - MockEventDescriptor mockEventDescriptor = new MockEventDescriptor("Click"); - insertedEventHandler = generator.InsertComponentEvent(null, mockEventDescriptor, "button1_click", String.Empty, out file, out position); - } - - [Test] - public void ExpectedCodeAfterEventHandlerInserted() - { - string expectedCode = - "class MainForm < System::Windows::Forms::Form\r\n" + - "\tdef initialize()\r\n" + - "\t\tself.InitializeComponents()\r\n" + - "\tend\r\n" + - "\tdef InitializeComponents()\r\n" + - "\t\t@button1 = System::Windows::Forms::Button.new()\r\n" + - "\t\tself.Controls.Add(@button1)\r\n" + - "\tend\r\n" + - "\r\n" + - "\tdef button1_click(sender, e)\r\n" + - "\t\t\r\n" + - "\tend\r\n" + - "end\r\n"; - - Assert.AreEqual(expectedCode, viewContent.DesignerCodeFileContent, viewContent.DesignerCodeFileContent); - } - - protected override string GetTextEditorCode() - { - return - "class MainForm < System::Windows::Forms::Form\r\n" + - "\tdef initialize()\r\n" + - "\t\tself.InitializeComponents()\r\n" + - "\tend\r\n" + - "\tdef InitializeComponents()\r\n" + - "\t\t@button1 = System::Windows::Forms::Button.new()\r\n" + - "\t\tself.Controls.Add(@button1)\r\n" + - "\tend\r\n" + - "end\r\n"; - } - - /// - /// The generator should call the FormDesignerViewContent's - /// MergeFormChanges method to make sure the latest version of the - /// code is in the text editor. - /// - [Test] - public void MergeFormChangesCalled() - { - Assert.IsTrue(viewContent.MergeFormChangesCalled); - } - - [Test] - public void InsertedEventHandlerReturnedTrue() - { - Assert.IsTrue(insertedEventHandler); - } - - [Test] - public void PositionEventHandlerInserted() - { - // The position is actually a line number. So - // it should be set to line 9. - Assert.AreEqual(9, position); - } - - [Test] - public void FileNameSameAsDocumentFileName() - { - Assert.AreEqual(viewContent.DesignerCodeFile.FileName.ToString(), file); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/InsertSecondEventHandlerTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/InsertSecondEventHandlerTestFixture.cs deleted file mode 100644 index afee5be210..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/InsertSecondEventHandlerTestFixture.cs +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.FormsDesigner; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests the RubyDesignerGenerator adds an extra new line between the previous event handler - /// and the new one inserted. - /// - [TestFixture] - public class InsertSecondEventHandlerTestFixture : InsertEventHandlerTestFixtureBase - { - public override void AfterSetUpFixture() - { - MockEventDescriptor mockEventDescriptor = new MockEventDescriptor("Click"); - generator.InsertComponentEvent(null, mockEventDescriptor, "button1_click", String.Empty, out file, out position); - insertedEventHandler = generator.InsertComponentEvent(null, mockEventDescriptor, "button2_click", String.Empty, out file, out position); - } - - [Test] - public void ExpectedCodeAfterEventHandlerInserted() - { - string expectedCode = - "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MainForm < Form\r\n" + - "\tdef initialize()\r\n" + - "\t\tself.InitializeComponents()\r\n" + - "\tend\r\n" + - "\t\r\n" + - "\tdef InitializeComponents()\r\n" + - "\t\t@button1 = System::Windows::Forms::Button.new()\r\n" + - "\t\tself.Controls.Add(@button1)\r\n" + - "\tend\r\n" + - "\r\n" + - "\tdef button1_click(sender, e)\r\n" + - "\t\t\r\n" + - "\tend\r\n" + - "\r\n" + - "\tdef button2_click(sender, e)\r\n" + - "\t\t\r\n" + - "\tend\r\n" + - "end"; - - Assert.AreEqual(expectedCode, viewContent.DesignerCodeFileContent); - } - - protected override string GetTextEditorCode() - { - return - "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MainForm < Form\r\n" + - "\tdef initialize()\r\n" + - "\t\tself.InitializeComponents()\r\n" + - "\tend\r\n" + - "\t\r\n" + - "\tdef InitializeComponents()\r\n" + - "\t\t@button1 = System::Windows::Forms::Button.new()\r\n" + - "\t\tself.Controls.Add(@button1)\r\n" + - "\tend\r\n" + - "end"; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/IsFormDesignableTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/IsFormDesignableTestFixture.cs deleted file mode 100644 index 1454f10216..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/IsFormDesignableTestFixture.cs +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.FormsDesigner; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the SecondaryDisplayBinding detects that the form - /// is designable: - /// - /// 1) Has an InitializeComponents method. - /// 2) Has a base class of Form. - /// - [TestFixture] - public class IsFormDesignableTestFixture - { - IMethod initializeComponentsMethod; - protected IClass mainFormClass; - ParseInformation parseInfo; - - [TestFixtureSetUp] - public void SetUpFixture() - { - RubyParser parser = new RubyParser(); - MockProjectContent mockProjectContent = new MockProjectContent(); - ICompilationUnit compilationUnit = parser.Parse(mockProjectContent, @"C:\Projects\test\MainForm.py", GetRubyCode()); - - parseInfo = new ParseInformation(compilationUnit); - - if (compilationUnit.Classes.Count > 0) { - mainFormClass = compilationUnit.Classes[0]; - initializeComponentsMethod = FormsDesignerSecondaryDisplayBinding.GetInitializeComponents(mainFormClass); - } - } - - [Test] - public void InitializeComponentsIsNotNull() - { - Assert.IsNotNull(initializeComponentsMethod); - } - - [Test] - public void BaseClassIsForm() - { - Assert.IsTrue(FormsDesignerSecondaryDisplayBinding.BaseClassIsFormOrControl(mainFormClass)); - } - - [Test] - public void IsDesignable() - { - Assert.IsTrue(FormsDesignerSecondaryDisplayBinding.IsDesignable(parseInfo)); - } - - protected virtual string GetRubyCode() - { - return "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MainForm < Form\r\n" + - " def initialize()\r\n" + - " self.InitializeComponent()\r\n" + - " end\r\n" + - "\r\n" + - " def InitializeComponent()\r\n" + - " end\r\n" + - "end\r\n" + - "\r\n"; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/IsFullyQualifiedBaseClassFormDesignableTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/IsFullyQualifiedBaseClassFormDesignableTestFixture.cs deleted file mode 100644 index 374b4db3f4..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/IsFullyQualifiedBaseClassFormDesignableTestFixture.cs +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.FormsDesigner; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the SecondaryDisplayBinding detects that the form - /// is designable when the base class is fully qualified. - /// - [TestFixture] - public class IsFullyQualifiedBaseClassFormDesignableTestFixture : IsFormDesignableTestFixture - { - protected override string GetRubyCode() - { - return "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MainForm < System::Windows::Forms::Form\r\n" + - " def initialize()\r\n" + - " self.InitializeComponent()\r\n" + - " end\r\n" + - "\r\n" + - " def InitializeComponent()\r\n" + - " end\r\n" + - "end\r\n" + - "\r\n"; - } - - [Test] - public void MainFormClassBaseTypeIsForm() - { - IReturnType baseType = null; - foreach (IReturnType returnType in mainFormClass.BaseTypes) { - if (returnType.Name == "Form") { - baseType = returnType; - break; - } - } - Assert.IsNotNull(baseType); - } - - [Test] - public void MainFormClassBaseTypeFullNameIsSystemWindowsFormsForm() - { - IReturnType baseType = null; - foreach (IReturnType returnType in mainFormClass.BaseTypes) { - if (returnType.FullyQualifiedName == "System.Windows.Forms.Form") { - baseType = returnType; - break; - } - } - Assert.IsNotNull(baseType); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadAcceptButtonFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadAcceptButtonFormTestFixture.cs deleted file mode 100644 index 5324a01703..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadAcceptButtonFormTestFixture.cs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadAcceptButtonFormTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return "class TestForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @button1 = System::Windows::Forms::Button.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # button1\r\n" + - " # \r\n" + - " @button1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @button1.Name = \"button1\"\r\n" + - " @button1.Size = System::Drawing::Size.new(10, 10)\r\n" + - " @button1.TabIndex = 0\r\n" + - " @button1.Text = \"button1\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.AcceptButton = @button1\r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.Controls.Add(@button1)\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - [Test] - public void FormHasAcceptButton() - { - Assert.IsNotNull(Form.AcceptButton); - } - - [Test] - public void AcceptButtonPropertyDescriptorObjectMatchesButton() - { - Button button = Form.Controls[0] as Button; - PropertyDescriptor p = TypeDescriptor.GetProperties(Form).Find("AcceptButton", true); - Assert.AreEqual(button, p.GetValue(Form)); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadAccessibleRoleTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadAccessibleRoleTestFixture.cs deleted file mode 100644 index 0d14087452..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadAccessibleRoleTestFixture.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Drawing; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the Form's AccessibleRole property can be loaded into the designer. - /// - [TestFixture] - public class LoadAccessibleRoleTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return "class TestForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # TestForm\r\n" + - " # \r\n" + - " self.AccessibleRole = System::Windows::Forms::AccessibleRole.None\r\n" + - " self.Name = \"TestForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - [Test] - public void AccessibleRoleIsNone() - { - Assert.AreEqual(AccessibleRole.None, Form.AccessibleRole); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadAnchorStylesTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadAnchorStylesTestFixture.cs deleted file mode 100644 index c59fa62d69..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadAnchorStylesTestFixture.cs +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadAnchorStylesTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return "class TestForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @textBox1 = System::Windows::Forms::TextBox.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # textBox1\r\n" + - " # \r\n" + - " @textBox1.Name = \"textBoxName\"\r\n" + - " @textBox1.Anchor = System::Windows::Forms::AnchorStyles.Top | System::Windows::Forms::AnchorStyles.Bottom | System::Windows::Forms::AnchorStyles.Left\r\n" + - " # \r\n" + - " # TestForm\r\n" + - " # \r\n" + - " self.Name = \"TestForm\"\r\n" + - " self.Controls.Add(@textBox1)\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - [TestFixtureSetUp] - public new void SetUpFixture() - { - base.SetUpFixture(); - } - - [Test] - public void TextBoxAnchorStyle() - { - AnchorStyles style = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; - TextBox textBox = Form.Controls[0] as TextBox; - Assert.AreEqual(style, textBox.Anchor); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadBindingNavigatorTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadBindingNavigatorTestFixture.cs deleted file mode 100644 index fb062724e0..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadBindingNavigatorTestFixture.cs +++ /dev/null @@ -1,218 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Globalization; -using System.IO; -using System.Resources; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the designer load handles the Binding Navigator having separator toolstrips with the same Name - /// property text "bindingNavigatorSeparator" - /// - [TestFixture] - public class LoadBindingNavigatorTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class TestForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @components = System::ComponentModel::Container.new()\r\n" + - " resources = System::Resources::ResourceManager.new(\"RubyWinFoo.MainForm\", System::Reflection::Assembly.GetEntryAssembly())\r\n" + - " @bindingNavigator1 = System::Windows::Forms::BindingNavigator.new(@components)\r\n" + - " @bindingNavigatorMoveFirstItem = System::Windows::Forms::ToolStripButton.new()\r\n" + - " @bindingNavigatorMovePreviousItem = System::Windows::Forms::ToolStripButton.new()\r\n" + - " @bindingNavigatorSeparator = System::Windows::Forms::ToolStripSeparator.new()\r\n" + - " @bindingNavigatorPositionItem = System::Windows::Forms::ToolStripTextBox.new()\r\n" + - " @bindingNavigatorCountItem = System::Windows::Forms::ToolStripLabel.new()\r\n" + - " @bindingNavigatorSeparator1 = System::Windows::Forms::ToolStripSeparator.new()\r\n" + - " @bindingNavigatorMoveNextItem = System::Windows::Forms::ToolStripButton.new()\r\n" + - " @bindingNavigatorMoveLastItem = System::Windows::Forms::ToolStripButton.new()\r\n" + - " @bindingNavigatorSeparator2 = System::Windows::Forms::ToolStripSeparator.new()\r\n" + - " @bindingNavigatorAddNewItem = System::Windows::Forms::ToolStripButton.new()\r\n" + - " @bindingNavigatorDeleteItem = System::Windows::Forms::ToolStripButton.new()\r\n" + - " @bindingNavigator1.clr_member(System::ComponentModel::ISupportInitialize, :BeginInit).call()\r\n" + - " @bindingNavigator1.SuspendLayout()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # bindingNavigator1\r\n" + - " # \r\n" + - " @bindingNavigator1.AddNewItem = @bindingNavigatorAddNewItem\r\n" + - " @bindingNavigator1.CountItem = @bindingNavigatorCountItem\r\n" + - " @bindingNavigator1.DeleteItem = @bindingNavigatorDeleteItem\r\n" + - " @bindingNavigator1.Items.AddRange(System::Array[System::Windows::Forms::ToolStripItem].new(\r\n" + - " [@bindingNavigatorMoveFirstItem,\r\n" + - " @bindingNavigatorMovePreviousItem,\r\n" + - " @bindingNavigatorSeparator,\r\n" + - " @bindingNavigatorPositionItem,\r\n" + - " @bindingNavigatorCountItem,\r\n" + - " @bindingNavigatorSeparator1,\r\n" + - " @bindingNavigatorMoveNextItem,\r\n" + - " @bindingNavigatorMoveLastItem,\r\n" + - " @bindingNavigatorSeparator2,\r\n" + - " @bindingNavigatorAddNewItem,\r\n" + - " @bindingNavigatorDeleteItem]))\r\n" + - " @bindingNavigator1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @bindingNavigator1.MoveFirstItem = @bindingNavigatorMoveFirstItem\r\n" + - " @bindingNavigator1.MoveLastItem = @bindingNavigatorMoveLastItem\r\n" + - " @bindingNavigator1.MoveNextItem = @bindingNavigatorMoveNextItem\r\n" + - " @bindingNavigator1.MovePreviousItem = @bindingNavigatorMovePreviousItem\r\n" + - " @bindingNavigator1.Name = \"bindingNavigator1\"\r\n" + - " @bindingNavigator1.PositionItem = @bindingNavigatorPositionItem\r\n" + - " @bindingNavigator1.Size = System::Drawing::Size.new(343, 25)\r\n" + - " @bindingNavigator1.TabIndex = 0\r\n" + - " @bindingNavigator1.Text = \"bindingNavigator1\"\r\n" + - " # \r\n" + - " # bindingNavigatorMoveFirstItem\r\n" + - " # \r\n" + - " @bindingNavigatorMoveFirstItem.DisplayStyle = System::Windows::Forms::ToolStripItemDisplayStyle.Image\r\n" + - " @bindingNavigatorMoveFirstItem.Image = resources.GetObject(\"bindingNavigatorMoveFirstItem.Image\")\r\n" + - " @bindingNavigatorMoveFirstItem.Name = \"bindingNavigatorMoveFirstItem\"\r\n" + - " @bindingNavigatorMoveFirstItem.RightToLeftAutoMirrorImage = true\r\n" + - " @bindingNavigatorMoveFirstItem.Size = System::Drawing::Size.new(23, 22)\r\n" + - " @bindingNavigatorMoveFirstItem.Text = \"Move first\"\r\n" + - " # \r\n" + - " # bindingNavigatorMovePreviousItem\r\n" + - " # \r\n" + - " @bindingNavigatorMovePreviousItem.DisplayStyle = System::Windows::Forms::ToolStripItemDisplayStyle.Image\r\n" + - " @bindingNavigatorMovePreviousItem.Image = resources.GetObject(\"bindingNavigatorMovePreviousItem.Image\")\r\n" + - " @bindingNavigatorMovePreviousItem.Name = \"bindingNavigatorMovePreviousItem\"\r\n" + - " @bindingNavigatorMovePreviousItem.RightToLeftAutoMirrorImage = true\r\n" + - " @bindingNavigatorMovePreviousItem.Size = System::Drawing::Size.new(23, 22)\r\n" + - " @bindingNavigatorMovePreviousItem.Text = \"Move previous\"\r\n" + - " # \r\n" + - " # bindingNavigatorSeparator\r\n" + - " # \r\n" + - " @bindingNavigatorSeparator.Name = \"bindingNavigatorSeparator\"\r\n" + - " @bindingNavigatorSeparator.Size = System::Drawing::Size.new(6, 25)\r\n" + - " # \r\n" + - " # bindingNavigatorPositionItem\r\n" + - " # \r\n" + - " @bindingNavigatorPositionItem.AccessibleName = \"Position\"\r\n" + - " @bindingNavigatorPositionItem.AutoSize = false\r\n" + - " @bindingNavigatorPositionItem.Name = \"bindingNavigatorPositionItem\"\r\n" + - " @bindingNavigatorPositionItem.Size = System::Drawing::Size.new(50, 23)\r\n" + - " @bindingNavigatorPositionItem.Text = \"0\"\r\n" + - " @bindingNavigatorPositionItem.ToolTipText = \"Current position\"\r\n" + - " # \r\n" + - " # bindingNavigatorCountItem\r\n" + - " # \r\n" + - " @bindingNavigatorCountItem.Name = \"bindingNavigatorCountItem\"\r\n" + - " @bindingNavigatorCountItem.Size = System::Drawing::Size.new(35, 22)\r\n" + - " @bindingNavigatorCountItem.Text = \"of {0}\"\r\n" + - " @bindingNavigatorCountItem.ToolTipText = \"Total number of items\"\r\n" + - " # \r\n" + - " # bindingNavigatorSeparator1\r\n" + - " # \r\n" + - " @bindingNavigatorSeparator1.Name = \"bindingNavigatorSeparator\"\r\n" + - " @bindingNavigatorSeparator1.Size = System::Drawing::Size.new(6, 25)\r\n" + - " # \r\n" + - " # bindingNavigatorMoveNextItem\r\n" + - " # \r\n" + - " @bindingNavigatorMoveNextItem.DisplayStyle = System::Windows::Forms::ToolStripItemDisplayStyle.Image\r\n" + - " @bindingNavigatorMoveNextItem.Image = resources.GetObject(\"bindingNavigatorMoveNextItem.Image\")\r\n" + - " @bindingNavigatorMoveNextItem.Name = \"bindingNavigatorMoveNextItem\"\r\n" + - " @bindingNavigatorMoveNextItem.RightToLeftAutoMirrorImage = true\r\n" + - " @bindingNavigatorMoveNextItem.Size = System::Drawing::Size.new(23, 22)\r\n" + - " @bindingNavigatorMoveNextItem.Text = \"Move next\"\r\n" + - " # \r\n" + - " # bindingNavigatorMoveLastItem\r\n" + - " # \r\n" + - " @bindingNavigatorMoveLastItem.DisplayStyle = System::Windows::Forms::ToolStripItemDisplayStyle.Image\r\n" + - " @bindingNavigatorMoveLastItem.Image = resources.GetObject(\"bindingNavigatorMoveLastItem.Image\")\r\n" + - " @bindingNavigatorMoveLastItem.Name = \"bindingNavigatorMoveLastItem\"\r\n" + - " @bindingNavigatorMoveLastItem.RightToLeftAutoMirrorImage = true\r\n" + - " @bindingNavigatorMoveLastItem.Size = System::Drawing::Size.new(23, 22)\r\n" + - " @bindingNavigatorMoveLastItem.Text = \"Move last\"\r\n" + - " # \r\n" + - " # bindingNavigatorSeparator2\r\n" + - " # \r\n" + - " @bindingNavigatorSeparator2.Name = \"bindingNavigatorSeparator\"\r\n" + - " @bindingNavigatorSeparator2.Size = System::Drawing::Size.new(6, 25)\r\n" + - " # \r\n" + - " # bindingNavigatorAddNewItem\r\n" + - " # \r\n" + - " @bindingNavigatorAddNewItem.DisplayStyle = System::Windows::Forms::ToolStripItemDisplayStyle.Image\r\n" + - " @bindingNavigatorAddNewItem.Image = resources.GetObject(\"bindingNavigatorAddNewItem.Image\")\r\n" + - " @bindingNavigatorAddNewItem.Name = \"bindingNavigatorAddNewItem\"\r\n" + - " @bindingNavigatorAddNewItem.RightToLeftAutoMirrorImage = true\r\n" + - " @bindingNavigatorAddNewItem.Size = System::Drawing::Size.new(23, 22)\r\n" + - " @bindingNavigatorAddNewItem.Text = \"Add new\"\r\n" + - " # \r\n" + - " # bindingNavigatorDeleteItem\r\n" + - " # \r\n" + - " @bindingNavigatorDeleteItem.DisplayStyle = System::Windows::Forms::ToolStripItemDisplayStyle.Image\r\n" + - " @bindingNavigatorDeleteItem.Image = resources.GetObject(\"bindingNavigatorDeleteItem.Image\")\r\n" + - " @bindingNavigatorDeleteItem.Name = \"bindingNavigatorDeleteItem\"\r\n" + - " @bindingNavigatorDeleteItem.RightToLeftAutoMirrorImage = true\r\n" + - " @bindingNavigatorDeleteItem.Size = System::Drawing::Size.new(23, 22)\r\n" + - " @bindingNavigatorDeleteItem.Text = \"Delete\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(343, 297)\r\n" + - " self.Controls.Add(@bindingNavigator1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.Text = \"RubyWinFoo\"\r\n" + - " @bindingNavigator1.clr_member(System::ComponentModel::ISupportInitialize, :EndInit).call()\r\n" + - " @bindingNavigator1.ResumeLayout(false)\r\n" + - " @bindingNavigator1.PerformLayout()\r\n" + - " self.ResumeLayout(false)\r\n" + - " self.PerformLayout()\r\n" + - " end\r\n" + - "end"; - } - } - - public CreatedInstance BindingNavigatorSeparator1Instance { - get { return ComponentCreator.CreatedInstances[8]; } - } - - [Test] - public void BindingNavigatorSeparator1ComponentNameIsBindingNavigatorSeparator1() - { - Assert.AreEqual("bindingNavigatorSeparator1", BindingNavigatorSeparator1Instance.Name); - } - - [Test] - public void BindingNavigatorSeparator1ComponentTypeIsToolStripSeparator() - { - Assert.AreEqual("System.Windows.Forms.ToolStripSeparator", BindingNavigatorSeparator1Instance.InstanceType.FullName); - } - - [Test] - public void BindingNavigatorSeparator1SiteNameNameIsBindingNavigatorSeparator1() - { - ToolStripSeparator separator = BindingNavigatorSeparator1Instance.Object as ToolStripSeparator; - Assert.AreEqual("bindingNavigatorSeparator1", separator.Name); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadButtonFlatAppearanceTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadButtonFlatAppearanceTestFixture.cs deleted file mode 100644 index 59b8caf7c7..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadButtonFlatAppearanceTestFixture.cs +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadButtonFlatAppearanceTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class TestForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @button1 = System::Windows::Forms::Button.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # button1\r\n" + - " # \r\n" + - " @button1.FlatAppearance.BorderColor = System::Drawing::Color.Red\r\n" + - " @button1.FlatAppearance.BorderSize = 2\r\n" + - " @button1.FlatAppearance.MouseDownBackColor = System::Drawing::Color.Blue\r\n" + - " @button1.FlatAppearance.MouseOverBackColor = System::Drawing::Color.Yellow\r\n" + - " @button1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @button1.Name = \"button1\"\r\n" + - " @button1.Size = System::Drawing::Size.new(10, 10)\r\n" + - " @button1.TabIndex = 0\r\n" + - " @button1.Text = \"button1\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.AcceptButton = @button1\r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.Controls.Add(@button1)\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - public Button Button - { - get { return Form.Controls[0] as Button; } - } - - [Test] - public void ButtonFlatAppearanceBorderSize() - { - Assert.AreEqual(2, Button.FlatAppearance.BorderSize); - } - - [Test] - public void ButtonFlatAppearanceBorderColor() - { - Assert.AreEqual(Color.Red, Button.FlatAppearance.BorderColor); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadColorFromArgbTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadColorFromArgbTestFixture.cs deleted file mode 100644 index c969572501..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadColorFromArgbTestFixture.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadColorFromArgbTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class TestForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # TestForm\r\n" + - " # \r\n" + - " self.BackColor = System::Drawing::Color.FromArgb(10, 190, 0)\r\n" + - " self.Name = \"TestForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - [Test] - public void FormBackColor() - { - Assert.AreEqual(Color.FromArgb(10, 190, 0), Form.BackColor); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadControlEventHandlerTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadControlEventHandlerTestFixture.cs deleted file mode 100644 index f3c1cd3122..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadControlEventHandlerTestFixture.cs +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadControlEventHandlerTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class TestForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @button2 = System::Windows::Forms::Button.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # button2\r\n" + - " # \r\n" + - " @button2.Location = System::Drawing::Point.new(75, 39)\r\n" + - " @button2.Name = \"button2\"\r\n" + - " @button2.Size = System::Drawing::Size.new(75, 23)\r\n" + - " @button2.TabIndex = 1\r\n" + - " @button2.Text = \"button2\"\r\n" + - " @button2.KeyDown { |sender, e| self.Button2KeyDown(sender, e) }\r\n" + - " # \r\n" + - " # TestForm\r\n" + - " # \r\n" + - " self.Name = \"TestForm\"\r\n" + - " self.Controls.Add(@button2)\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - public override void BeforeSetUpFixture() - { - base.ComponentCreator.SetEventPropertyDescriptor(new MockPropertyDescriptor("abc", "Button2KeyDown", true)); - } - - public Button GetButton() - { - return Form.Controls[0] as Button; - } - - public EventDescriptor GetButtonKeyDownEventDescriptor() - { - Button button = GetButton(); - return TypeDescriptor.GetEvents(button).Find("KeyDown", true); - } - - public MockPropertyDescriptor GetButtonKeyDownEventPropertyDescriptor() - { - EventDescriptor eventDescriptor = GetButtonKeyDownEventDescriptor(); - return base.ComponentCreator.GetEventProperty(eventDescriptor) as MockPropertyDescriptor; - } - - [Test] - public void PropertyDescriptorSetValueComponentIsForm() - { - Assert.AreEqual(GetButton(), GetButtonKeyDownEventPropertyDescriptor().GetSetValueComponent()); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadCursorTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadCursorTestFixture.cs deleted file mode 100644 index d139f8ec29..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadCursorTestFixture.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadCursorTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class TestForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # TestForm\r\n" + - " # \r\n" + - " self.Cursor = System::Windows::Forms::Cursors.Hand\r\n" + - " self.Name = \"TestForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - [Test] - public void FormCursorIsHand() - { - Assert.AreEqual(Cursors.Hand, Form.Cursor); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadEventHandlerTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadEventHandlerTestFixture.cs deleted file mode 100644 index fde5c55461..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadEventHandlerTestFixture.cs +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadEventHandlerTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class TestForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # TestForm\r\n" + - " # \r\n" + - " self.Name = \"TestForm\"\r\n" + - " self.Load { |sender, e| self.TestFormLoad(sender, e) }\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - public override void BeforeSetUpFixture() - { - base.ComponentCreator.SetEventPropertyDescriptor(new MockPropertyDescriptor("abc", "TestFormLoad", true)); - } - - public EventDescriptor GetLoadEventDescriptor() - { - return TypeDescriptor.GetEvents(Form).Find("Load", true); - } - - public MockPropertyDescriptor GetLoadEventPropertyDescriptor() - { - EventDescriptor loadEventDescriptor = GetLoadEventDescriptor(); - return base.ComponentCreator.GetEventProperty(loadEventDescriptor) as MockPropertyDescriptor; - } - - [Test] - public void EventPropertyDescriptorValueSetToEventHandlerMethodName() - { - Assert.AreEqual("TestFormLoad", GetLoadEventPropertyDescriptor().GetValue(Form) as String); - } - - [Test] - public void PropertyDescriptorSetValueComponentIsForm() - { - Assert.AreEqual(Form, GetLoadEventPropertyDescriptor().GetSetValueComponent()); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadFontTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadFontTestFixture.cs deleted file mode 100644 index 1422f1f1be..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadFontTestFixture.cs +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadFontTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class TestForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # TestForm\r\n" + - " # \r\n" + - " self.Font = System::Drawing::Font.new(\"Times New Roman\", 8.25, System::Drawing::FontStyle.Regular, System::Drawing::GraphicsUnit.Point, 1)\r\n" + - " self.Name = \"TestForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - [Test] - public void FormBackColor() - { - Font font = new Font("Times New Roman", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 1); - Assert.AreEqual(font, Form.Font); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadFormTestFixtureBase.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadFormTestFixtureBase.cs deleted file mode 100644 index 1ba44d0b58..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadFormTestFixtureBase.cs +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Drawing; -using System.Reflection; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting; -using ICSharpCode.Scripting.Tests.Designer; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Base class for all LoadFormTestFixture classes. - /// - public class LoadFormTestFixtureBase : LoadFormTestsBase - { - protected override IComponentWalker CreateComponentWalker(IComponentCreator componentCreator) - { - return RubyComponentWalkerHelper.CreateComponentWalker(componentCreator); - } - - /// - /// Gets the Ruby code that will be loaded. - /// - public virtual string RubyCode { - get { return String.Empty; } - } - - public override string Code { - get { return RubyCode; } - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadFormWithBooleanPropertiesSetTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadFormWithBooleanPropertiesSetTestFixture.cs deleted file mode 100644 index eaceb57d93..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadFormWithBooleanPropertiesSetTestFixture.cs +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadFormWithBooleanPropertiesSetTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class TestForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # TestForm\r\n" + - " # \r\n" + - " self.AllowDrop = false\r\n" + - " self.Enabled = false\r\n" + - " self.Name = \"TestForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - [Test] - public void FormEnabledIsFalse() - { - Assert.IsFalse(Form.Enabled); - } - - [Test] - public void FormAllowDropIsFalse() - { - Assert.IsFalse(Form.AllowDrop); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadFormWithStatementsBeforeFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadFormWithStatementsBeforeFormTestFixture.cs deleted file mode 100644 index 0697e6ec9f..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadFormWithStatementsBeforeFormTestFixture.cs +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Statements before the main form class are parsed by the RubyComponentWalker when - /// they should be ignored. This test fixture checks that only when the InitializeComponent method - /// is found the statements are parsed. - /// - [TestFixture] - public class LoadFormWithStatementsBeforeFormTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "a = System::Windows::Forms::TextBox.new()\r\n" + - "b = 10\r\n" + - "\r\n" + - "class Foo\r\n" + - " def run()\r\n" + - " @a = System::Windows::Forms::ListViewItem.new()\r\n" + - " end\r\n" + - "end\r\n" + - "\r\n" + - "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - public CreatedComponent FormComponent { - get { return ComponentCreator.CreatedComponents[0]; } - } - - [Test] - public void MainFormCreated() - { - Assert.IsNotNull(Form); - } - - [Test] - public void NoInstancesCreated() - { - Assert.AreEqual(0, ComponentCreator.CreatedInstances.Count); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadInheritedProtectedPanelFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadInheritedProtectedPanelFormTestFixture.cs deleted file mode 100644 index 3eb2786820..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadInheritedProtectedPanelFormTestFixture.cs +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using IronRuby.Compiler.Ast; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadInheritedProtectedPanelFormTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - base.ComponentCreator.AddType("RubyBinding.Tests.Designer.ProtectedPanelDerivedForm", typeof(ProtectedPanelDerivedForm)); - - return - "class MainForm < RubyBinding::Tests::Designer::ProtectedPanelDerivedForm\r\n" + - " def InitializeComponent()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # panel1\r\n" + - " # \r\n" + - " self.panel1.Location = System::Drawing::Point.new(10, 15)\r\n" + - " self.panel1.Size = System::Drawing::Size.new(108, 120)\r\n" + - " # \r\n" + - " # form1\r\n" + - " # \r\n" + - " self.Location = System::Drawing::Point.new(10, 20)\r\n" + - " self.Name = \"form1\"\r\n" + - " self.Controls.Add(@textBox1)\r\n" + - " self.ResumeLayout(False)\r\n" + - " end\r\n" + - "end"; - } - } - - ProtectedPanelDerivedForm DerivedForm { - get { return Form as ProtectedPanelDerivedForm; } - } - - [Test] - public void PanelLocation() - { - Assert.AreEqual(new Point(10, 15), DerivedForm.PanelLocation); - } - - [Test] - public void PanelSize() - { - Assert.AreEqual(new Size(108, 120), DerivedForm.PanelSize); - } - - [Test] - public void GetProtectedPanelObject() - { - Assert.AreEqual(DerivedForm.GetPanel(), RubyControlFieldExpression.GetInheritedObject("panel1", DerivedForm)); - } - - [Test] - public void GetProtectedPanelObjectIncorrectCase() - { - Assert.AreEqual(DerivedForm.GetPanel(), RubyControlFieldExpression.GetInheritedObject("PANEL1", DerivedForm)); - } - - [Test] - public void GetInheritedObjectPassedNull() - { - Assert.IsNull(RubyControlFieldExpression.GetInheritedObject("panel1", null)); - } - - [Test] - public void GetInheritedPanelObjectFromFieldExpression() - { - SimpleAssignmentExpression assignment = RubyParserHelper.GetSimpleAssignmentExpression("self.panel1.Name = \"abc\""); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(assignment.Left as AttributeAccess); - - Assert.AreEqual(DerivedForm.GetPanel(), field.GetObject(ComponentCreator)); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadInheritedPublicPanelFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadInheritedPublicPanelFormTestFixture.cs deleted file mode 100644 index 290faebf23..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadInheritedPublicPanelFormTestFixture.cs +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using IronRuby.Compiler.Ast; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - class PublicPanelBaseForm : Form - { - public Panel panel1 = new Panel(); - Button button1 = new Button(); - - public PublicPanelBaseForm() - { - button1.Name = "button1"; - - panel1.Name = "panel1"; - panel1.Location = new Point(5, 10); - panel1.Size = new Size(200, 100); - panel1.Controls.Add(button1); - - Controls.Add(panel1); - } - } - - class PublicPanelDerivedForm : PublicPanelBaseForm - { - } - - [TestFixture] - public class LoadInheritedPublicPanelFormTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - base.ComponentCreator.AddType("RubyBinding.Tests.Designer.PublicPanelDerivedForm", typeof(PublicPanelDerivedForm)); - - return - "class MainForm < RubyBinding::Tests::Designer::PublicPanelDerivedForm\r\n" + - " def InitializeComponent()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # panel1\r\n" + - " # \r\n" + - " self.panel1.Location = System::Drawing::Point.new(10, 15)\r\n" + - " self.panel1.Size = System::Drawing::Size.new(108, 120)\r\n" + - " # \r\n" + - " # form1\r\n" + - " # \r\n" + - " self.Location = System::Drawing::Point.new(10, 20)\r\n" + - " self.Name = \"form1\"\r\n" + - " self.Controls.Add(@textBox1)\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - PublicPanelDerivedForm DerivedForm { - get { return Form as PublicPanelDerivedForm; } - } - - [Test] - public void PanelLocation() - { - Assert.AreEqual(new Point(10, 15), DerivedForm.panel1.Location); - } - - [Test] - public void PanelSize() - { - Assert.AreEqual(new Size(108, 120), DerivedForm.panel1.Size); - } - - [Test] - public void GetPublicPanelObject() - { - Assert.AreEqual(DerivedForm.panel1, RubyControlFieldExpression.GetInheritedObject("panel1", DerivedForm)); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadInheritedToolTipTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadInheritedToolTipTestFixture.cs deleted file mode 100644 index c13e443dc3..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadInheritedToolTipTestFixture.cs +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadInheritedToolTipTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - ComponentCreator.AddType("RubyBinding.Tests.Designer.PublicToolTipDerivedForm", typeof(RubyBinding.Tests.Designer.PublicToolTipDerivedForm)); - - return - "class TestForm < RubyBinding::Tests::Designer::PublicToolTipDerivedForm\r\n" + - " def InitializeComponent()\r\n" + - " @button1 = System::Windows::Forms::Button.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # button1\r\n" + - " # \r\n" + - " @button1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @button1.Name = \"button1\"\r\n" + - " @button1.Size = System::Drawing::Size.new(10, 10)\r\n" + - " @button1.TabIndex = 0\r\n" + - " @button1.Text = \"button1\"\r\n" + - " self.toolTip.SetToolTip(@button1, \"buttonTest\")\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Controls.Add(@button1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.toolTip.SetToolTip(self, \"test\")\r\n" + - " self.ResumeLayout(false)\r\n" + - " self.PerformLayout()\r\n" + - " end\r\n" + - "end"; - } - } - - [Test] - public void FormHasToolTip() - { - PublicToolTipDerivedForm form = Form as PublicToolTipDerivedForm; - Assert.AreEqual("test", form.toolTip.GetToolTip(form)); - } - - [Test] - public void ButtonHasToolTip() - { - PublicToolTipDerivedForm form = Form as PublicToolTipDerivedForm; - Assert.AreEqual("buttonTest", form.toolTip.GetToolTip(form.Controls[0])); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadListViewFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadListViewFormTestFixture.cs deleted file mode 100644 index d06ce9996c..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadListViewFormTestFixture.cs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadListViewFormTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @listView1 = System::Windows::Forms::ListView.new()\r\n" + - " listViewItem1 = System::Windows::Forms::ListViewItem.new()\r\n" + - " listViewItem2 = System::Windows::Forms::ListViewItem.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # listView1\r\n" + - " # \r\n" + - " @listView1.Items.AddRange(System::Array[System::Windows::Forms::ListViewItem].new(\r\n" + - " [listViewItem1,\r\n" + - " listViewItem2]))\r\n" + - " @listView1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @listView1.Name = \"listView1\"\r\n" + - " @listView1.Size = System::Drawing::Size.new(204, 104)\r\n" + - " @listView1.TabIndex = 0\r\n" + - " listViewItem1.ToolTipText = \"tooltip1\"\r\n" + - " listViewItem2.ToolTipText = \"tooltip2\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@listView1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " self.PerformLayout()\r\n" + - " end\r\n" + - "end"; - } - } - - public ListView ListView { - get { return Form.Controls[0] as ListView; } - } - - public ListViewItem ListViewItem1 { - get { return ListView.Items[0]; } - } - - public ListViewItem ListViewItem2 { - get { return ListView.Items[1]; } - } - - [Test] - public void ListViewAddedToForm() - { - Assert.IsNotNull(ListView); - } - - [Test] - public void ListViewHasTwoItems() - { - Assert.AreEqual(2, ListView.Items.Count); - } - - [Test] - public void ListViewItem1TooltipText() - { - Assert.AreEqual("tooltip1", ListViewItem1.ToolTipText); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadLocalImageResourceTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadLocalImageResourceTestFixture.cs deleted file mode 100644 index 27539a8d01..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadLocalImageResourceTestFixture.cs +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Globalization; -using System.IO; -using System.Resources; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadLocalImageResourceTestFixture : LoadFormTestFixtureBase - { - MockResourceReader reader; - Bitmap bitmap; - - public override string RubyCode { - get { - bitmap = new Bitmap(10, 20); - reader = new MockResourceReader(); - reader.AddResource("pictureBox1.Image", bitmap); - ComponentCreator.SetResourceReader(reader); - return - "class TestForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " resources = System::Resources::ResourceManager.new(\"RootNamespace.MainForm\", System::Reflection::Assembly.GetEntryAssembly())\r\n" + - " @pictureBox1 = System::Windows::Forms::PictureBox.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # pictureBox1\r\n" + - " # \r\n" + - " @pictureBox1.Image = resources.GetObject(\"pictureBox1.Image\")\r\n" + - " @pictureBox1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @pictureBox1.Name = \"button1\"\r\n" + - " @pictureBox1.Size = System::Drawing::Size.new(10, 10)\r\n" + - " @pictureBox1.TabIndex = 0\r\n" + - " @pictureBox1.Text = \"button1\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.Controls.Add(@pictureBox1)\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n " + - "end"; - } - } - - public PictureBox PictureBox1 { - get { return base.Form.Controls[0] as PictureBox; } - } - - [Test] - public void ResourceReaderRetrievedFromComponentCreator() - { - Assert.IsTrue(ComponentCreator.GetResourceReaderCalled); - } - - [Test] - public void CultureInfoInvariantCulturePassedToGetResourceReader() - { - Assert.AreEqual(CultureInfo.InvariantCulture, ComponentCreator.CultureInfoPassedToGetResourceReader); - } - - [Test] - public void ResourceReaderIsDisposed() - { - Assert.IsTrue(reader.IsDisposed); - } - - [Test] - public void ComponentResourceManagerCreated() - { - CreatedInstance expectedInstance = new CreatedInstance(typeof(ResourceManager), new object[0], "resources", false); - CreatedInstance instance = base.ComponentCreator.CreatedInstances[0]; - Assert.AreEqual(expectedInstance, instance); - } - - [Test] - public void BitmapAssignedToPictureBoxRetrievedFromResourceReader() - { - Assert.IsTrue(Object.Equals(bitmap, PictureBox1.Image)); - } - - [Test] - public void PictureBoxImageIsNotNull() - { - Assert.IsNotNull(PictureBox1.Image); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadLocalVariablePropertyAssignmentTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadLocalVariablePropertyAssignmentTestFixture.cs deleted file mode 100644 index 72e9a223ab..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadLocalVariablePropertyAssignmentTestFixture.cs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadLocalVariablePropertyAssignmentTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " button1 = System::Windows::Forms::Button.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.AcceptButton = button1\r\n" + - " self.ClientSize = System::Drawing::Size.new(300, 400)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - [Test] - public void OneComponentCreated() - { - Assert.AreEqual(1, ComponentCreator.CreatedComponents.Count); - } - - [Test] - public void TwoObjectsCreated() - { - Assert.AreEqual(2, ComponentCreator.CreatedInstances.Count); - } - - [Test] - public void ButtonInstance() - { - CreatedInstance expectedInstance = new CreatedInstance(typeof(Button), new object[0], "button1", false); - Assert.AreEqual(expectedInstance, ComponentCreator.CreatedInstances[0]); - } - - [Test] - public void AcceptButtonPropertyIsNotNull() - { - Assert.IsNotNull(Form.AcceptButton); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadMenuStripFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadMenuStripFormTestFixture.cs deleted file mode 100644 index ce2407480c..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadMenuStripFormTestFixture.cs +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadMenuStripFormTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @menuStrip1 = System::Windows::Forms::MenuStrip.new()\r\n" + - " @fileToolStripMenuItem = System::Windows::Forms::ToolStripMenuItem.new()\r\n" + - " @openToolStripMenuItem = System::Windows::Forms::ToolStripMenuItem.new()\r\n" + - " @exitToolStripMenuItem = System::Windows::Forms::ToolStripMenuItem.new()\r\n" + - " @editToolStripMenuItem = System::Windows::Forms::ToolStripMenuItem.new()\r\n" + - " @menuStrip1.SuspendLayout()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # menuStrip1\r\n" + - " # \r\n" + - " @menuStrip1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @menuStrip1.Name = \"menuStrip1\"\r\n" + - " @menuStrip1.Size = System::Drawing::Size.new(200, 24)\r\n" + - " @menuStrip1.TabIndex = 0\r\n" + - " @menuStrip1.Text = \"menuStrip1\"\r\n" + - " @menuStrip1.Items.AddRange(System::Array[System::Windows::Forms::ToolStripItem].new(\r\n" + - " [@fileToolStripMenuItem,\r\n" + - " @editToolStripMenuItem]))\r\n" + - " # \r\n" + - " # fileToolStripMenuItem\r\n" + - " # \r\n" + - " @fileToolStripMenuItem.Name = \"fileToolStripMenuItem\"\r\n" + - " @fileToolStripMenuItem.Size = System::Drawing::Size.new(37, 20)\r\n" + - " @fileToolStripMenuItem.Text = \"&File\"\r\n" + - " @fileToolStripMenuItem.DropDownItems.AddRange(System.Array[System::Windows::Forms::ToolStripItem].new(\r\n" + - " [@openToolStripMenuItem,\r\n" + - " @exitToolStripMenuItem]))\r\n" + - " # \r\n" + - " # openToolStripMenuItem\r\n" + - " # \r\n" + - " @openToolStripMenuItem.Name = \"openToolStripMenuItem\"\r\n" + - " @openToolStripMenuItem.Size = System::Drawing::Size.new(37, 20)\r\n" + - " @openToolStripMenuItem.Text = \"&Open\"\r\n" + - " # \r\n" + - " # exitToolStripMenuItem\r\n" + - " # \r\n" + - " @exitToolStripMenuItem.Name = \"exitToolStripMenuItem\"\r\n" + - " @exitToolStripMenuItem.Size = System::Drawing::Size.new(37, 20)\r\n" + - " @exitToolStripMenuItem.Text = \"E&xit\"\r\n" + - " # \r\n" + - " # editToolStripMenuItem\r\n" + - " # \r\n" + - " @editToolStripMenuItem.Name = \"editToolStripMenuItem\"\r\n" + - " @editToolStripMenuItem.Size = System::Drawing::Size.new(39, 20)\r\n" + - " @editToolStripMenuItem.Text = \"&Edit\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.Controls.Add(@menuStrip1)\r\n" + - " @menuStrip1.ResumeLayout(false)\r\n" + - " @menuStrip1.PerformLayout()\r\n" + - " self.ResumeLayout(False)\r\n" + - " self.PerformLayout()\r\n" + - " end\r\n" + - "end"; - } - } - - public MenuStrip MenuStrip { - get { return Form.Controls[0] as MenuStrip; } - } - - public ToolStripMenuItem FileMenuItem { - get { return MenuStrip.Items[0] as ToolStripMenuItem; } - } - - [Test] - public void MenuStripAddedToForm() - { - Assert.IsNotNull(MenuStrip); - } - - [Test] - public void MenuStripHasTwoItems() - { - Assert.AreEqual(2, MenuStrip.Items.Count); - } - - [Test] - public void MenuStripFirstItemIsFileMenuItem() - { - Assert.AreEqual("fileToolStripMenuItem", FileMenuItem.Name); - } - - [Test] - public void FileMenuItemText() - { - Assert.AreEqual("&File", FileMenuItem.Text); - } - - [Test] - public void MenuStripSecondItemIsEditMenuItem() - { - Assert.AreEqual("editToolStripMenuItem", MenuStrip.Items[1].Name); - } - - [Test] - public void FileMenuItemHasDropDownItems() - { - Assert.AreEqual(2, FileMenuItem.DropDownItems.Count); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadMonthCalendarTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadMonthCalendarTestFixture.cs deleted file mode 100644 index 0f52ff1c68..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadMonthCalendarTestFixture.cs +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadMonthCalendarTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @monthCalendar1 = System::Windows::Forms::MonthCalendar.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # monthCalendar1\r\n" + - " # \r\n" + - " @monthCalendar1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @monthCalendar1.MonthlyBoldedDates = System::Array[System::DateTime].new(\r\n" + - " [System::DateTime.new(2009, 1, 2, 0, 0, 0, 0),\r\n" + - " System::DateTime.new(0)])\r\n" + - " @monthCalendar1.Name = \"monthCalendar1\"\r\n" + - " @monthCalendar1.SelectionRange = System::Windows::Forms::SelectionRange.new(System::DateTime.new(2009, 8, 4, 0, 0, 0, 0), System::DateTime.new(2009, 8, 5, 0, 0, 0, 0))\r\n" + - " @monthCalendar1.TabIndex = 0\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@monthCalendar1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " self.PerformLayout()\r\n" + - " end\r\n" + - "end"; - } - } - - public MonthCalendar Calendar { - get { return Form.Controls[0] as MonthCalendar; } - } - - [Test] - public void MonthlyBoldedDates() - { - DateTime[] expectedDates = new DateTime[] { new DateTime(2009, 1, 2), new DateTime(0) }; - Assert.AreEqual(expectedDates, Calendar.MonthlyBoldedDates); - } - - [Test] - public void SelectionRange() - { - SelectionRange expectedRange = new SelectionRange(new DateTime(2009, 8, 4, 0, 0, 0, 0), new DateTime(2009, 8, 5, 0, 0, 0, 0)); - Assert.AreEqual(expectedRange.ToString(), Calendar.SelectionRange.ToString()); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadRichTextBoxWithEmptyTextTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadRichTextBoxWithEmptyTextTestFixture.cs deleted file mode 100644 index 1e580b9a0a..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadRichTextBoxWithEmptyTextTestFixture.cs +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadRichTextBoxWithEmptyTextTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class MainForm < System::Windows::Forms::Form\r\n" + - " def initialize()\r\n" + - " self.InitializeComponent()\r\n" + - " end\r\n" + - "\r\n" + - " def InitializeComponent()\r\n" + - " @richTextBox1 = System::Windows::Forms::RichTextBox.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # richTextBox1\r\n" + - " # \r\n" + - " @richTextBox1.Anchor = System::Windows::Forms::AnchorStyles.Top | System::Windows::Forms::AnchorStyles.Bottom | System::Windows::Forms::AnchorStyles.Left | System::Windows::Forms::AnchorStyles.Right\r\n" + - " @richTextBox1.Location = System::Drawing::Point.new(39, 31)\r\n" + - " @richTextBox1.Name = \"richTextBox1\"\r\n" + - " @richTextBox1.Size = System::Drawing::Size.new(297, 208)\r\n" + - " @richTextBox1.TabIndex = 0\r\n" + - " @richTextBox1.Text = \"\"\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(380, 301)\r\n" + - " self.Controls.Add(@richTextBox1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - public RichTextBox RichTextBox { - get { return Form.Controls[0] as RichTextBox; } - } - - [Test] - public void RichTextBoxName() - { - Assert.AreEqual("richTextBox1", RichTextBox.Name); - } - - [Test] - public void RichTextBoxTextIsEmpty() - { - Assert.AreEqual(String.Empty, RichTextBox.Text); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadSimpleFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadSimpleFormTestFixture.cs deleted file mode 100644 index a3b28a75c3..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadSimpleFormTestFixture.cs +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadSimpleFormTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(300, 400)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - public CreatedComponent FormComponent { - get { return ComponentCreator.CreatedComponents[0]; } - } - - [Test] - public void MainFormCreated() - { - Assert.IsNotNull(Form); - } - - [Test] - public void MainFormName() - { - Assert.AreEqual("MainForm", Form.Name); - } - - [Test] - public void OneComponentCreated() - { - Assert.AreEqual(1, ComponentCreator.CreatedComponents.Count); - } - - [Test] - public void ComponentName() - { - Assert.AreEqual("MainForm", FormComponent.Name); - } - - [Test] - public void ComponentType() - { - Assert.AreEqual("System.Windows.Forms.Form", FormComponent.TypeName); - } - - [Test] - public void FormClientSize() - { - Size size = new Size(300, 400); - Assert.AreEqual(size, Form.ClientSize); - } - - [Test] - public void BaseClassTypeNameLookedUp() - { - Assert.AreEqual("System.Windows.Forms.Form", ComponentCreator.TypeNames[0]); - } - - /// - /// The System.Drawing.Size type name should have been looked up by the RubyFormWalker when - /// parsing the InitializeComponent method. Note that this is the second type that is looked up. - /// The first lookup is the base class type. - /// - [Test] - public void TypeNameLookedUp() - { - Assert.AreEqual("System.Drawing.Size", ComponentCreator.TypeNames[1]); - } - - [Test] - public void OneObjectCreated() - { - Assert.AreEqual(1, ComponentCreator.CreatedInstances.Count); - } - - [Test] - public void InstanceType() - { - List args = new List(); - int width = 300; - int height = 400; - args.Add(width); - args.Add(height); - - CreatedInstance expectedInstance = new CreatedInstance(typeof(Size), args, null, false); - Assert.AreEqual(expectedInstance, ComponentCreator.CreatedInstances[0]); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadSimpleUserControlTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadSimpleUserControlTestFixture.cs deleted file mode 100644 index 90510814aa..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadSimpleUserControlTestFixture.cs +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadSimpleUserControlTestFixture - { - MockComponentCreator componentCreator = new MockComponentCreator(); - UserControl userControl; - - public string RubyCode { - get { - return "class MainForm < System::Windows::Forms::UserControl\r\n" + - " def InitializeComponent()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # userControl1\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(300, 400)\r\n" + - " self.Name = \"userControl1\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - [TestFixtureSetUp] - public void SetUpFixture() - { - RubyComponentWalker walker = new RubyComponentWalker(componentCreator); - userControl = walker.CreateComponent(RubyCode) as UserControl; - } - - [TestFixtureTearDown] - public void TearDownFixture() - { - userControl.Dispose(); - } - - [Test] - public void UserControlCreated() - { - Assert.IsNotNull(userControl); - } - - [Test] - public void UserControlName() - { - Assert.AreEqual("userControl1", userControl.Name); - } - - [Test] - public void UserControlClientSize() - { - Size size = new Size(300, 400); - Assert.AreEqual(size, userControl.ClientSize); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadSplitContainerTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadSplitContainerTestFixture.cs deleted file mode 100644 index 21973a53d1..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadSplitContainerTestFixture.cs +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadSplitContainerTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @splitContainer1 = System::Windows::Forms::SplitContainer.new()\r\n" + - " @treeView1 = System::Windows::Forms::TreeView.new()\r\n" + - " @propertyGrid1 = System::Windows::Forms::PropertyGrid.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # splitContainer1\r\n" + - " # \r\n" + - " @splitContainer1.Dock = System::Windows::Forms::DockStyle.Fill\r\n" + - " @splitContainer1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @splitContainer1.Name = \"splitContainer1\"\r\n" + - " @splitContainer1.Panel1.Controls.Add(@treeView1)\r\n" + - " @splitContainer1.Panel2.Controls.Add(@propertyGrid1)\r\n" + - " @splitContainer1.Size = System::Drawing::Size.new(284, 264)\r\n" + - " @splitContainer1.SplitterDistance = 94\r\n" + - " @splitContainer1.TabIndex = 0\r\n" + - " # \r\n" + - " # treeView1\r\n" + - " # \r\n" + - " @treeView1.Dock = System::Windows::Forms::DockStyle.Fill\r\n" + - " @treeView1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @treeView1.Name = \"treeView1\"\r\n" + - " @treeView1.Size = System::Drawing::Size.new(94, 264)\r\n" + - " @treeView1.TabIndex = 0\r\n" + - " # \r\n" + - " # propertyGrid1\r\n" + - " # \r\n" + - " @propertyGrid1.Dock = System::Windows::Forms::DockStyle.Fill\r\n" + - " @propertyGrid1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @propertyGrid1.Name = \"propertyGrid1\"\r\n" + - " @propertyGrid1.Size = System::Drawing::Size.new(186, 264)\r\n" + - " @propertyGrid1.TabIndex = 0\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Controls.Add(@splitContainer1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " self.PerformLayout()\r\n" + - " end\r\n" + - "end"; - } - } - - SplitContainer SplitContainer { - get { return Form.Controls[0] as SplitContainer; } - } - - [Test] - public void TreeViewAddedToSplitContainer() - { - Assert.IsInstanceOf(typeof(TreeView), SplitContainer.Panel1.Controls[0]); - } - - [Test] - public void PropertyGridAddedToSplitContainer() - { - Assert.IsInstanceOf(typeof(PropertyGrid), SplitContainer.Panel2.Controls[0]); - } - - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTableLayoutPanelTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTableLayoutPanelTestFixture.cs deleted file mode 100644 index 1617685536..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTableLayoutPanelTestFixture.cs +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadTableLayoutPanelTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @button1 = System::Windows::Forms::Button.new()\r\n" + - " @checkBox1 = System::Windows::Forms::CheckBox.new()\r\n" + - " @tableLayoutPanel1 = System::Windows::Forms::TableLayoutPanel.new()\r\n" + - " @tableLayoutPanel1.SuspendLayout()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # button1\r\n" + - " # \r\n" + - " @button1.Location = System::Drawing::Point.new(3, 3)\r\n" + - " @button1.Name = \"button1\"\r\n" + - " @button1.Size = System::Drawing::Size.new(75, 23)\r\n" + - " @button1.TabIndex = 0\r\n" + - " @button1.Text = \"button1\"\r\n" + - " @button1.UseVisualStyleBackColor = true\r\n" + - " # \r\n" + - " # checkBox1\r\n" + - " # \r\n" + - " @checkBox1.Location = System::Drawing::Point.new(103, 3)\r\n" + - " @checkBox1.Name = \"checkBox1\"\r\n" + - " @checkBox1.Size = System::Drawing::Size.new(94, 24)\r\n" + - " @checkBox1.TabIndex = 1\r\n" + - " @checkBox1.Text = \"checkBox1\"\r\n" + - " @checkBox1.UseVisualStyleBackColor = true\r\n" + - " # \r\n" + - " # tableLayoutPanel1\r\n" + - " # \r\n" + - " @tableLayoutPanel1.ColumnCount = 2\r\n" + - " @tableLayoutPanel1.Controls.Add(@button1)\r\n" + - " @tableLayoutPanel1.Controls.Add(@checkBox1)\r\n" + - " @tableLayoutPanel1.Location = System::Drawing::Point.new(89, 36)\r\n" + - " @tableLayoutPanel1.Name = \"tableLayoutPanel1\"\r\n" + - " @tableLayoutPanel1.RowCount = 2\r\n" + - " @tableLayoutPanel1.Size = System::Drawing::Size.new(200, 100)\r\n" + - " @tableLayoutPanel1.TabIndex = 0\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Controls.Add(@tableLayoutPanel1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " self.PerformLayout()\r\n" + - " end\r\n" + - "end"; - } - } - - TableLayoutPanel TableLayoutPanel { - get { return Form.Controls[0] as TableLayoutPanel; } - } - - [Test] - public void ButtonAddedToTableLayout() - { - Assert.IsInstanceOf(typeof(Button), TableLayoutPanel.Controls[0]); - } - - [Test] - public void CheckBoxAddedToTableLayout() - { - Assert.IsInstanceOf(typeof(CheckBox), TableLayoutPanel.Controls[1]); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTextBoxOnPanelTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTextBoxOnPanelTestFixture.cs deleted file mode 100644 index 4292408449..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTextBoxOnPanelTestFixture.cs +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadTextBoxOnPanelTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @panel1 = System::Windows::Forms::Panel.new()\r\n" + - " @textBox1 = System::Windows::Forms::TextBox.new()\r\n" + - " @panel1.SuspendLayout()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # panel1\r\n" + - " # \r\n" + - " @panel1.Location = System::Drawing::Point.new(10, 15)\r\n" + - " @panel1.Name = \"panel1\"\r\n" + - " @panel1.Size = System::Drawing::Size.new(100, 120)\r\n" + - " @panel1.TabIndex = 0\r\n" + - " @panel1.Controls.Add(@textBox1)\r\n" + - " # \r\n" + - " # textBox1\r\n" + - " # \r\n" + - " @textBox1.Location = System::Drawing::Point.new(5, 5)\r\n" + - " @textBox1.Name = \"textBox1\"\r\n" + - " @textBox1.Size = System::Drawing::Size.new(110, 20)\r\n" + - " @textBox1.TabIndex = 0\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.Controls.Add(@panel1)\r\n" + - " @panel1.ResumeLayout(false)\r\n" + - " @panel1.PerformLayout()\r\n" + - " self.ResumeLayout(false)\r\n" + - " self.PerformLayout()\r\n" + - " end\r\n" + - "end"; - } - } - - public Panel Panel { - get { return Form.Controls[0] as Panel; } - } - - public TextBox TextBox { - get { return Panel.Controls[0] as TextBox; } - } - - [Test] - public void TextBoxAddedToPanel() - { - Assert.IsNotNull(TextBox); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTextBoxTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTextBoxTestFixture.cs deleted file mode 100644 index 0fe9be710b..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTextBoxTestFixture.cs +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadTextBoxTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @textBox1 = System::Windows::Forms::TextBox.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # textBox1\r\n" + - " # \r\n" + - " @textBox1.Name = \"textBoxName\"\r\n" + - " @textBox1.Location = System::Drawing::Point.new(108, 120)\r\n" + - " # \r\n" + - " # form1\r\n" + - " # \r\n" + - " self.Location = System::Drawing::Point.new(10, 20)\r\n" + - " self.Name = \"form1\"\r\n" + - " self.Controls.Add(@textBox1)\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - public TextBox TextBox { - get { return Form.Controls[0] as TextBox; } - } - - [Test] - public void AddedComponentsContainsTextBox() - { - CreatedInstance instance = ComponentCreator.GetCreatedInstance(typeof(TextBox)); - - AddedComponent component = new AddedComponent(instance.Object as IComponent, "textBox1"); - Assert.Contains(component, ComponentCreator.AddedComponents); - } - - [Test] - public void TextBoxAddedToForm() - { - Assert.IsNotNull(TextBox); - } - - [Test] - public void TextBoxObjectMatchesObjectAddedToComponentCreator() - { - CreatedInstance instance = ComponentCreator.GetCreatedInstance(typeof(TextBox)); - Assert.AreSame(TextBox, instance.Object as TextBox); - } - - [Test] - public void TextBoxName() - { - Assert.AreEqual("textBoxName", TextBox.Name); - } - - [Test] - public void TextBoxLocation() - { - Assert.AreEqual(new Point(108, 120), TextBox.Location); - } - - [Test] - public void CreatedInstancesDoesNotIncludeLocation() - { - Assert.IsNull(ComponentCreator.GetCreatedInstance("Location")); - } - - [Test] - public void FormLocation() - { - Assert.AreEqual(new Point(10, 20), Form.Location); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTimerTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTimerTestFixture.cs deleted file mode 100644 index 246690a2f2..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTimerTestFixture.cs +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadTimerTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @components = System::ComponentModel::Container.new()\r\n" + - " @timer1 = System::Windows::Forms::Timer.new(@components)\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # timer1\r\n" + - " # \r\n" + - " @timer1.Interval = 1000\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(300, 400)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - public CreatedInstance TimerInstance { - get { return ComponentCreator.CreatedInstances[1]; } - } - - [Test] - public void ThreeInstancesCreated() - { - Assert.AreEqual(3, ComponentCreator.CreatedInstances.Count); - } - - - [Test] - public void ComponentName() - { - Assert.AreEqual("timer1", TimerInstance.Name); - } - - [Test] - public void ComponentType() - { - Assert.AreEqual("System.Windows.Forms.Timer", TimerInstance.InstanceType.FullName); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadToolTipTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadToolTipTestFixture.cs deleted file mode 100644 index 73d10c0d9e..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadToolTipTestFixture.cs +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadToolTipTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class TestForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @components = System::ComponentModel::Container.new()\r\n" + - " @toolTip1 = System::Windows::Forms::ToolTip.new(@components)\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(284, 264)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " @toolTip1.SetToolTip(self, \"test\")\r\n" + - " self.ResumeLayout(false)\r\n" + - " self.PerformLayout()\r\n" + - " end\r\n" + - "end"; - } - } - - [Test] - public void FormHasToolTip() - { - ToolTip toolTip = (ToolTip)base.ComponentCreator.GetComponent("toolTip1"); - Assert.AreEqual("test",toolTip.GetToolTip(Form)); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTreeViewTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTreeViewTestFixture.cs deleted file mode 100644 index 741354841c..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadTreeViewTestFixture.cs +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadTreeViewTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " treeNode1 = System::Windows::Forms::TreeNode.new()\r\n" + - " treeNode2 = System::Windows::Forms::TreeNode.new()\r\n" + - " treeNode3 = System::Windows::Forms::TreeNode.new()\r\n" + - " @treeView1 = System::Windows::Forms::TreeView.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # treeView1\r\n" + - " # \r\n" + - " treeNode1.BackColor = System::Drawing::Color.Yellow\r\n" + - " treeNode1.Checked = true\r\n" + - " treeNode1.ForeColor = System::Drawing::Color.FromArgb(0, 64, 64)\r\n" + - " treeNode1.Name = \"RootNode0\"\r\n" + - " treeNode1.NodeFont = System::Drawing::Font.new(\"Times New Roman\", 8.25, System::Drawing::FontStyle.Regular, System::Drawing::GraphicsUnit.Point, 1)\r\n" + - " treeNode1.Text = \"RootNode0.Text\"\r\n" + - " treeNode1.Nodes.AddRange(System::Array[System::Windows::Forms::TreeNode].new(\r\n" + - " [treeNode2]))\r\n" + - " treeNode2.Name = \"ChildNode0\"\r\n" + - " treeNode2.Text = \"ChildNode0.Text\"\r\n" + - " treeNode2.NodeFont = System::Drawing::Font.new(\"Garamond\", 8.25, System::Drawing::FontStyle.Regular, System::Drawing::GraphicsUnit.Point, 0)\r\n" + - " treeNode2.Nodes.AddRange(System::Array[System::Windows::Forms::TreeNode].new(\r\n" + - " [treeNode3]))\r\n" + - " treeNode3.Name = \"ChildNode1\"\r\n" + - " treeNode3.Text = \"ChildNode1.Text\"\r\n" + - " @treeView1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @treeView1.Name = \"treeView1\"\r\n" + - " @treeView1.Nodes.AddRange(System::Array[System::Windows::Forms::TreeNode].new(\r\n" + - " [treeNode1]))\r\n" + - " @treeView1.Size = System::Drawing::Size.new(100, 100)\r\n" + - " @treeView1.TabIndex = 0\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@treeView1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " self.PerformLayout()\r\n" + - " end\r\n" + - "end"; - } - } - - public TreeView TreeView { - get { return Form.Controls[0] as TreeView; } - } - - public TreeNode RootTreeNode { - get { return TreeView.Nodes[0]; } - } - - public TreeNode FirstChildTreeNode { - get { return RootTreeNode.Nodes[0]; } - } - - [Test] - public void OneRootNode() - { - Assert.AreEqual(1, TreeView.Nodes.Count); - } - - [Test] - public void RootNodeHasOneChildNode() - { - Assert.AreEqual(1, RootTreeNode.Nodes.Count); - } - - [Test] - public void ChildNodeHasOneChildNode() - { - Assert.AreEqual(1, RootTreeNode.Nodes[0].Nodes.Count); - } - - [Test] - public void RootTreeNodeBackColor() - { - Assert.AreEqual(Color.Yellow, RootTreeNode.BackColor); - } - - [Test] - public void RootTreeNodeForeColor() - { - Assert.AreEqual(Color.FromArgb(0, 64, 64), RootTreeNode.ForeColor); - } - - [Test] - public void RootTreeNodeFontProperty() - { - Font font = new Font("Times New Roman", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 1); - Assert.AreEqual(font, RootTreeNode.NodeFont); - } - - [Test] - public void RootTreeNodeCheckedProperty() - { - Assert.IsTrue(RootTreeNode.Checked); - } - - [Test] - public void ChildTreeNodeFontProperty() - { - Font font = new Font("Garamond", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0); - Assert.AreEqual(font, FirstChildTreeNode.NodeFont); - } - - /// - /// Ensures that we are not creating an instance with a name of NodeFont. - /// - [Test] - public void InstancesCreated() - { - foreach (CreatedInstance instance in ComponentCreator.CreatedInstances) { - if (instance.InstanceType == typeof(Font)) { - Assert.IsNull(instance.Name); - } - } - Assert.IsTrue(ComponentCreator.CreatedInstances.Count > 0); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadUserControlWithDoublePropertyTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadUserControlWithDoublePropertyTestFixture.cs deleted file mode 100644 index e81689fb4b..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/LoadUserControlWithDoublePropertyTestFixture.cs +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class LoadUserControlWithDoublePropertyTestFixture - { - MockComponentCreator componentCreator = new MockComponentCreator(); - DoublePropertyUserControl userControl; - Form form; - - public string RubyCode { - get { - Type type = typeof(DoublePropertyUserControl); - componentCreator.AddType(type.FullName, type); - return - "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @userControl = ICSharpCode::Scripting::Tests::Utils::DoublePropertyUserControl.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # userControl1\r\n" + - " # \r\n" + - " @userControl.DoubleValue = 0\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(300, 400)\r\n" + - " self.Controls.Add(@userControl)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - [TestFixtureSetUp] - public void SetUpFixture() - { - RubyComponentWalker walker = new RubyComponentWalker(componentCreator); - form = walker.CreateComponent(RubyCode) as Form; - userControl = form.Controls[0] as DoublePropertyUserControl; - } - - [TestFixtureTearDown] - public void TearDownFixture() - { - form.Dispose(); - } - - [Test] - public void UserControlDoubleProperty() - { - Assert.AreEqual(0, userControl.DoubleValue); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/MergeFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/MergeFormTestFixture.cs deleted file mode 100644 index 4cbc2d1ff3..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/MergeFormTestFixture.cs +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.AvalonEdit.Document; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Editor.AvalonEdit; -using ICSharpCode.SharpDevelop.Refactoring; -using NUnit.Framework; -using RubyBinding.Tests.Utils; -using AvalonEdit = ICSharpCode.AvalonEdit; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the GeneratedInitializeComponentMethod class - /// can merge the changes into the text editor. - /// - [TestFixture] - public class MergeFormTestFixture - { - TextDocument document; - MockResourceService resourceService; - MockResourceWriter resourceWriter; - - [TestFixtureSetUp] - public void SetUpFixture() - { - resourceWriter = new MockResourceWriter(); - resourceService = new MockResourceService(); - resourceService.SetResourceWriter(resourceWriter); - - AvalonEdit.TextEditor textEditor = new AvalonEdit.TextEditor(); - document = textEditor.Document; - textEditor.Text = GetTextEditorCode(); - - RubyParser parser = new RubyParser(); - ICompilationUnit compilationUnit = parser.Parse(new DefaultProjectContent(), @"test.rb", document.Text); - - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(499, 309); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyDesignerGenerator generator = new RubyDesignerGenerator(new MockTextEditorOptions()); - generator.Merge(host, new AvalonEditDocumentAdapter(document, null), compilationUnit, serializationManager); - } - } - } - - [Test] - public void MergedDocumentText() - { - string expectedText = GetTextEditorCode().Replace(GetTextEditorInitializeComponentMethod(), GetGeneratedInitializeComponentMethod()); - Assert.AreEqual(expectedText, document.Text); - } - - string GetGeneratedCode() - { - return "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MainForm < System::Windows::Forms::Form\r\n" + - "\tdef initialize()\r\n" + - "\t\tself.InitializeComponent()\r\n" + - "\tend\r\n" + - "\t\r\n" + - GetGeneratedInitializeComponentMethod() + - "end\r\n"; - } - - string GetGeneratedInitializeComponentMethod() - { - return "\tdef InitializeComponent()\r\n" + - "\t\tself.SuspendLayout()\r\n" + - "\t\t# \r\n" + - "\t\t# MainForm\r\n" + - "\t\t# \r\n" + - "\t\tself.ClientSize = System::Drawing::Size.new(499, 309)\r\n" + - "\t\tself.Name = \"MainForm\"\r\n" + - "\t\tself.ResumeLayout(false)\r\n" + - "\tend\r\n"; - } - - string GetTextEditorCode() - { - return "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MainForm < Form\r\n" + - "\tdef initialize()\r\n" + - "\t\tself.InitializeComponent()\r\n" + - "\tend\r\n" + - "\t\r\n" + - GetTextEditorInitializeComponentMethod() + - "end\r\n"; - } - - string GetTextEditorInitializeComponentMethod() - { - return - "\tdef InitializeComponent()\r\n" + - "\t\t\r\n" + - "\tend\r\n"; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/MissingInitializeComponentMethodTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/MissingInitializeComponentMethodTestFixture.cs deleted file mode 100644 index ff0cd6d043..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/MissingInitializeComponentMethodTestFixture.cs +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Globalization; -using System.IO; -using System.Resources; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting; -using IronRuby.Compiler.Ast; -using Microsoft.Scripting; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the RubyFormVisitor throws an exception if no InitializeComponent or - /// InitializeComponent method can be found. - /// - [TestFixture] - public class MissingInitializeComponentMethodTestFixture : IComponentCreator - { - string RubyCode = "class MainForm < System::Windows::Forms.Form\r\n" + - " def initialize()\r\n" + - " self.MissingMethod()\r\n" + - " end\r\n" + - "\r\n" + - " def MissingMethod()\r\n" + - " end\r\n" + - "end\r\n"; - [Test] - [ExpectedException(typeof(RubyComponentWalkerException))] - public void RubyFormWalkerExceptionThrown() - { - RubyComponentWalker walker = new RubyComponentWalker(this); - walker.CreateComponent(RubyCode); - Assert.Fail("Exception should have been thrown before this."); - } - - public IComponent CreateComponent(Type componentClass, string name) - { - throw new NotImplementedException(); - } - - public void Add(IComponent component, string name) - { - throw new NotImplementedException(); - } - - public IComponent GetComponent(string name) - { - return null; - } - - public IComponent RootComponent { - get { return null; } - } - - public object CreateInstance(Type type, ICollection arguments, string name, bool addToContainer) - { - throw new NotImplementedException(); - } - - public Type GetType(string typeName) - { - throw new NotImplementedException(); - } - - public PropertyDescriptor GetEventProperty(EventDescriptor e) - { - return null; - } - - public object GetInstance(string name) - { - return null; - } - - public IResourceReader GetResourceReader(CultureInfo info) - { - return null; - } - - public IResourceWriter GetResourceWriter(CultureInfo info) - { - return null; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/NoNewLineAfterInitializeComponentMethodTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/NoNewLineAfterInitializeComponentMethodTestFixture.cs deleted file mode 100644 index 51ab9fd148..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/NoNewLineAfterInitializeComponentMethodTestFixture.cs +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.AvalonEdit.Document; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Editor; -using ICSharpCode.SharpDevelop.Editor.AvalonEdit; -using ICSharpCode.SharpDevelop.Refactoring; -using NUnit.Framework; -using RubyBinding.Tests.Utils; -using AvalonEdit = ICSharpCode.AvalonEdit; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests the code can be generated if there is no new line after the InitializeComponent method. - /// - [TestFixture] - public class NoNewLineAfterInitializeComponentMethodTestFixture - { - TextDocument document; - - [TestFixtureSetUp] - public void SetUpFixture() - { - AvalonEdit.TextEditor textEditor = new AvalonEdit.TextEditor(); - document = textEditor.Document; - textEditor.Text = GetTextEditorCode(); - - RubyParser parser = new RubyParser(); - ICompilationUnit compilationUnit = parser.Parse(new DefaultProjectContent(), @"test.py", document.Text); - - using (DesignSurface designSurface = new DesignSurface(typeof(UserControl))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - UserControl userControl = (UserControl)host.RootComponent; - userControl.ClientSize = new Size(489, 389); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(userControl); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(userControl, "userControl1"); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - AvalonEditDocumentAdapter docAdapter = new AvalonEditDocumentAdapter(document, null); - RubyDesignerGenerator generator = new RubyDesignerGenerator(new MockTextEditorOptions()); - generator.Merge(host, docAdapter, compilationUnit, serializationManager); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = - "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MyUserControl < UserControl\r\n" + - "\tdef initialize()\r\n" + - "\t\tself.InitializeComponent()\r\n" + - "\tend\r\n" + - "\r\n" + - "\tdef InitializeComponent()\r\n" + - "\t\tself.SuspendLayout()\r\n" + - "\t\t# \r\n" + - "\t\t# userControl1\r\n" + - "\t\t# \r\n" + - "\t\tself.Name = \"userControl1\"\r\n" + - "\t\tself.Size = System::Drawing::Size.new(489, 389)\r\n" + - "\t\tself.ResumeLayout(false)\r\n" + - "\tend\r\n" + - "end"; - - Assert.AreEqual(expectedCode, document.Text); - } - - /// - /// No new line after the pass statement for InitializeComponent method. - /// - string GetTextEditorCode() - { - return - "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MyUserControl < UserControl\r\n" + - "\tdef initialize()\r\n" + - "\t\tself.InitializeComponent()\r\n" + - "\tend\r\n" + - "\r\n" + - "\tdef InitializeComponent()\r\n" + - "\tend\r\n" + - "end"; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/ProjectRootNamespacePassedToMergeTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/ProjectRootNamespacePassedToMergeTestFixture.cs deleted file mode 100644 index 5414fb731a..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/ProjectRootNamespacePassedToMergeTestFixture.cs +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.AvalonEdit.Document; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Editor; -using ICSharpCode.SharpDevelop.Editor.AvalonEdit; -using ICSharpCode.SharpDevelop.Refactoring; -using NUnit.Framework; -using RubyBinding.Tests.Utils; -using AvalonEdit = ICSharpCode.AvalonEdit; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests the the project's root namespace is passed to the RubyDesigner - /// - [TestFixture] - public class ProjectRootNamespacePassedToMergeTestFixture - { - TextDocument document; - - [TestFixtureSetUp] - public void SetUpFixture() - { - AvalonEdit.TextEditor textEditor = new AvalonEdit.TextEditor(); - document = textEditor.Document; - textEditor.Text = GetTextEditorCode(); - - RubyParser parser = new RubyParser(); - MockProjectContent projectContent = new MockProjectContent(); - MockProject project = new MockProject(); - project.RootNamespace = "RootNamespace"; - projectContent.Project = project; - ICompilationUnit compilationUnit = parser.Parse(projectContent, @"test.py", document.Text); - - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); - namePropertyDescriptor.SetValue(form, "MainForm"); - - // Add picture box - PictureBox pictureBox = (PictureBox)host.CreateComponent(typeof(PictureBox), "pictureBox1"); - pictureBox.Location = new Point(0, 0); - pictureBox.Image = new Bitmap(10, 10); - pictureBox.Size = new Size(100, 120); - pictureBox.TabIndex = 0; - form.Controls.Add(pictureBox); - - MockTextEditorOptions options = new MockTextEditorOptions(); - options.ConvertTabsToSpaces = true; - options.IndentationSize = 4; - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - AvalonEditDocumentAdapter docAdapter = new AvalonEditDocumentAdapter(document, null); - RubyDesignerGenerator generator = new RubyDesignerGenerator(options); - generator.Merge(host, docAdapter, compilationUnit, serializationManager); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = - "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MainForm < Form\r\n" + - " def initialize()\r\n" + - " self.InitializeComponent()\r\n" + - " end\r\n" + - " \r\n" + - " def InitializeComponent()\r\n" + - " resources = System::Resources::ResourceManager.new(\"RootNamespace.MainForm\", System::Reflection::Assembly.GetEntryAssembly())\r\n" + - " @pictureBox1 = System::Windows::Forms::PictureBox.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # pictureBox1\r\n" + - " # \r\n" + - " @pictureBox1.Image = resources.GetObject(\"pictureBox1.Image\")\r\n" + - " @pictureBox1.Location = System::Drawing::Point.new(0, 0)\r\n" + - " @pictureBox1.Name = \"pictureBox1\"\r\n" + - " @pictureBox1.Size = System::Drawing::Size.new(100, 120)\r\n" + - " @pictureBox1.TabIndex = 0\r\n" + - " @pictureBox1.TabStop = false\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Controls.Add(@pictureBox1)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - - Assert.AreEqual(expectedCode, document.Text, document.Text); - } - - string GetTextEditorCode() - { - return - "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MainForm < Form\r\n" + - " def initialize()\r\n" + - " self.InitializeComponent()\r\n" + - " end\r\n" + - " \r\n" + - " def InitializeComponent()\r\n" + - " end\r\n" + - "end"; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RemoveMainMenuStripFromFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RemoveMainMenuStripFromFormTestFixture.cs deleted file mode 100644 index 4f31c1c830..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RemoveMainMenuStripFromFormTestFixture.cs +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// When a MenuStrip is added to a form and then removed the Ruby designer generates code - /// for the form's MainMenuStrip property even though the MenuStrip has been removed. - /// - [TestFixture] - public class RemoveMainMenuStripFromFormTestFixture - { - string generatedRubyCode; - - [TestFixtureSetUp] - public void SetUpFixture() - { - using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { - IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); - IEventBindingService eventBindingService = new MockEventBindingService(host); - Form form = (Form)host.RootComponent; - form.ClientSize = new Size(200, 300); - - PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); - PropertyDescriptor descriptor = descriptors.Find("Name", false); - descriptor.SetValue(form, "MainForm"); - - // Add menu strip. - MenuStrip menuStrip = (MenuStrip)host.CreateComponent(typeof(MenuStrip), "menuStrip1"); - menuStrip.Text = "menuStrip1"; - menuStrip.TabIndex = 0; - menuStrip.Location = new Point(0, 0); - form.Controls.Add(menuStrip); - - descriptor = descriptors.Find("MainMenuStrip", false); - descriptor.SetValue(form, menuStrip); - - form.Controls.Remove(menuStrip); - host.Container.Remove(menuStrip); - - DesignerSerializationManager serializationManager = new DesignerSerializationManager(host); - using (serializationManager.CreateSession()) { - RubyCodeDomSerializer serializer = new RubyCodeDomSerializer(" "); - generatedRubyCode = serializer.GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 1); - } - } - } - - [Test] - public void GeneratedCode() - { - string expectedCode = - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(200, 300)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n"; - - Assert.AreEqual(expectedCode, generatedRubyCode, generatedRubyCode); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyBaseClassTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyBaseClassTests.cs deleted file mode 100644 index 388630d62b..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyBaseClassTests.cs +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop; -using ICSharpCode.RubyBinding; -using IronRuby.Compiler.Ast; -using NUnit.Framework; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class RubyBaseClassTests - { - [Test] - public void FormBaseClass() - { - string code = "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(300, 400)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - - ClassDefinition classDef = GetClassDefinition(code); - - Assert.AreEqual("System.Windows.Forms.Form", RubyComponentWalker.GetBaseClassName(classDef)); - } - - [Test] - public void NoBaseClass() - { - string code = "class MainForm\r\n" + - " def InitializeComponent()\r\n" + - " end\r\n" + - "end"; - - ClassDefinition classDef = GetClassDefinition(code); - - Assert.AreEqual(String.Empty, RubyComponentWalker.GetBaseClassName(classDef)); - } - - [Test] - public void UnqualifiedBaseClass() - { - string code = "class MainForm < Form\r\n" + - " def InitializeComponent()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # MainForm\r\n" + - " # \r\n" + - " self.ClientSize = System::Drawing::Size.new(300, 400)\r\n" + - " self.Name = \"MainForm\"\r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - - ClassDefinition classDef = GetClassDefinition(code); - - Assert.AreEqual("Form", RubyComponentWalker.GetBaseClassName(classDef)); - } - - ClassDefinition GetClassDefinition(string code) - { - RubyParser parser = new RubyParser(); - SourceUnitTree unit = parser.CreateAst(@"test.rb", new StringTextBuffer(code)); - return unit.Statements.First as ClassDefinition; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyCodeBuilderTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyCodeBuilderTests.cs deleted file mode 100644 index 0d02c3aa30..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyCodeBuilderTests.cs +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class RubyCodeBuilderTests - { - RubyCodeBuilder codeBuilder; - - [SetUp] - public void Init() - { - codeBuilder = new RubyCodeBuilder(); - codeBuilder.IndentString = "\t"; - } - - [Test] - public void TrimEnd() - { - codeBuilder.Append("abc"); - codeBuilder.AppendLine(); - codeBuilder.Append("def"); - codeBuilder.AppendLine(); - codeBuilder.TrimEnd(); - Assert.AreEqual("abc\r\ndef", codeBuilder.ToString()); - } - - [Test] - public void AppendLineIfPreviousLineIsEndStatementAppendsNewLineIfPreviousLineIsEndStatement() - { - codeBuilder.AppendIndentedLine("end"); - codeBuilder.AppendLineIfPreviousLineIsEndStatement(); - - Assert.AreEqual("end\r\n\r\n", codeBuilder.ToString()); - } - - [Test] - public void AppendLineIfPreviousLineIsEndStatementeIgnoresCaseOfEndStatement() - { - codeBuilder.AppendIndentedLine("END"); - codeBuilder.AppendLineIfPreviousLineIsEndStatement(); - - Assert.AreEqual("END\r\n\r\n", codeBuilder.ToString()); - } - - [Test] - public void AppendLineIfPreviousLineIsEndStatementIgnoresWhitespaceWhenCheckingForEndStatement() - { - string line = " \t end \t "; - codeBuilder.AppendIndentedLine(line); - codeBuilder.AppendLineIfPreviousLineIsEndStatement(); - - Assert.AreEqual(line + "\r\n\r\n", codeBuilder.ToString()); - } - - [Test] - public void AppendLineIfPreviousLineIsEndStatementDoesNotAppendNewLineIfPreviousLineDoesNotContainEndStatement() - { - codeBuilder.AppendIndentedLine("abc"); - codeBuilder.AppendLineIfPreviousLineIsEndStatement(); - - Assert.AreEqual("abc\r\n", codeBuilder.ToString()); - } - - [Test] - public void AppendLineIfPreviousLineIsEndStatementAppendsDoesNotAppendNewLineIfNoPreviousLine() - { - codeBuilder.AppendLineIfPreviousLineIsEndStatement(); - Assert.AreEqual(String.Empty, codeBuilder.ToString()); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyCodeDeserializerTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyCodeDeserializerTests.cs deleted file mode 100644 index f7d8ea4967..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyCodeDeserializerTests.cs +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using IronRuby.Compiler.Ast; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class RubyCodeDeserializerTests - { - RubyCodeDeserializer deserializer; - MockComponentCreator componentCreator; - - [TestFixtureSetUp] - public void SetUpFixture() - { - componentCreator = new MockComponentCreator(); - deserializer = new RubyCodeDeserializer(componentCreator); - } - - [Test] - [ExpectedException(typeof(ArgumentNullException))] - public void NullIronRubyAstNode() - { - Expression expression = null; - deserializer.Deserialize(expression); - } - - [Test] - public void UnknownTypeName() - { - string rubyCode = "self.Cursors = System::Windows::Forms::UnknownType.AppStarting"; - Assert.IsNull(DeserializeRhsAssignment(rubyCode)); - } - - [Test] - public void UnknownPropertyName() - { - string rubyCode = "self.Cursors = System::Windows::Forms::Cursors.UnknownCursorsProperty"; - Assert.IsNull(DeserializeRhsAssignment(rubyCode)); - } - - [Test] - public void UnknownTypeNameInCallExpression() - { - string rubyCode = "self.Cursors = System::Windows::Forms::UnknownType.CreateDefaultCursor()"; - Assert.IsNull(DeserializeRhsAssignment(rubyCode)); - } - - [Test] - public void DeserializeColor() - { - string rubyCode = "@button1.FlatAppearance.BorderColor = System::Drawing::Color.Red"; - Assert.AreEqual(Color.Red, DeserializeRhsAssignment(rubyCode)); - } - - [Test] - public void EnumReturnedInArgumentsPassedToConstructor() - { - string rubyCode = "self.Font = System::Drawing::Font.new(\"Times New Roman\", System::Drawing::FontStyle.Regular, System::Drawing::GraphicsUnit.Point)"; - SimpleAssignmentExpression assignment = RubyParserHelper.GetSimpleAssignmentExpression(rubyCode); - - List expectedArgs = new List(); - expectedArgs.Add("Times New Roman"); - expectedArgs.Add(FontStyle.Regular); - expectedArgs.Add(GraphicsUnit.Point); - - List args = deserializer.GetArguments(assignment.Right as MethodCall); - - Assert.AreEqual(expectedArgs, args); - } - - [Test] - public void EnumBitwiseOr() - { - string rubyCode = "self.textBox1.Anchor = System::Windows::Forms::AnchorStyles.Top | System::Windows::Forms::AnchorStyles.Bottom"; - - AnchorStyles expectedStyles = AnchorStyles.Top | AnchorStyles.Bottom; - Assert.AreEqual(expectedStyles, DeserializeRhsAssignment(rubyCode)); - } - - [Test] - public void MultipleEnumBitwiseOr() - { - string rubyCode = "self.textBox1.Anchor = System::Windows::Forms::AnchorStyles.Top | System::Windows::Forms::AnchorStyles.Bottom | System::Windows::Forms::AnchorStyles.Left"; - - AnchorStyles expectedStyles = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; - Assert.AreEqual(expectedStyles, DeserializeRhsAssignment(rubyCode)); - } - - [Test] - public void DeserializeNameExpression() - { - string rubyCode = "self.Items = self"; - Assert.IsNull(DeserializeRhsAssignment(rubyCode)); - } - - /// - /// Deserializes the right hand side of the assignment. - /// - object DeserializeRhsAssignment(string rubyCode) - { - return deserializer.Deserialize(RubyParserHelper.GetSimpleAssignmentExpression(rubyCode).Right); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyControlFieldExpressionTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyControlFieldExpressionTests.cs deleted file mode 100644 index 58ce64f065..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyControlFieldExpressionTests.cs +++ /dev/null @@ -1,379 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using IronRuby.Compiler.Ast; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class RubyControlFieldExpressionTests - { - [Test] - public void HasPrefixTest() - { - Assert.AreEqual("a", RubyControlFieldExpression.GetPrefix("a.b")); - } - - [Test] - public void NoDotHasPrefixTest() - { - Assert.AreEqual("a", RubyControlFieldExpression.GetPrefix("a")); - } - - [Test] - public void GetVariableName() - { - Assert.AreEqual("abc", RubyControlFieldExpression.GetVariableName("@abc")); - } - - [Test] - public void VariableNameHasOnlyAtSymbol() - { - Assert.AreEqual(String.Empty, RubyControlFieldExpression.GetVariableName("@")); - } - - [Test] - public void VariableNameIsEmpty() - { - Assert.AreEqual(String.Empty, RubyControlFieldExpression.GetVariableName(String.Empty)); - } - - [Test] - public void FullMemberExpression() - { - MethodCall call = RubyParserHelper.GetMethodCall("self.a.b.Add()"); - Assert.AreEqual("self.a.b.Add", RubyControlFieldExpression.GetMemberName(call)); - } - - [Test] - public void NullMemberExpression() - { - Assert.AreEqual(String.Empty, RubyControlFieldExpression.GetMemberName(null)); - } - - [Test] - public void RubyControlFieldExpressionEquals() - { - SimpleAssignmentExpression expression = RubyParserHelper.GetSimpleAssignmentExpression("self.textBox1.Name = \"abc\""); - RubyControlFieldExpression field1 = RubyControlFieldExpression.Create(expression.Left as AttributeAccess); - expression = RubyParserHelper.GetSimpleAssignmentExpression("self.textBox1.Name = \"def\""); - RubyControlFieldExpression field2 = RubyControlFieldExpression.Create(expression.Left as AttributeAccess); - - Assert.AreEqual(field1, field2); - } - - [Test] - public void NullPassedToRubyControlFieldExpressionEquals() - { - SimpleAssignmentExpression expression = RubyParserHelper.GetSimpleAssignmentExpression("self.textBox1.Name = \"abc\""); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression.Left as AttributeAccess); - Assert.IsFalse(field.Equals(null)); - } - - [Test] - public void MethodName() - { - string code = "self.menuItem.Items.Add(@fileMenuItem)"; - MethodCall expression = RubyParserHelper.GetMethodCall(code); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression); - AssertAreEqual(field, "menuItem", "Items", "Add", "self.menuItem.Items"); - } - - [Test] - public void MethodNameWithNoVariableName() - { - string code = "self.Items.Add(@fileMenuItem)"; - MethodCall methodCall = RubyParserHelper.GetMethodCall(code); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(methodCall); - AssertAreEqual(field, String.Empty, "Items", "Add", "self.Items"); - } - - [Test] - public void SetToolTipMethodCall() - { - string code = "@toolTip1.SetToolTip(self, \"Test\")"; - MethodCall expression = RubyParserHelper.GetMethodCall(code); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression); - AssertAreEqual(field, "toolTip1", String.Empty, "SetToolTip", "@toolTip1"); - } - - [Test] - public void GetMemberNames() - { - string[] expected = new string[] { "a", "b" }; - string code = "a.b = 0"; - SimpleAssignmentExpression assignment = RubyParserHelper.GetSimpleAssignmentExpression(code); - Assert.AreEqual(expected, RubyControlFieldExpression.GetMemberNames(assignment.Left as AttributeAccess)); - } - - [Test] - public void GetMemberNamesForButtonPropertyReference() - { - string[] expected = new string[] { "@button1", "Location" }; - string code = "@button1.Location = System::Drawing::Point.new(0, 0)"; - SimpleAssignmentExpression assignment = RubyParserHelper.GetSimpleAssignmentExpression(code); - Assert.AreEqual(expected, RubyControlFieldExpression.GetMemberNames(assignment.Left as AttributeAccess)); - } - - [Test] - public void GetMemberNamesForFormClientSizePropertyReference() - { - string[] expected = new string[] { "self", "ClientSize" }; - string code = "self.ClientSize = System::Drawing::Size.new(300, 400)"; - SimpleAssignmentExpression assignment = RubyParserHelper.GetSimpleAssignmentExpression(code); - Assert.AreEqual(expected, RubyControlFieldExpression.GetMemberNames(assignment.Left as AttributeAccess)); - } - - [Test] - public void GetMemberNamesForColorReference() - { - string[] expected = new string[] { "System", "Drawing", "Color", "Red" }; - string code = "self.BackColor = System::Drawing::Color.Red"; - SimpleAssignmentExpression assignment = RubyParserHelper.GetSimpleAssignmentExpression(code); - Assert.AreEqual(expected, RubyControlFieldExpression.GetMemberNames(assignment.Right as MethodCall)); - } - - [Test] - public void GetObjectInMethodCall() - { - string RubyCode = "@menuStrip1.Items.AddRange(System::Array[System::Windows::Forms::ToolStripItem].new(\r\n" + - " [@fileToolStripMenuItem,\r\n" + - " @editToolStripMenuItem]))"; - - MethodCall call = RubyParserHelper.GetMethodCall(RubyCode); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(call); - - using (MenuStrip menuStrip = new MenuStrip()) { - MockComponentCreator creator = new MockComponentCreator(); - creator.Add(menuStrip, "menuStrip1"); - Assert.AreSame(menuStrip.Items, field.GetMember(creator)); - } - } - - [Test] - public void GetObjectForUnknownComponent() - { - string RubyCode = "@menuStrip1.SuspendLayout()"; - - MethodCall call = RubyParserHelper.GetMethodCall(RubyCode); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(call); - - using (MenuStrip menuStrip = new MenuStrip()) { - MockComponentCreator creator = new MockComponentCreator(); - creator.Add(menuStrip, "unknown"); - Assert.IsNull(field.GetMember(creator)); - } - } - - [Test] - public void GetInstanceObjectInMethodCall() - { - string RubyCode = "treeNode1.Nodes.AddRange(System::Array[System::Windows::Forms::TreeNode].new(\r\n" + - " [treeNode2]))"; - - MethodCall callExpression = RubyParserHelper.GetMethodCall(RubyCode); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(callExpression); - - TreeNode treeNode1 = new TreeNode(); - TreeNode treeNode2 = new TreeNode(); - MockComponentCreator creator = new MockComponentCreator(); - creator.AddInstance(treeNode1, "treeNode1"); - creator.AddInstance(treeNode2, "treeNode2"); - object member = field.GetMember(creator); - Assert.AreSame(treeNode1.Nodes, member); - } - - [Test] - public void GetObjectInMethodCallFromSpecifiedObject() - { - string RubyCode = "self.Controls.AddRange(System::Array[System::Windows::Forms::ToolStripItem].new(\r\n" + - " [@fileToolStripMenuItem,\r\n" + - " @editToolStripMenuItem]))"; - - MethodCall callExpression = RubyParserHelper.GetMethodCall(RubyCode); - - using (Form form = new Form()) { - Assert.AreSame(form.Controls, RubyControlFieldExpression.GetMember(form, callExpression)); - } - } - - [Test] - public void LocalVariableInAssignment() - { - SimpleAssignmentExpression expression = RubyParserHelper.GetSimpleAssignmentExpression("listViewItem1.TooltipText = \"abc\""); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression.Left as AttributeAccess); - - RubyControlFieldExpression expectedField = new RubyControlFieldExpression("TooltipText", "listViewItem1", String.Empty, "listViewItem1.TooltipText"); - Assert.AreEqual(expectedField, field); - } - - [Test] - public void LocalVariableCreatingNewInstance() - { - SimpleAssignmentExpression expression = RubyParserHelper.GetSimpleAssignmentExpression("listViewItem1 = System::Windows::Forms.ListViewItem.new()"); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression.Left as LocalVariable); - - RubyControlFieldExpression expectedField = new RubyControlFieldExpression(String.Empty, "listViewItem1", String.Empty, "listViewItem1"); - Assert.AreEqual(expectedField, field); - } - - [Test] - public void LocalVariableMethodCall() - { - string code = - "listViewItem1 = System::Windows::Forms::ListViewItem.new()\r\n" + - "listViewItem1.CallMethod()\r\n"; - - MethodCall expression = RubyParserHelper.GetLastExpression(code) as MethodCall; - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression); - - RubyControlFieldExpression expectedField = new RubyControlFieldExpression(String.Empty, String.Empty, "CallMethod", "listViewItem1"); - Assert.AreEqual(expectedField, field); - } - - [Test] - public void LocalVariableIsNotSelfReference() - { - SimpleAssignmentExpression expression = RubyParserHelper.GetSimpleAssignmentExpression("listViewItem1.TooltipText = \"abc\""); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression.Left as AttributeAccess); - Assert.IsFalse(field.IsSelfReference); - } - - [Test] - public void FieldIsSelfReference() - { - SimpleAssignmentExpression expression = RubyParserHelper.GetSimpleAssignmentExpression("self.listView1.TooltipText = \"abc\""); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression.Left as AttributeAccess); - Assert.IsTrue(field.IsSelfReference); - } - - [Test] - public void PrivateClassVariableIsSelfReference() - { - SimpleAssignmentExpression expression = RubyParserHelper.GetSimpleAssignmentExpression("@listView1.TooltipText = \"abc\""); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression.Left as AttributeAccess); - Assert.IsTrue(field.IsSelfReference); - } - - [Test] - public void GetButtonObjectForSelfReference() - { - using (Button button = new Button()) { - SimpleAssignmentExpression expression = RubyParserHelper.GetSimpleAssignmentExpression("self.button1.Size = System::Drawing::Size.new(10, 10)"); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression.Left as AttributeAccess); - - Assert.AreEqual(button, field.GetObjectForMemberName(button)); - } - } - - [Test] - public void GetButtonObject() - { - using (Button button = new Button()) { - SimpleAssignmentExpression expression = RubyParserHelper.GetSimpleAssignmentExpression("@button1.Size = System::Drawing::Size.new(10, 10)"); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression.Left as AttributeAccess); - - Assert.AreEqual(button, field.GetObjectForMemberName(button)); - } - } - - [Test] - public void GetButtonFlatAppearanceObjectForSelfReference() - { - using (Button button = new Button()) { - SimpleAssignmentExpression expression = RubyParserHelper.GetSimpleAssignmentExpression("self.button1.FlatAppearance.BorderSize = 3"); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression.Left as AttributeAccess); - - Assert.AreEqual(button.FlatAppearance, field.GetObjectForMemberName(button)); - } - } - - [Test] - public void GetButtonFlatAppearanceObject() - { - using (Button button = new Button()) { - SimpleAssignmentExpression expression = RubyParserHelper.GetSimpleAssignmentExpression("@button1.FlatAppearance.BorderSize = 3"); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression.Left as AttributeAccess); - - Assert.AreEqual(button.FlatAppearance, field.GetObjectForMemberName(button)); - } - } - - [Test] - public void GetInvalidTwoLevelDeepButtonPropertyDescriptorForSelfReference() - { - using (Button button = new Button()) { - SimpleAssignmentExpression expression = RubyParserHelper.GetSimpleAssignmentExpression("self.button1.InvalidProperty.BorderSize = 3"); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression.Left as AttributeAccess); - - Assert.IsNull(field.GetObjectForMemberName(button)); - } - } - - [Test] - public void NullPropertyValueConversion() - { - using (Form form = new Form()) { - PropertyDescriptor descriptor = TypeDescriptor.GetProperties(form).Find("Text", true); - Assert.IsNull(RubyControlFieldExpression.ConvertPropertyValue(descriptor, null)); - } - } - - [Test] - public void ClrMemberMethodCallIsConvertedToActualMemberNames() - { - string code = - "@pictureBox1.clr_member(System::ComponentModel::ISupportInitialize, :BeginInit).call()\r\n"; - - MethodCall expression = RubyParserHelper.GetMethodCall(code); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression); - - RubyControlFieldExpression expectedField = new RubyControlFieldExpression(String.Empty, "pictureBox1", "BeginInit", "@pictureBox1"); - Assert.AreEqual(expectedField, field); - } - - [Test] - public void UpperCaseClrMemberMethodCallIsConvertedToActualMemberNames() - { - string code = - "@pictureBox1.CLR_MEMBER(System::ComponentModel::ISupportInitialize, :BeginInit).call()\r\n"; - - MethodCall expression = RubyParserHelper.GetMethodCall(code); - RubyControlFieldExpression field = RubyControlFieldExpression.Create(expression); - - RubyControlFieldExpression expectedField = new RubyControlFieldExpression(String.Empty, "pictureBox1", "BeginInit", "@pictureBox1"); - Assert.AreEqual(expectedField, field); - } - - - void AssertAreEqual(RubyControlFieldExpression field, string variableName, string memberName, string methodName, string fullMemberName) - { - string expected = "Variable: " + variableName + " Member: " + memberName + " Method: " + methodName + " FullMemberName: " + fullMemberName; - string actual = "Variable: " + field.VariableName + " Member: " + field.MemberName + " Method: " + field.MethodName + " FullMemberName: " + field.FullMemberName; - Assert.AreEqual(expected, actual, actual); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyDesignerGeneratorTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyDesignerGeneratorTestFixture.cs deleted file mode 100644 index dc67ce947c..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyDesignerGeneratorTestFixture.cs +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using System.ComponentModel; -using System.IO; - -using ICSharpCode.FormsDesigner; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests.Utils; -using UnitTesting.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - [TestFixture] - public class RubyDesignerGeneratorTestFixture - { - RubyDesignerGenerator generator; - - [SetUp] - public void Init() - { - MockTextEditorOptions options = new MockTextEditorOptions(); - generator = new RubyDesignerGenerator(options); - } - - [Test] - public void GetMethodReplaceRegion() - { - MockMethod method = MockMethod.CreateMockMethodWithoutAnyAttributes(); - DomRegion bodyRegion = new DomRegion(0, 4, 1, 4); - method.BodyRegion = bodyRegion; - DomRegion expectedRegion = new DomRegion(bodyRegion.BeginLine + 1, 1, bodyRegion.EndLine, 1); - DomRegion region = generator.GetBodyRegionInDocument(method); - - Assert.AreEqual(expectedRegion, region); - } - - [Test] - public void GenerateEventHandlerWithEmptyMethodBody() - { - string eventHandler = generator.CreateEventHandler("button1_click", String.Empty, "\t"); - string expectedEventHandler = - "\tdef button1_click(sender, e)\r\n" + - "\t\t\r\n" + - "\tend"; - Assert.AreEqual(expectedEventHandler, eventHandler); - } - - [Test] - public void GenerateEventHandlerWithNullMethodBody() - { - string eventHandler = generator.CreateEventHandler("button2_click", null, String.Empty); - string expectedEventHandler = - "def button2_click(sender, e)\r\n" + - "\t\r\n" + - "end"; - Assert.AreEqual(expectedEventHandler, eventHandler); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyDesignerLoaderProviderTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyDesignerLoaderProviderTestFixture.cs deleted file mode 100644 index a4093e45dc..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyDesignerLoaderProviderTestFixture.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel.Design.Serialization; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests the RubyDesignerLoaderProvider class. - /// - [TestFixture] - public class RubyDesignerLoaderProviderTestFixture - { - RubyDesignerLoaderProvider provider; - RubyDesignerGenerator generator; - - [TestFixtureSetUp] - public void SetUpFixture() - { - provider = new RubyDesignerLoaderProvider(); - generator = new RubyDesignerGenerator(null); - } - - [Test] - public void RubyDesignerLoaderCreated() - { - DesignerLoader loader = provider.CreateLoader(generator); - using (IDisposable disposable = loader as IDisposable) { - Assert.IsInstanceOf(typeof(RubyDesignerLoader), loader); - } - } - - [Test] - public void CodeDomProviderIsNull() - { - Assert.IsNull(generator.CodeDomProvider); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyPropertyAssignmentToStringTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyPropertyAssignmentToStringTests.cs deleted file mode 100644 index bdf621f603..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/RubyPropertyAssignmentToStringTests.cs +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Drawing; -using System.Globalization; -using System.Windows.Forms; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests the RubyPropertyValueAssignment class which generates the Ruby code for - /// the rhs of a property value assignment. - /// - [TestFixture] - public class RubyPropertyAssignmentToStringTests - { - [Test] - public void ConvertCustomColorToString() - { - Color customColor = Color.FromArgb(0, 192, 10); - Assert.AreEqual("System::Drawing::Color.FromArgb(0, 192, 10)", RubyPropertyValueAssignment.ToString(customColor)); - } - - [Test] - public void FontToString() - { - CultureInfo cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture; - try { - System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("de-DE"); - Font font = new Font("Times New Roman", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 0); - Assert.AreEqual("System::Drawing::Font.new(\"Times New Roman\", 8.25, System::Drawing::FontStyle.Regular, System::Drawing::GraphicsUnit.Point, 0)", - RubyPropertyValueAssignment.ToString(font)); - } finally { - System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfo; - } - } - - [Test] - public void SizeFToString() - { - SizeF sizeF = new SizeF(4, 10); - Assert.AreEqual("System::Drawing::SizeF.new(4, 10)", RubyPropertyValueAssignment.ToString(sizeF)); - } - - [Test] - public void AnchorStyleToString() - { - AnchorStyles anchorStyle = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - string expectedText = "System::Windows::Forms::AnchorStyles.Top | System::Windows::Forms::AnchorStyles.Bottom | System::Windows::Forms::AnchorStyles.Left | System::Windows::Forms::AnchorStyles.Right"; - Assert.AreEqual(expectedText, RubyPropertyValueAssignment.ToString(anchorStyle)); - } - - [Test] - public void AnchorStyleNoneToString() - { - AnchorStyles anchorStyle = AnchorStyles.None; - string expectedText = "System::Windows::Forms::AnchorStyles.None"; - Assert.AreEqual(expectedText, RubyPropertyValueAssignment.ToString(anchorStyle)); - } - - /// - /// Nested type will have a full name including a "+", for example, SpecialFolder type has a full name of: - /// - /// System.Environment+SpecialFolder - /// - /// So the RubyPropertyValueAssignment needs to replace the "+" with a ".". - /// - [Test] - public void SystemEnvironmentSpecialFolderNestedTypeToString() - { - Environment.SpecialFolder folder = Environment.SpecialFolder.ProgramFiles; - string expectedText = "System::Environment::SpecialFolder.ProgramFiles"; - Assert.AreEqual(expectedText, RubyPropertyValueAssignment.ToString(folder)); - } - - /// - /// Ensures that when the user types in "\t" the code for a string property in the forms designer - /// the actual string is generated is "\\t". - /// - [Test] - public void BackslashCharactersEncodedInStrings() - { - string text = @"c:\temp"; - string expectedText = "\"c:\\\\temp\""; - Assert.AreEqual(expectedText, RubyPropertyValueAssignment.ToString(text)); - } - - [Test] - public void DoubleQuoteCharactersEncodedInStrings() - { - string text = "c:\\te\"mp"; - string expectedText = "\"c:\\\\te\\\"mp\""; - Assert.AreEqual(expectedText, RubyPropertyValueAssignment.ToString(text)); - } - - [Test] - public void DefaultCursorToString() - { - Assert.AreEqual("System::Windows::Forms::Cursors.Default", RubyPropertyValueAssignment.ToString(Cursors.Default)); - } - - [Test] - public void NullConversion() - { - Assert.AreEqual("nil", RubyPropertyValueAssignment.ToString(null)); - } - - [Test] - public void CharConversion() - { - Assert.AreEqual("\"*\"", RubyPropertyValueAssignment.ToString('*')); - } - - [Test] - public void BoolConversion() - { - Assert.AreEqual("true", RubyPropertyValueAssignment.ToString(true)); - } - - [Test] - public void StringConversion() - { - string s = "abc"; - Assert.AreEqual("\"abc\"", RubyPropertyValueAssignment.ToString(s)); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/TextBoxNotAddedToFormTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/TextBoxNotAddedToFormTestFixture.cs deleted file mode 100644 index 098a7d97e8..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/TextBoxNotAddedToFormTestFixture.cs +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// When a text box is not added to the form's Control collection in InitializeComponent then: - /// - /// 1) Text box should not be added to the form's Control collection when the form is created. - /// 2) Text box should be registered with the designer via the IComponentCreator.Add method. - /// 3) Text box should be created via the IComponentCreator.CreateInstance method. - /// - [TestFixture] - public class TextBoxNotAddedToFormTestFixture : LoadFormTestFixtureBase - { - public override string RubyCode { - get { - return - "class MainForm < System::Windows::Forms::Form\r\n" + - " def InitializeComponent()\r\n" + - " @textBox1 = System::Windows::Forms::TextBox.new()\r\n" + - " self.SuspendLayout()\r\n" + - " # \r\n" + - " # textBox1\r\n" + - " # \r\n" + - " @textBox1.Name = \"textBox1\"\r\n" + - " # \r\n" + - " # form1\r\n" + - " # \r\n" + - " self.ResumeLayout(false)\r\n" + - " end\r\n" + - "end"; - } - } - - [Test] - public void AddedComponentsContainsTextBox() - { - CreatedInstance instance = ComponentCreator.GetCreatedInstance(typeof(TextBox)); - - AddedComponent c = new AddedComponent(instance.Object as IComponent, "textBox1"); - Assert.Contains(c, ComponentCreator.AddedComponents); - } - - [Test] - public void TextBoxIsNotAddedToForm() - { - Assert.AreEqual(0, Form.Controls.Count); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/UnknownTypeTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/UnknownTypeTestFixture.cs deleted file mode 100644 index 6b0e7dbf08..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Designer/UnknownTypeTestFixture.cs +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Resources; -using System.Windows.Forms; - -using ICSharpCode.Core; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using IronRuby.Compiler.Ast; -using Microsoft.Scripting; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Designer -{ - /// - /// Tests that the RubyFormWalker throws a RubyFormWalkerException if a unknown type is used in the - /// form. - /// - [TestFixture] - public class UnknownTypeTestFixture - { - [TestFixtureSetUp] - public void SetUpFixture() - { - ResourceManager rm = new ResourceManager("RubyBinding.Tests.Strings", GetType().Assembly); - ResourceService.RegisterNeutralStrings(rm); - } - - [Test] - public void SelfAssignmentWithUnknownTypeRhs() - { - string RubyCode = - "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MainForm < System::Windows::Forms::Form\r\n" + - " def initialize()\r\n" + - " self.InitializeComponent()\r\n" + - " end\r\n "+ - "\r\n" + - " def InitializeComponent()\r\n" + - " self.ClientSize = Unknown::Type(10)\r\n" + - " end\r\n" + - "end"; - - try { - RubyComponentWalker walker = new RubyComponentWalker(new MockComponentCreator()); - walker.CreateComponent(RubyCode); - Assert.Fail("Exception should have been thrown before this."); - } catch (RubyComponentWalkerException ex) { - string expectedMessage = String.Format(StringParser.Parse("${res:ICSharpCode.PythonBinding.UnknownTypeName}"), "Unknown.Type"); - Assert.AreEqual(expectedMessage, ex.Message); - } - } - - [Test] - public void LocalVariableAssignmentWithUnknownTypeRhs() - { - string RubyCode = - "require \"System.Windows.Forms\"\r\n" + - "\r\n" + - "class MainForm < System::Windows::Forms::Form\r\n" + - " def initialize()\r\n" + - " self.InitializeComponent()\r\n" + - " end\r\n" + - "\r\n" + - " def InitializeComponent()\r\n" + - " abc = Unknown::Type(10)\r\n" + - " end\r\n" + - "end"; - - try { - RubyComponentWalker walker = new RubyComponentWalker(new MockComponentCreator()); - walker.CreateComponent(RubyCode); - Assert.Fail("Exception should have been thrown before this."); - } catch (RubyComponentWalkerException ex) { - string expectedMessage = String.Format(StringParser.Parse("${res:ICSharpCode.PythonBinding.UnknownTypeName}"), "Unknown.Type"); - Assert.AreEqual(expectedMessage, ex.Message); - } - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Gui/DebugRunRubyCommandTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Gui/DebugRunRubyCommandTests.cs deleted file mode 100644 index cee54fb679..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Gui/DebugRunRubyCommandTests.cs +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Diagnostics; -using ICSharpCode.Core; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Debugging; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Gui -{ - [TestFixture] - public class DebugRubyCommandTests - { - MockDebugger debugger; - RunDebugRubyCommand command; - - [SetUp] - public void Init() - { - MockWorkbench workbench = MockWorkbench.CreateWorkbenchWithOneViewContent(@"C:\Projects\test.rb"); - - Properties p = new Properties(); - RubyAddInOptions options = new RubyAddInOptions(p); - options.RubyFileName = @"C:\IronRuby\ir.exe"; - - debugger = new MockDebugger(); - command = new RunDebugRubyCommand(workbench, options, debugger); - command.Run(); - } - - [Test] - public void Run_RubyFileOpen_DebuggerStartMethodCalled() - { - bool startMethodCalled = debugger.StartMethodCalled; - Assert.IsTrue(startMethodCalled); - } - - [Test] - public void Run_RubyFileOpen_ProcessInfoFileNameContainsPathToIronRubyConsole() - { - string fileName = debugger.ProcessStartInfo.FileName; - string expectedFileName = @"C:\IronRuby\ir.exe"; - - Assert.AreEqual(expectedFileName, fileName); - } - - [Test] - public void Run_RubyFileOpen_ProcessInfoArgsHasDebugArgument() - { - string arguments = debugger.ProcessStartInfo.Arguments; - string expectedArguments = "--disable-gems -D \"test.rb\""; - - Assert.AreEqual(expectedArguments, arguments); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Gui/RubyFormattingStrategyTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Gui/RubyFormattingStrategyTests.cs deleted file mode 100644 index 85e07163db..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Gui/RubyFormattingStrategyTests.cs +++ /dev/null @@ -1,700 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.AvalonEdit; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Editor; -using ICSharpCode.SharpDevelop.Editor.AvalonEdit; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Gui -{ - [TestFixture] - public class RubyFormattingStrategyTests - { - TextEditor textEditor; - RubyFormattingStrategy formattingStrategy; - AvalonEditTextEditorAdapter textEditorAdapter; - - void CreateFormattingStrategy() - { - MockTextEditorOptions textEditorOptions = new MockTextEditorOptions(); - textEditorOptions.IndentationSize = 4; - textEditor = new TextEditor(); - textEditor.Options = textEditorOptions; - - textEditorAdapter = new AvalonEditTextEditorAdapter(textEditor); - - formattingStrategy = new RubyFormattingStrategy(); - } - - [Test] - public void IndentLine_NewMethodDefinitionOnPreviousLine_NextLineIsIndented() - { - CreateFormattingStrategy(); - - textEditor.Text = - "def newMethod\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "def newMethod\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_NewMethodDefinitionWithBracketsOnPreviousLine_NextLineIsIndented() - { - CreateFormattingStrategy(); - - textEditor.Text = - "def newMethod()\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "def newMethod()\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_NewClassDefinitionOnPreviousLine_NextLineIsIndented() - { - CreateFormattingStrategy(); - - textEditor.Text = - "class MyClass\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "class MyClass\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_PrintStatementOnPreviousLineSoNoExtraIndentationRequired_NextLineIndentedToSameLevelAsPreviousLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "\tprint 'abc'\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "\tprint 'abc'\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_ReturnValueStatementOnPreviousLine_DecreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "def method1\r\n" + - "\treturn 0\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(3); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "def method1\r\n" + - "\treturn 0\r\n" + - ""; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_ReturnStatementOnPreviousLine_DecreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "def method1\r\n" + - "\treturn\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(3); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "def method1\r\n" + - "\treturn\r\n" + - ""; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_ReturnStatementOnPreviousLineWithNoIndentOnPreviousLine_NextLineIsNotIndented() - { - CreateFormattingStrategy(); - - textEditor.Text = - "return\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "return\r\n" + - ""; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_StatementIsNotReturnOnPreviousLine_NextLineIndentedToSameLevelAsPreviousLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "\treturnValue\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "\treturnValue\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_RaiseStatementWithObjectOnPreviousLine_DecreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "def method1\r\n" + - "\traise 'a'\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(3); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "def method1\r\n" + - "\traise 'a'\r\n" + - ""; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_RaiseStatementOnPreviousLine_DecreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "def method1\r\n" + - "\traise\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(3); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "def method1\r\n" + - "\traise\r\n" + - ""; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_StatementIsNotRaiseStatementOnPreviousLine_NextLineIsIndentedToSameLevelAsPreviousLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "def method1\r\n" + - "\traiseThis\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(3); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "def method1\r\n" + - "\traiseThis\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_BreakStatementOnPreviousLine_DecreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "def method1\r\n" + - "\tbreak\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(3); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "def method1\r\n" + - "\tbreak\r\n" + - ""; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_StatementIsNotBreakStatementOnPreviousLine_LineIsIndentedToSameLevelAsPreviousLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "def method1\r\n" + - "\tbreakThis\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(3); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "def method1\r\n" + - "\tbreakThis\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_IfThenStatementOnPreviousLine_IndentIncreasedOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "if i > 0 then\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "if i > 0 then\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_IfStatementOnPreviousLine_IndentIncreasedOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "if i > 0\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "if i > 0\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_ElseStatementOnPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "else\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "else\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_ElseIfStatementOnPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "elsif i > 0\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "elsif i > 0\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_LoopStatementOnPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "loop do\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "loop do\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_UnlessStatementOnPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "unless i > 0\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "unless i > 0\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_UntilStatementOnPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "until i > 0\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "until i > 0\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_ForStatementOnPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "for i in 1..5\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "for i in 1..5\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_DoStatementAtEndOfPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "expr do\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "expr do\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_OpenCurlyBraceAtEndOfPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "expr {\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "expr {\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_BeginStatementOnPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "begin\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "begin\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_RescueStatementWithExceptionOnPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "rescue Exception => ex\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "rescue Exception => ex\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_RescueStatementOnPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "rescue\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "rescue\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_EnsureStatementOnPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "ensure\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "ensure\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_ModuleStatementOnPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "module Foo\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "module Foo\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_CaseWhenStatementOnPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "case num\r\n" + - "\twhen 0\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(3); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "case num\r\n" + - "\twhen 0\r\n" + - "\t\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_CaseStatementOnPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "case num\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "case num\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void IndentLine_CaseStatementInMiddleOnPreviousLine_IncreasesIndentOnNextLine() - { - CreateFormattingStrategy(); - - textEditor.Text = - "value = case num\r\n" + - ""; - - IDocumentLine line = textEditorAdapter.Document.GetLine(2); - formattingStrategy.IndentLine(textEditorAdapter, line); - string text = textEditor.Text; - - string expectedText = - "value = case num\r\n" + - "\t"; - - Assert.AreEqual(expectedText, text); - } - - [Test] - public void SurroundSelectionWithComment_CursorOnFirstLineNothingSelected_CommentsFirstLine() - { - CreateFormattingStrategy(); - - textEditor.Text = "print 'hello'"; - formattingStrategy.SurroundSelectionWithComment(textEditorAdapter); - string text = textEditor.Text; - - string expectedText = "#print 'hello'"; - - Assert.AreEqual(expectedText, text); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Gui/RubyOptionsPanelTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Gui/RubyOptionsPanelTestFixture.cs deleted file mode 100644 index 862cd61b42..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Gui/RubyOptionsPanelTestFixture.cs +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Windows.Forms; -using ICSharpCode.Core; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Gui; -using ICSharpCode.SharpDevelop.Gui.OptionPanels; -using NUnit.Framework; - -namespace RubyBinding.Tests.Gui -{ - /// - /// Tests the RubyOptionsPanel. - /// - [TestFixture] - public class RubyOptionsPanelTestFixture - { - RubyOptionsPanel optionsPanel; - Properties properties; - RubyAddInOptions options; - TextBox fileNameTextBox; - TextBox rubyLibraryPathTextBox; - - [SetUp] - public void SetUp() - { - properties = new Properties(); - options = new RubyAddInOptions(properties); - options.RubyFileName = @"C:\Ruby\ir.exe"; - options.RubyLibraryPath = @"C:\Ruby\lib"; - optionsPanel = new RubyOptionsPanel(options); - optionsPanel.LoadPanelContents(); - fileNameTextBox = (TextBox)optionsPanel.ControlDictionary["rubyFileNameTextBox"]; - rubyLibraryPathTextBox = (TextBox)optionsPanel.ControlDictionary["rubyLibraryPathTextBox"]; - } - - [TearDown] - public void TearDown() - { - optionsPanel.Dispose(); - } - - [Test] - public void RubyFileNameDisplayed() - { - Assert.AreEqual(options.RubyFileName, fileNameTextBox.Text); - } - - [Test] - public void RubyLibraryPathDisplayed() - { - Assert.AreEqual(options.RubyLibraryPath, rubyLibraryPathTextBox.Text); - } - - [Test] - public void PanelIsOptionsPanel() - { - Assert.IsNotNull(optionsPanel as XmlFormsOptionPanel); - } - - [Test] - public void SavingOptionsUpdatesRubyFileName() - { - string fileName = @"C:\Program Files\IronRuby\ir.exe"; - fileNameTextBox.Text = fileName; - optionsPanel.StorePanelContents(); - Assert.AreEqual(fileName, options.RubyFileName); - } - - [Test] - public void SavingOptionsUpdatesRubyLibraryPath() - { - string path = @"c:\Program Files\Python\lib"; - rubyLibraryPathTextBox.Text = path; - optionsPanel.StorePanelContents(); - Assert.AreEqual(path, options.RubyLibraryPath); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Gui/RunRubyCommandTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Gui/RunRubyCommandTests.cs deleted file mode 100644 index e473a80127..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Gui/RunRubyCommandTests.cs +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.Core; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Gui; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Gui -{ - /// - /// Tests that the RunRubyCommand class runs the Ruby console - /// passing the filename of the Ruby script active in SharpDevelop. - /// - [TestFixture] - public class RunRubyCommandTests - { - MockDebugger debugger; - RunRubyCommand command; - - [SetUp] - public void Init() - { - MockWorkbench workbench = MockWorkbench.CreateWorkbenchWithOneViewContent(@"C:\Projects\test.rb"); - - Properties p = new Properties(); - RubyAddInOptions options = new RubyAddInOptions(p); - options.RubyFileName = @"C:\IronRuby\ir.exe"; - - debugger = new MockDebugger(); - command = new RunRubyCommand(workbench, options, debugger); - command.Run(); - } - - [Test] - public void Run_RubyFileOpen_RubyCommandIsAbstractCommand() - { - AbstractCommand abstractCommand = command as AbstractCommand; - Assert.IsNotNull(abstractCommand); - } - - [Test] - public void Run_RubyFileOpen_DebuggerStartWithoutDebuggingMethodCalled() - { - bool startCalled = debugger.StartWithoutDebuggingMethodCalled; - Assert.IsTrue(startCalled); - } - - [Test] - public void Run_RubyFileOpen_ProcessInfoFileNameIsIronRubyConsole() - { - string fileName = debugger.ProcessStartInfo.FileName; - string expectedFileName = "cmd.exe"; - Assert.AreEqual(expectedFileName, fileName); - } - - [Test] - public void Run_RubyFileOpen_ProcessInfoArgsContainsFileNameActiveInTextEditor() - { - string arguments = debugger.ProcessStartInfo.Arguments; - string expectedArguments = "/c \"\"C:\\IronRuby\\ir.exe\" --disable-gems \"test.rb\"\" & pause"; - - Assert.AreEqual(expectedArguments, arguments); - } - - [Test] - public void Run_RubyFileOpen_WorkingDirectoryIsSameDirectoryAsFileBeingRun() - { - string directory = debugger.ProcessStartInfo.WorkingDirectory; - string expectedDirectory = @"C:\Projects"; - Assert.AreEqual(expectedDirectory, directory); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassMethodWithBodyTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassMethodWithBodyTestFixture.cs deleted file mode 100644 index fc45e581b3..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassMethodWithBodyTestFixture.cs +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using ICSharpCode.AvalonEdit.AddIn; -using ICSharpCode.AvalonEdit.Document; -using ICSharpCode.AvalonEdit.Editing; -using ICSharpCode.AvalonEdit.Folding; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Parsing -{ - [TestFixture] - public class ParseClassMethodWithBodyTestFixture - { - ICompilationUnit compilationUnit; - IClass c; - IMethod method; - FoldingSection methodFold; - TextDocument document; - - [TestFixtureSetUp] - public void SetUpFixture() - { - string ruby = "class Test\r\n" + - "\tdef foo\r\n" + - "\t\tputs 'test'\r\n" + - "\tend\r\n" + - "end"; - - DefaultProjectContent projectContent = new DefaultProjectContent(); - RubyParser parser = new RubyParser(); - compilationUnit = parser.Parse(projectContent, @"C:\test.rb", ruby); - if (compilationUnit.Classes.Count > 0) { - c = compilationUnit.Classes[0]; - if (c.Methods.Count > 0) { - method = c.Methods[0]; - } - - TextArea textArea = new TextArea(); - document = new TextDocument(); - textArea.Document = document; - textArea.Document.Text = ruby; - - // Get folds. - ParserFoldingStrategy foldingStrategy = new ParserFoldingStrategy(textArea); - - ParseInformation parseInfo = new ParseInformation(compilationUnit); - foldingStrategy.UpdateFoldings(parseInfo); - List folds = new List(foldingStrategy.FoldingManager.AllFoldings); - - if (folds.Count > 1) { - methodFold = folds[1]; - } - } - } - - [Test] - public void MethodName() - { - Assert.AreEqual("foo", method.Name); - } - - [Test] - public void MethodBodyRegion() - { - int startLine = 2; - int startColumn = 11; - int endLine = 4; - int endColumn = 5; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), method.BodyRegion.ToString()); - } - - /// - /// The method region does not include the body. - /// - [Test] - public void MethodRegion() - { - int startLine = 2; - int startColumn = 2; - int endLine = 2; - int endColumn = 11; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), method.Region.ToString()); - } - - [Test] - public void MethodFoldMarkerInnerText() - { - string textInsideFold = document.GetText(methodFold.StartOffset, methodFold.Length); - Assert.AreEqual("\r\n\t\tputs 'test'\r\n\tend", textInsideFold); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassWithBaseClassTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassWithBaseClassTestFixture.cs deleted file mode 100644 index f385384d92..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassWithBaseClassTestFixture.cs +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Parsing -{ - /// - /// Tests that a base class is added to the class. - /// - [TestFixture] - public class ParseClassWithBaseClassTestFixture - { - ICompilationUnit compilationUnit; - IClass c; - - [TestFixtureSetUp] - public void SetUpFixture() - { - string Ruby = "class Test < Base\r\n" + - "\tdef foo(i)\r\n" + - "\tend\r\n" + - "end"; - - DefaultProjectContent projectContent = new DefaultProjectContent(); - RubyParser parser = new RubyParser(); - compilationUnit = parser.Parse(projectContent, @"C:\test.rb", Ruby); - if (compilationUnit.Classes.Count > 0) { - c = compilationUnit.Classes[0]; - } - } - - [Test] - public void HasBaseClass() - { - IReturnType matchedBaseType = null; - foreach (IReturnType baseType in c.BaseTypes) { - if (baseType.Name == "Base") { - matchedBaseType = baseType; - break; - } - } - Assert.IsNotNull(matchedBaseType); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassWithCtorTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassWithCtorTestFixture.cs deleted file mode 100644 index a5cf7ae0fc..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassWithCtorTestFixture.cs +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using ICSharpCode.AvalonEdit.AddIn; -using ICSharpCode.AvalonEdit.Document; -using ICSharpCode.AvalonEdit.Editing; -using ICSharpCode.AvalonEdit.Folding; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Parsing -{ - [TestFixture] - public class ParseClassWithCtorTestFixture - { - ICompilationUnit compilationUnit; - IClass c; - IMethod method; - FoldingSection methodFold; - FoldingSection classFold; - TextDocument document; - - [TestFixtureSetUp] - public void SetUpFixture() - { - string ruby = "class Test\r\n" + - "\tdef initialize\r\n" + - "\t\tputs 'test'\r\n" + - "\tend\r\n" + - "end"; - - DefaultProjectContent projectContent = new DefaultProjectContent(); - RubyParser parser = new RubyParser(); - compilationUnit = parser.Parse(projectContent, @"C:\test.rb", ruby); - if (compilationUnit.Classes.Count > 0) { - c = compilationUnit.Classes[0]; - if (c.Methods.Count > 0) { - method = c.Methods[0]; - } - - TextArea textArea = new TextArea(); - document = new TextDocument(); - textArea.Document = document; - textArea.Document.Text = ruby; - - // Get folds. - ParserFoldingStrategy foldingStrategy = new ParserFoldingStrategy(textArea); - - ParseInformation parseInfo = new ParseInformation(compilationUnit); - foldingStrategy.UpdateFoldings(parseInfo); - List folds = new List(foldingStrategy.FoldingManager.AllFoldings); - - if (folds.Count > 1) { - classFold = folds[0]; - methodFold = folds[1]; - } - } - } - - [Test] - public void MethodBodyRegion() - { - int startLine = 2; - int startColumn = 18; - int endLine = 4; - int endColumn = 5; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), method.BodyRegion.ToString()); - } - - [Test] - public void MethodFoldMarkerInnerText() - { - string textInsideFold = document.GetText(methodFold.StartOffset, methodFold.Length); - Assert.AreEqual("\r\n\t\tputs 'test'\r\n\tend", textInsideFold); - } - - [Test] - public void MethodIsConstructor() - { - Assert.IsTrue(method.IsConstructor); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassWithNewLineBeforeMethodTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassWithNewLineBeforeMethodTestFixture.cs deleted file mode 100644 index f4f8c7670f..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassWithNewLineBeforeMethodTestFixture.cs +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using ICSharpCode.AvalonEdit.AddIn; -using ICSharpCode.AvalonEdit.Document; -using ICSharpCode.AvalonEdit.Editing; -using ICSharpCode.AvalonEdit.Folding; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Parsing -{ - [TestFixture] - public class ParseClassWithNewLineBeforeMethodTestFixture - { - ICompilationUnit compilationUnit; - IClass c; - IMethod method; - FoldingSection methodFold = null; - FoldingSection classFold = null; - TextDocument document; - - [TestFixtureSetUp] - public void SetUpFixture() - { - string ruby = "class Test\r\n" + - "\r\n" + - "\tdef foo\r\n" + - "\tend\r\n" + - "end"; - - DefaultProjectContent projectContent = new DefaultProjectContent(); - RubyParser parser = new RubyParser(); - compilationUnit = parser.Parse(projectContent, @"C:\test.rb", ruby); - if (compilationUnit.Classes.Count > 0) { - c = compilationUnit.Classes[0]; - if (c.Methods.Count > 0) { - method = c.Methods[0]; - } - - TextArea textArea = new TextArea(); - document = new TextDocument(); - textArea.Document = document; - textArea.Document.Text = ruby; - - // Get folds. - ParserFoldingStrategy foldingStrategy = new ParserFoldingStrategy(textArea); - ParseInformation parseInfo = new ParseInformation(compilationUnit); - foldingStrategy.UpdateFoldings(parseInfo); - List folds = new List(foldingStrategy.FoldingManager.AllFoldings); - - if (folds.Count > 0) { - classFold = folds[0]; - } - if (folds.Count > 1) { - methodFold = folds[1]; - } - } - } - - [Test] - public void ClassBodyRegion() - { - int startLine = 1; - int startColumn = 11; - int endLine = 5; - int endColumn = 4; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), c.BodyRegion.ToString()); - } - - /// - /// The class declaration region needs to extend up to and - /// including the colon. - /// - [Test] - public void ClassRegion() - { - int startLine = 1; - int startColumn = 1; - int endLine = 5; - int endColumn = 4; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), c.Region.ToString()); - } - - [Test] - public void MethodBodyRegion() - { - int startLine = 3; - int startColumn = 11; // IronRuby parser includes the as part of the method parameters. - int endLine = 4; - int endColumn = 5; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), method.BodyRegion.ToString()); - } - - /// - /// The method region does not include the body. - /// - [Test] - public void MethodRegion() - { - int startLine = 3; - int startColumn = 2; - int endLine = 3; - int endColumn = 11; // IronRuby parser includes the as part of the method parameters - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), method.Region.ToString()); - } - - [Test] - public void MethodFoldMarkerInnerText() - { - string textInsideFold = document.GetText(methodFold.StartOffset, methodFold.Length); - Assert.AreEqual("\r\n\tend", textInsideFold); - } - - [Test] - public void ClassFoldMarkerInnerText() - { - string textInsideFold = document.GetText(classFold.StartOffset, classFold.Length); - Assert.AreEqual("\r\n\r\n\tdef foo\r\n\tend\r\nend", textInsideFold); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassWithSingleMethodTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassWithSingleMethodTestFixture.cs deleted file mode 100644 index f47dc57336..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseClassWithSingleMethodTestFixture.cs +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using ICSharpCode.AvalonEdit.AddIn; -using ICSharpCode.AvalonEdit.Document; -using ICSharpCode.AvalonEdit.Editing; -using ICSharpCode.AvalonEdit.Folding; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Parsing -{ - [TestFixture] - public class ParseClassWithMethodTestFixture - { - ICompilationUnit compilationUnit; - IClass c; - IMethod method; - FoldingSection methodFold; - FoldingSection classFold; - TextDocument document; - - [TestFixtureSetUp] - public void SetUpFixture() - { - string ruby = "class Test\r\n" + - "\tdef foo\r\n" + - "\tend\r\n" + - "end"; - - DefaultProjectContent projectContent = new DefaultProjectContent(); - RubyParser parser = new RubyParser(); - compilationUnit = parser.Parse(projectContent, @"C:\test.rb", ruby); - if (compilationUnit.Classes.Count > 0) { - c = compilationUnit.Classes[0]; - if (c.Methods.Count > 0) { - method = c.Methods[0]; - } - - // Get folds. - TextArea textArea = new TextArea(); - document = new TextDocument(); - textArea.Document = document; - textArea.Document.Text = ruby; - - ParserFoldingStrategy foldingStrategy = new ParserFoldingStrategy(textArea); - - ParseInformation parseInfo = new ParseInformation(compilationUnit); - foldingStrategy.UpdateFoldings(parseInfo); - List folds = new List(foldingStrategy.FoldingManager.AllFoldings); - - if (folds.Count > 0) { - classFold = folds[0]; - } - if (folds.Count > 1) { - methodFold = folds[1]; - } - } - } - - [Test] - public void OneClass() - { - Assert.AreEqual(1, compilationUnit.Classes.Count); - } - - [Test] - public void ClassName() - { - Assert.AreEqual("Test", c.Name); - } - - [Test] - public void ClassBodyRegion() - { - int startLine = 1; - int startColumn = 11; - int endLine = 4; - int endColumn = 4; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), c.BodyRegion.ToString()); - } - - /// - /// The class declaration region needs to extend up to and - /// including the colon. - /// - [Test] - public void ClassRegion() - { - int startLine = 1; - int startColumn = 1; - int endLine = 4; - int endColumn = 4; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), c.Region.ToString()); - } - - [Test] - public void MethodName() - { - Assert.AreEqual("foo", method.Name); - } - - [Test] - public void MethodBodyRegion() - { - int startLine = 2; - int startColumn = 11; // IronRuby parser includes the "()" part of the method parameters even if it does not exist. - int endLine = 3; - int endColumn = 5; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), method.BodyRegion.ToString()); - } - - /// - /// The method region does not include the body. - /// - [Test] - public void MethodRegion() - { - int startLine = 2; - int startColumn = 2; - int endLine = 2; - int endColumn = 11; // IronRuby parser includes the "()" part of the method parameters even if it does not exist. - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), method.Region.ToString()); - } - - [Test] - public void MethodFoldMarkerInnerText() - { - string textInsideFold = document.GetText(methodFold.StartOffset, methodFold.Length); - Assert.AreEqual("\r\n\tend", textInsideFold); - } - - [Test] - public void MethodIsNotConstructor() - { - Assert.IsFalse(method.IsConstructor); - } - - [Test] - public void MethodIsPublic() - { - ModifierEnum modifiers = ModifierEnum.Public; - Assert.AreEqual(modifiers, method.Modifiers); - } - - [Test] - public void ClassFoldMarkerInnerText() - { - string textInsideFold = document.GetText(classFold.StartOffset, classFold.Length); - Assert.AreEqual("\r\n\tdef foo\r\n\tend\r\nend", textInsideFold); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseInvalidRubyCodeTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseInvalidRubyCodeTestFixture.cs deleted file mode 100644 index ebaf3036b0..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseInvalidRubyCodeTestFixture.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests; - -namespace RubyBinding.Tests.Parsing -{ - /// - /// Tests that the rubyparser does not throw an exception - /// when the ruby code is invalid. - /// - [TestFixture] - public class ParseInvalidRubyCodeTestFixture - { - ICompilationUnit compilationUnit; - - [TestFixtureSetUp] - public void SetUpFixture() - { - string ruby = "class Class1\r\n" + - " @\r\n" + - "end"; - - DefaultProjectContent projectContent = new DefaultProjectContent(); - RubyParser parser = new RubyParser(); - compilationUnit = parser.Parse(projectContent, @"C:\test.rb", ruby); - } - - [Test] - public void CompilationUnitIsNotNull() - { - Assert.IsNotNull(compilationUnit); - } - - [Test] - public void FileNameSet() - { - Assert.AreEqual(@"C:\test.rb", compilationUnit.FileName); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseMethodWithOptionalParametersTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseMethodWithOptionalParametersTestFixture.cs deleted file mode 100644 index 843ee27d08..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseMethodWithOptionalParametersTestFixture.cs +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Parsing -{ - [TestFixture] - public class ParseMethodWithOptionalParametersTestFixture - { - IMethod method; - IParameter parameterA; - IParameter parameterB; - - [TestFixtureSetUp] - public void SetUpFixture() - { - string Ruby = "class Test\r\n" + - "\tdef foo(a = 1, b = 'test')\r\n" + - "\tend\r\n" + - "end"; - - DefaultProjectContent projectContent = new DefaultProjectContent(); - RubyParser parser = new RubyParser(); - ICompilationUnit compilationUnit = parser.Parse(projectContent, @"C:\test.rb", Ruby); - if (compilationUnit.Classes.Count > 0) { - IClass c = compilationUnit.Classes[0]; - method = c.Methods[0]; - if (method.Parameters.Count > 1) { - parameterA = method.Parameters[0]; - parameterB = method.Parameters[1]; - } - } - } - - [Test] - public void MethodHasTwoParameters() - { - Assert.AreEqual(2, method.Parameters.Count); - } - - [Test] - public void FirstParameterIsSender() - { - Assert.AreEqual("a", parameterA.Name); - } - - [Test] - public void SecondParameterIsEventArgs() - { - Assert.AreEqual("b", parameterB.Name); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseMethodWithParametersTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseMethodWithParametersTestFixture.cs deleted file mode 100644 index 34e58ad57f..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseMethodWithParametersTestFixture.cs +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Parsing -{ - [TestFixture] - public class ParseMethodWithParametersTestFixture - { - IMethod method; - IParameter senderParameter; - IParameter eventArgsParameter; - - [TestFixtureSetUp] - public void SetUpFixture() - { - string Ruby = "class Test\r\n" + - "\tdef foo(sender, e)\r\n" + - "\tend\r\n" + - "end"; - - DefaultProjectContent projectContent = new DefaultProjectContent(); - RubyParser parser = new RubyParser(); - ICompilationUnit compilationUnit = parser.Parse(projectContent, @"C:\test.rb", Ruby); - if (compilationUnit.Classes.Count > 0) { - IClass c = compilationUnit.Classes[0]; - method = c.Methods[0]; - if (method.Parameters.Count > 1) { - senderParameter = method.Parameters[0]; - eventArgsParameter = method.Parameters[1]; - } - } - } - - [Test] - public void MethodHasTwoParameters() - { - Assert.AreEqual(2, method.Parameters.Count); - } - - [Test] - public void FirstParameterIsSender() - { - Assert.AreEqual("sender", senderParameter.Name); - } - - [Test] - public void SecondParameterIsEventArgs() - { - Assert.AreEqual("e", eventArgsParameter.Name); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseMethodsWithNoClassTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseMethodsWithNoClassTestFixture.cs deleted file mode 100644 index 4be1d82623..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseMethodsWithNoClassTestFixture.cs +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using ICSharpCode.AvalonEdit.AddIn; -using ICSharpCode.AvalonEdit.Document; -using ICSharpCode.AvalonEdit.Editing; -using ICSharpCode.AvalonEdit.Folding; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Parsing -{ - /// - /// Support folding when no classes are defined. - /// - [TestFixture] - public class ParseMethodsWithNoClassTestFixture - { - ICompilationUnit compilationUnit; - FoldingSection fooMethodFold; - FoldingSection barMethodFold; - IClass globalClass; - IMethod fooMethod; - IMethod barMethod; - TextDocument document; - - [TestFixtureSetUp] - public void SetUpFixture() - { - string ruby = - "def foo\r\n" + - "end\r\n" + - "\r\n" + - "def bar(i)\r\n" + - "end"; - - DefaultProjectContent projectContent = new DefaultProjectContent(); - RubyParser parser = new RubyParser(); - compilationUnit = parser.Parse(projectContent, @"C:\test.rb", ruby); - - if (compilationUnit.Classes.Count > 0) { - globalClass = compilationUnit.Classes[0]; - if (globalClass.Methods.Count > 1) { - fooMethod = globalClass.Methods[0]; - barMethod = globalClass.Methods[1]; - } - } - - // Get folds. - TextArea textArea = new TextArea(); - document = new TextDocument(); - textArea.Document = document; - textArea.Document.Text = ruby; - - ParserFoldingStrategy foldingStrategy = new ParserFoldingStrategy(textArea); - - ParseInformation parseInfo = new ParseInformation(compilationUnit); - foldingStrategy.UpdateFoldings(parseInfo); - List folds = new List(foldingStrategy.FoldingManager.AllFoldings); - - if (folds.Count > 1) { - fooMethodFold = folds[0]; - barMethodFold = folds[1]; - } - } - - [Test] - public void OneClass() - { - Assert.AreEqual(1, compilationUnit.Classes.Count); - } - - [Test] - public void GlobalClassName() - { - Assert.AreEqual("test", globalClass.Name); - } - - [Test] - public void GlobalClassHasTwoMethods() - { - Assert.AreEqual(2, globalClass.Methods.Count); - } - - [Test] - public void FooMethodName() - { - Assert.AreEqual("foo", fooMethod.Name); - } - - [Test] - public void BarMethodName() - { - Assert.AreEqual("bar", barMethod.Name); - } - - [Test] - public void FooMethodDefaultReturnType() - { - Assert.AreEqual(globalClass, fooMethod.ReturnType.GetUnderlyingClass()); - } - - [Test] - public void BarMethodDefaultReturnType() - { - Assert.AreEqual(globalClass, barMethod.ReturnType.GetUnderlyingClass()); - } - - [Test] - public void FooMethodDeclaringType() - { - Assert.AreEqual(globalClass, fooMethod.DeclaringType); - } - - [Test] - public void FooMethodBodyRegion() - { - int startLine = 1; - int startColumn = 10; - int endLine = 2; - int endColumn = 4; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), fooMethod.BodyRegion.ToString()); - } - - [Test] - public void FooMethodRegion() - { - int startLine = 1; - int startColumn = 1; - int endLine = 1; - int endColumn = 10; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), fooMethod.Region.ToString()); - } - - [Test] - public void BarMethodBodyRegion() - { - int startLine = 4; - int startColumn = 11; - int endLine = 5; - int endColumn = 4; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), barMethod.BodyRegion.ToString()); - } - - [Test] - public void BarMethodRegion() - { - int startLine = 4; - int startColumn = 1; - int endLine = 4; - int endColumn = 11; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), barMethod.Region.ToString()); - } - - [Test] - public void BarMethodHasOneParameter() - { - Assert.AreEqual(1, barMethod.Parameters.Count); - } - - [Test] - public void FooMethodFoldMarkerInnerText() - { - string textInsideFold = document.GetText(fooMethodFold.StartOffset, fooMethodFold.Length); - Assert.AreEqual("\r\nend", textInsideFold); - } - - [Test] - public void BarMethodFoldMarkerInnerText() - { - string textInsideFold = document.GetText(barMethodFold.StartOffset, barMethodFold.Length); - Assert.AreEqual("\r\nend", textInsideFold); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseModuleTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseModuleTestFixture.cs deleted file mode 100644 index e20ec0bae2..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseModuleTestFixture.cs +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using ICSharpCode.AvalonEdit.AddIn; -using ICSharpCode.AvalonEdit.Document; -using ICSharpCode.AvalonEdit.Editing; -using ICSharpCode.AvalonEdit.Folding; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Parsing -{ - [TestFixture] - public class ParseModuleTestFixture - { - ICompilationUnit compilationUnit; - IClass c; - IMethod method; - FoldingSection methodFold; - FoldingSection moduleFold; - TextDocument document; - - [TestFixtureSetUp] - public void SetUpFixture() - { - string ruby = "module Test\r\n" + - "\tdef foo\r\n" + - "\tend\r\n" + - "end"; - - DefaultProjectContent projectContent = new DefaultProjectContent(); - RubyParser parser = new RubyParser(); - compilationUnit = parser.Parse(projectContent, @"C:\test.rb", ruby); - if (compilationUnit.Classes.Count > 0) { - c = compilationUnit.Classes[0]; - if (c.Methods.Count > 0) { - method = c.Methods[0]; - } - - TextArea textArea = new TextArea(); - document = new TextDocument(); - textArea.Document = document; - textArea.Document.Text = ruby; - - ParserFoldingStrategy foldingStrategy = new ParserFoldingStrategy(textArea); - - ParseInformation parseInfo = new ParseInformation(compilationUnit); - foldingStrategy.UpdateFoldings(parseInfo); - List folds = new List(foldingStrategy.FoldingManager.AllFoldings); - - if (folds.Count > 0) { - moduleFold = folds[0]; - } - if (folds.Count > 1) { - methodFold = folds[1]; - } - } - } - - [Test] - public void OneClass() - { - Assert.AreEqual(1, compilationUnit.Classes.Count); - } - - /// - /// Module is mapped to a class. - /// - [Test] - public void ModuleName() - { - Assert.AreEqual("Test", c.Name); - } - - [Test] - public void ModuleBodyRegion() - { - int startLine = 1; - int startColumn = 12; - int endLine = 4; - int endColumn = 4; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), c.BodyRegion.ToString()); - } - - /// - /// The module declaration region needs to extend up to and - /// including the colon. - /// - [Test] - public void ModuleRegion() - { - int startLine = 1; - int startColumn = 1; - int endLine = 4; - int endColumn = 4; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), c.Region.ToString()); - } - - [Test] - public void MethodName() - { - Assert.AreEqual("foo", method.Name); - } - - [Test] - public void MethodBodyRegion() - { - int startLine = 2; - int startColumn = 11; // IronRuby parser includes the "()" part of the method parameters even if it does not exist. - int endLine = 3; - int endColumn = 5; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), method.BodyRegion.ToString()); - } - - /// - /// The method region does not include the body. - /// - [Test] - public void MethodRegion() - { - int startLine = 2; - int startColumn = 2; - int endLine = 2; - int endColumn = 11; // IronRuby parser includes the "()" part of the method parameters even if it does not exist. - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), method.Region.ToString()); - } - - [Test] - public void ModuleFoldMarkerInnerText() - { - string textInsideFold = document.GetText(moduleFold.StartOffset, moduleFold.Length); - Assert.AreEqual("\r\n\tdef foo\r\n\tend\r\nend", textInsideFold); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseRequireFollowedByCommentTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseRequireFollowedByCommentTestFixture.cs deleted file mode 100644 index d207909946..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseRequireFollowedByCommentTestFixture.cs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Parsing -{ - /// - /// A string of the form "require #" would cause a null reference exception since the ruby ast walker tries - /// to use the MethodCall's Argument which is null. - /// - [TestFixture] - public class ParseRequireFollowedByCommentTestFixture - { - [Test] - public void ParseDoesNotThrowNullReferenceException() - { - string ruby = "require #"; - - DefaultProjectContent projectContent = new DefaultProjectContent(); - RubyParser parser = new RubyParser(); - ICompilationUnit unit = null; - - Assert.DoesNotThrow(delegate { unit = parser.Parse(projectContent, @"C:\test.rb", ruby); }); - Assert.IsNotNull(unit); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseRequireTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseRequireTestFixture.cs deleted file mode 100644 index 6888ae5cb6..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseRequireTestFixture.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.Parsing -{ - /// - /// Tests that import statements are added to the compilation - /// unit's Using property. - /// - [TestFixture] - public class ParseRequireTestFixture - { - ICompilationUnit compilationUnit; - - [TestFixtureSetUp] - public void SetUpFixture() - { - string Ruby = "require \"System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\""; - - DefaultProjectContent projectContent = new DefaultProjectContent(); - RubyParser parser = new RubyParser(); - compilationUnit = parser.Parse(projectContent, @"C:\test.rb", Ruby); - } - - [Test] - public void OneUsing() - { - Assert.AreEqual(1, compilationUnit.UsingScope.Usings.Count); - } - - [Test] - public void UsingSystem() - { - Assert.AreEqual("System.Windows.Forms", compilationUnit.UsingScope.Usings[0].Usings[0]); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseSingleClassTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseSingleClassTestFixture.cs deleted file mode 100644 index f63766faef..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/ParseSingleClassTestFixture.cs +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests; - -namespace RubyBinding.Tests.Parsing -{ - /// - /// Tests that the RubyParser class has a class in the returned - /// CompilationUnit. - /// - [TestFixture] - public class ParseSingleClassTestFixture - { - ICompilationUnit compilationUnit; - IClass c; - - [TestFixtureSetUp] - public void SetUpFixture() - { - string Ruby = "class Test\r\n" + - "end"; - - DefaultProjectContent projectContent = new DefaultProjectContent(); - RubyParser parser = new RubyParser(); - compilationUnit = parser.Parse(projectContent, @"C:\Projects\Test\test.rb", Ruby); - if (compilationUnit.Classes.Count > 0) { - c = compilationUnit.Classes[0]; - } - } - - [Test] - public void OneClass() - { - Assert.AreEqual(1, compilationUnit.Classes.Count); - } - - [Test] - public void ClassName() - { - Assert.AreEqual("Test", c.Name); - } - - [Test] - public void FullyQualifiedClassName() - { - Assert.AreEqual("Test", c.FullyQualifiedName); - } - - [Test] - public void CompilationUnitFileName() - { - Assert.AreEqual(@"C:\Projects\Test\test.rb", compilationUnit.FileName); - } - - [Test] - public void ClassBodyRegion() - { - int startLine = 1; - int startColumn = 11; - int endLine = 2; - int endColumn = 4; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), c.BodyRegion.ToString()); - } - - [Test] - public void ClassRegion() - { - int startLine = 1; - int startColumn = 1; - int endLine = 2; - int endColumn = 4; - DomRegion region = new DomRegion(startLine, startColumn, endLine, endColumn); - Assert.AreEqual(region.ToString(), c.Region.ToString()); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/RubyParserTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/RubyParserTestFixture.cs deleted file mode 100644 index a8e0507c3c..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Parsing/RubyParserTestFixture.cs +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.IO; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Internal.Templates; -using ICSharpCode.SharpDevelop.Project; -using NUnit.Framework; -using RubyBinding.Tests; -using RubyBinding.Tests.Utils; -using UnitTesting.Tests.Utils; - -namespace RubyBinding.Tests.Parsing -{ - /// - /// Tests the RubyParser. - /// - [TestFixture] - public class ParserTestFixture - { - RubyParser parser; - - [TestFixtureSetUp] - public void SetUpFixture() - { - parser = new RubyParser(); - } - - [Test] - public void CanParseRubyFileName() - { - Assert.IsTrue(parser.CanParse("test.rb")); - } - - [Test] - public void CannotParseTextFileName() - { - Assert.IsFalse(parser.CanParse("test.txt")); - } - - [Test] - public void CannotParseNullFileName() - { - string fileName = null; - Assert.IsFalse(parser.CanParse(fileName)); - } - - [Test] - public void CanParseUpperCaseRubyFileName() - { - Assert.IsTrue(parser.CanParse("TEST.RB")); - } - - [Test] - public void NoLexerTags() - { - Assert.AreEqual(0, parser.LexerTags.Length); - } - - [Test] - public void SetLexerTags() - { - RubyParser parser = new RubyParser(); - string[] tags = new string[] {"Test"}; - parser.LexerTags = tags; - - Assert.AreEqual(tags, parser.LexerTags); - } - - [Test] - public void LanguageProperties() - { - Assert.IsNotNull(parser.Language); - } - - [Test] - public void CannotParseNullProject() - { - IProject project = null; - Assert.IsFalse(parser.CanParse(project)); - } - - [Test] - public void CanParseRubyProject() - { - ProjectCreateInformation createInfo = new ProjectCreateInformation(); - createInfo.Solution = new Solution(new MockProjectChangeWatcher()); - createInfo.OutputProjectFileName = @"C:\projects\test.rbproj"; - RubyProject project = new RubyProject(createInfo); - Assert.IsTrue(parser.CanParse(project)); - } - - [Test] - public void CannotParseNonRubyLanguageProject() - { - MockProject project = new MockProject(); - project.Language = "Test"; - Assert.IsFalse(parser.CanParse(project)); - } - - [Test] - public void ParseWithNullTextBuffer() - { - DefaultProjectContent projectContent = new DefaultProjectContent(); - ITextBuffer textBuffer = null; - ICompilationUnit unit = parser.Parse(projectContent, null, textBuffer); - Assert.IsInstanceOf(typeof(DefaultCompilationUnit), unit); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyBinding.Tests.csproj b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyBinding.Tests.csproj deleted file mode 100644 index a246d6a630..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyBinding.Tests.csproj +++ /dev/null @@ -1,387 +0,0 @@ - - - - {01DF0475-0CB2-4E81-971B-BADC60CDE3A5} - Debug - AnyCPU - Library - RubyBinding.Tests - RubyBinding.Tests - v4.0 - Properties - C:\Users\matt\AppData\Roaming\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis - False - False - 4 - false - - - ..\..\..\..\..\..\bin\UnitTests\RubyBinding\ - true - Full - False - True - DEBUG;TRACE - - - ..\..\..\..\..\..\bin\UnitTests\RubyBinding - false - None - True - False - TRACE - - - False - Auto - 4194304 - x86 - 4096 - - - - - ..\..\IronRuby\bin\IronRuby.dll - - - ..\..\IronRuby\bin\IronRuby.Libraries.dll - - - - - ..\..\IronRuby\bin\Microsoft.Dynamic.dll - True - - - ..\..\IronRuby\bin\Microsoft.Scripting.dll - True - - - ..\..\..\..\..\Tools\NUnit\nunit.framework.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RubyBinding.addin - - - - - - - - {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} - ICSharpCode.AvalonEdit - - - {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} - NRefactory - - - {2748AD25-9C63-4E12-877B-4DCE96FBED54} - ICSharpCode.SharpDevelop - - - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} - ICSharpCode.Core - - - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3} - ICSharpCode.SharpDevelop.Dom - - - {8035765F-D51F-4A0C-A746-2FD100E19419} - ICSharpCode.SharpDevelop.Widgets - - - {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181} - UnitTesting.Tests - - - {1F261725-6318-4434-A1B1-6C70CE4CD324} - UnitTesting - - - {0162E499-42D0-409B-AA25-EED21F75336B} - AvalonEdit.AddIn - - - {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} - FormsDesigner - - - {7048AE18-EB93-4A84-82D0-DD60EB58ADBD} - ICSharpCode.Scripting - - - {85C09AD8-183B-403A-869A-7226646218A9} - ICSharpCode.Scripting.Tests - - - {C896FFFF-5B6C-4B0E-B6DF-049865F501B4} - RubyBinding - - - - - - - - - - - \ No newline at end of file diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyLanguage/CreateNewRubyProjectTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyLanguage/CreateNewRubyProjectTestFixture.cs deleted file mode 100644 index 030adbd228..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyLanguage/CreateNewRubyProjectTestFixture.cs +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.IO; -using System.Text; - -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Internal.Templates; -using ICSharpCode.SharpDevelop.Project; -using Microsoft.Build.Construction; -using NUnit.Framework; -using UnitTesting.Tests.Utils; - -namespace RubyBinding.Tests.RubyLanguage -{ - /// - /// Tests the initial properties set in a newly created RubyProject. - /// - [TestFixture] - public class CreateNewRubyProjectTestFixture - { - ProjectCreateInformation info; - RubyProject project; - - [TestFixtureSetUp] - public void SetUpFixture() - { - info = new ProjectCreateInformation(); - info.Solution = new Solution(new MockProjectChangeWatcher()); - info.ProjectName = "Test"; - info.OutputProjectFileName = @"C:\Projects\Test\Test.rbproj"; - info.RootNamespace = "Test"; - - project = new RubyProject(info); - } - - [Test] - public void Language() - { - Assert.AreEqual(RubyProjectBinding.LanguageName, project.Language); - } - - [Test] - public void Name() - { - Assert.AreEqual(info.ProjectName, project.Name); - } - - [Test] - public void BuildTargetAdded() - { - foreach (ProjectTargetElement target in project.MSBuildProjectFile.Targets) { - if (target.Name == "Build") { - return; - } - } - Assert.Fail("Build target does not exist."); - } - - [Test] - public void ProjectLanguageProperties() - { - Assert.AreEqual(RubyLanguageProperties.Default, project.LanguageProperties); - } - - [Test] - public void DefaultItemTypeForRubyFileNameIsCompile() - { - Assert.AreEqual(ItemType.Compile, project.GetDefaultItemType(".rb")); - } - - [Test] - public void DefaultItemTypeForUpperCaseRubyFileNameIsCompile() - { - Assert.AreEqual(ItemType.Compile, project.GetDefaultItemType(".RB")); - } - - [Test] - public void DefaultItemTypeForNullRubyFileNameIsCompile() - { - Assert.AreEqual(ItemType.None, project.GetDefaultItemType(null)); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyLanguage/ProjectBindingTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyLanguage/ProjectBindingTestFixture.cs deleted file mode 100644 index abc234a160..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyLanguage/ProjectBindingTestFixture.cs +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Internal.Templates; -using ICSharpCode.SharpDevelop.Project; -using NUnit.Framework; -using UnitTesting.Tests.Utils; - -namespace RubyBinding.Tests.RubyLanguage -{ - /// - /// Tests the RubyProjectBinding class. - /// - [TestFixture] - public class ProjetBindingTestFixture - { - RubyProjectBinding projectBinding; - RubyProject project; - - [TestFixtureSetUp] - public void SetUpFixture() - { - projectBinding = new RubyProjectBinding(); - ProjectCreateInformation createInfo = new ProjectCreateInformation(); - createInfo.ProjectName = "Ruby"; - createInfo.OutputProjectFileName = @"C:\Projects\Ruby.rbproj"; - createInfo.Solution = new Solution(new MockProjectChangeWatcher()); - project = projectBinding.CreateProject(createInfo) as RubyProject; - } - - [Test] - public void Language() - { - Assert.AreEqual("Ruby", projectBinding.Language); - } - - [Test] - public void IsRubyProject() - { - Assert.IsNotNull(project); - } - - [Test] - public void ProjectName() - { - Assert.AreEqual("Ruby", project.Name); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyLanguage/RubyLanguageBindingTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyLanguage/RubyLanguageBindingTestFixture.cs deleted file mode 100644 index cb6f41e217..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyLanguage/RubyLanguageBindingTestFixture.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop; -using NUnit.Framework; - -namespace RubyBinding.Tests.RubyLanguage -{ - [TestFixture] - public class RubyLanguageBindingTestFixture - { - RubyLanguageBinding languageBinding; - - [SetUp] - public void Init() - { - languageBinding = new RubyLanguageBinding(); - } - - [Test] - public void FormattingStrategyIsRubyFormattingStrategy() - { - Assert.IsInstanceOf(typeof(RubyFormattingStrategy), languageBinding.FormattingStrategy); - } - - [Test] - public void ImplementsILanguageBinding() - { - Assert.IsNotNull(languageBinding as ILanguageBinding); - } - - [Test] - public void LanguagePropertiesIsRubyLanguageProperties() - { - Assert.IsInstanceOf(typeof(RubyLanguageProperties), languageBinding.Properties); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyLanguage/RubyLanguagePropertiesTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyLanguage/RubyLanguagePropertiesTests.cs deleted file mode 100644 index 1302566c61..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/RubyLanguage/RubyLanguagePropertiesTests.cs +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; - -namespace RubyBinding.Tests.RubyLanguage -{ - [TestFixture] - public class RubyLanguagePropertiesTests - { - [Test] - public void HasCodeDomProvider() - { - Assert.IsNotNull(RubyLanguageProperties.Default.CodeDomProvider); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Strings.resx b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Strings.resx deleted file mode 100644 index 0a28739c88..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Strings.resx +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Could not find type '{0}'. Are you missing an assembly reference? - - \ No newline at end of file diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/CreateRubyTestRunnerTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/CreateRubyTestRunnerTestFixture.cs deleted file mode 100644 index 53702a05bf..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/CreateRubyTestRunnerTestFixture.cs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.Core; -using ICSharpCode.RubyBinding; -using NUnit.Framework; - -namespace RubyBinding.Tests.Testing -{ - [TestFixture] - public class CreateRubyTestRunnerTestFixture - { - RubyTestFramework testFramework; - - [TestFixtureSetUp] - public void SetUpFixture() - { - if (!PropertyService.Initialized) { - PropertyService.InitializeService(String.Empty, String.Empty, String.Empty); - } - } - - [SetUp] - public void Init() - { - testFramework = new RubyTestFramework(); - } - - [Test] - public void RubyTestFrameworkCreateTestRunnerReturnsRubyTestRunner() - { - Assert.IsInstanceOf(typeof(RubyTestRunner), testFramework.CreateTestRunner()); - } - - [Test] - public void RubyTestFrameworkCreateTestDebuggerReturnsRubyTestDebugger() - { - Assert.IsInstanceOf(typeof(RubyTestDebugger), testFramework.CreateTestDebugger()); - } - - [Test] - public void RubyTestFrameworkIsBuildNeededBeforeTestRunReturnsFalse() - { - Assert.IsFalse(testFramework.IsBuildNeededBeforeTestRun); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyConsoleApplicationTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyConsoleApplicationTests.cs deleted file mode 100644 index b033a88cb8..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyConsoleApplicationTests.cs +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Diagnostics; -using ICSharpCode.Core; -using ICSharpCode.RubyBinding; -using NUnit.Framework; -using RubyBinding.Tests.Utils; - -namespace RubyBinding.Tests.Testing -{ - [TestFixture] - public class RubyConsoleApplicationTests - { - RubyConsoleApplication app; - RubyAddInOptions options; - - [SetUp] - public void Init() - { - options = new RubyAddInOptions(new Properties()); - options.RubyFileName = @"C:\IronRuby\ir.exe"; - app = new RubyConsoleApplication(options); - } - - [Test] - public void FileName_NewInstance_FileNameIsRubyFileNameFromAddInOptions() - { - string fileName = app.FileName; - string expectedFileName = @"C:\IronRuby\ir.exe"; - Assert.AreEqual(expectedFileName, fileName); - } - - [Test] - public void GetArguments_DebugIsTrue_ReturnsDisableGemsAndDebugOption() - { - app.Debug = true; - string args = app.GetArguments(); - string expectedCommandLine = "--disable-gems -D"; - - Assert.AreEqual(expectedCommandLine, args); - } - - [Test] - public void GetArguments_ScriptFileNameIsSet_ReturnsQuotedRubyScriptFileName() - { - app.ScriptFileName = @"d:\projects\my ruby\test.rb"; - string args = app.GetArguments(); - string expectedCommandLine = "--disable-gems \"d:\\projects\\my ruby\\test.rb\""; - - Assert.AreEqual(expectedCommandLine, args); - } - - [Test] - public void GetArguments_ScriptFileNameAndScriptCommandLineArgumentsSet_ReturnsQuotedRubyScriptFileNameAndItsCommandLineArguments() - { - app.Debug = true; - app.ScriptFileName = @"d:\projects\my ruby\test.rb"; - app.ScriptCommandLineArguments = "-- responseFile.txt"; - string args = app.GetArguments(); - - string expectedCommandLine = - "--disable-gems -D \"d:\\projects\\my ruby\\test.rb\" -- responseFile.txt"; - - Assert.AreEqual(expectedCommandLine, args); - } - - [Test] - public void GetProcessStartInfo_NewInstance_HasFileNameThatEqualsIronRubyConsoleApplicationExeFileName() - { - ProcessStartInfo startInfo = app.GetProcessStartInfo(); - string expectedFileName = @"C:\IronRuby\ir.exe"; - - Assert.AreEqual(expectedFileName, startInfo.FileName); - } - - [Test] - public void GetProcessStartInfo_DebugIsTrue_HasDebugFlagSetInArguments() - { - app.Debug = true; - ProcessStartInfo startInfo = app.GetProcessStartInfo(); - string expectedCommandLine = "--disable-gems -D"; - - Assert.AreEqual(expectedCommandLine, startInfo.Arguments); - } - - [Test] - public void GetProcessStartInfo_WorkingDirectorySet_ProcessStartInfoHasMatchingWorkingDirectory() - { - app.WorkingDirectory = @"d:\temp"; - ProcessStartInfo startInfo = app.GetProcessStartInfo(); - Assert.AreEqual(@"d:\temp", startInfo.WorkingDirectory); - } - - [Test] - public void GetProcessStartInfo_ChangingOptionsRubyFileName_ChangesProcessStartInfoFileName() - { - options.RubyFileName = @"d:\temp\test\ir.exe"; - ProcessStartInfo startInfo = app.GetProcessStartInfo(); - - Assert.AreEqual(@"d:\temp\test\ir.exe", startInfo.FileName); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestDebuggerRunsSelectedTestMethodTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestDebuggerRunsSelectedTestMethodTestFixture.cs deleted file mode 100644 index 7d9d85f2a9..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestDebuggerRunsSelectedTestMethodTestFixture.cs +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Diagnostics; -using System.IO; -using System.Text; - -using ICSharpCode.Core; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.UnitTesting; -using NUnit.Framework; -using RubyBinding.Tests.Utils; -using UnitTesting.Tests.Utils; - -namespace RubyBinding.Tests.Testing -{ - [TestFixture] - public class RubyTestDebuggerRunsSelectedTestMethodTestFixture - { - MockDebuggerService debuggerService; - UnitTesting.Tests.Utils.MockDebugger debugger; - MockMessageService messageService; - MockCSharpProject project; - RubyTestDebugger testDebugger; - MockTestResultsMonitor testResultsMonitor; - SelectedTests selectedTests; - MockMethod methodToTest; - RubyAddInOptions options; - MockScriptingFileService fileService; - StringBuilder responseFileText; - StringWriter responseFileStringWriter; - - [SetUp] - public void Init() - { - CreateTestDebugger(); - CreateTestMethod(); - } - - void CreateTestDebugger() - { - debuggerService = new MockDebuggerService(); - debugger = debuggerService.MockDebugger; - messageService = new MockMessageService(); - testResultsMonitor = new MockTestResultsMonitor(); - testResultsMonitor.InitialFilePosition = 3; - options = new RubyAddInOptions(new Properties()); - options.RubyFileName = @"c:\ironruby\ir.exe"; - fileService = new MockScriptingFileService(); - testDebugger = new RubyTestDebugger(debuggerService, messageService, testResultsMonitor, options, fileService); - } - - void CreateTestMethod() - { - project = new MockCSharpProject(); - MockClass c = new MockClass("MyNamespace.MyTestClass"); - methodToTest = new MockMethod(c, "MyTestMethod"); - } - - void RunTestsOnSelectedTestMethod() - { - fileService.SetTempFileName(@"d:\temp\tmp66.tmp"); - CreateTemporaryResponseFileWriter(); - - selectedTests = new SelectedTests(project, null, null, methodToTest); - testDebugger.Start(selectedTests); - } - - void CreateTemporaryResponseFileWriter() - { - responseFileText = new StringBuilder(); - responseFileStringWriter = new StringWriter(responseFileText); - fileService.SetTextWriter(responseFileStringWriter); - } - - [Test] - public void TestDebuggerProcessFileNameIsIronRubyConsoleExeTakenFromAddInOptions() - { - RunTestsOnSelectedTestMethod(); - - string expectedFileName = @"c:\ironruby\ir.exe"; - Assert.AreEqual(expectedFileName, debugger.ProcessStartInfo.FileName); - } - - [Test] - public void DisposingTestRunnerDeletesTemporaryResponseFile() - { - fileService.FileNameDeleted = null; - RunTestsOnSelectedTestMethod(); - testDebugger.Dispose(); - - string expectedFileName = @"d:\temp\tmp66.tmp"; - Assert.AreEqual(expectedFileName, fileService.FileNameDeleted); - } - - [Test] - public void DisposingTestRunnerDisposesTestResultsMonitor() - { - RunTestsOnSelectedTestMethod(); - testDebugger.Dispose(); - Assert.IsTrue(testResultsMonitor.IsDisposeMethodCalled); - } - - [Test] - public void CommandLineArgumentHasSharpDevelopTestRubyScriptFileNameAndTestResultsFileNameResponseFileName() - { - AddInPathHelper helper = new AddInPathHelper("RubyBinding"); - AddIn addin = helper.CreateDummyAddInInsideAddInTree(); - addin.FileName = @"c:\sharpdevelop\addins\rubybinding\rubybinding.addin"; - - testResultsMonitor.FileName = @"d:\testresults.txt"; - RunTestsOnSelectedTestMethod(); - - string expectedCommandLine = - "--disable-gems " + - "-D " + - "\"-Ic:\\sharpdevelop\\addins\\rubybinding\\TestRunner\" " + - "\"c:\\sharpdevelop\\addins\\rubybinding\\TestRunner\\sdtest.rb\" " + - "--name=MyTestMethod " + - "-- " + - "\"d:\\testresults.txt\" " + - "\"d:\\temp\\tmp66.tmp\""; - - Assert.AreEqual(expectedCommandLine, debugger.ProcessStartInfo.Arguments); - } - - [Test] - public void RubyTestResultReturnedFromTestFinishedEvent() - { - TestResult testResult = null; - testDebugger.TestFinished += delegate(object source, TestFinishedEventArgs e) { - testResult = e.Result; - }; - TestResult testResultToFire = new TestResult("test"); - testResultsMonitor.FireTestFinishedEvent(testResultToFire); - - Assert.IsInstanceOf(typeof(RubyTestResult), testResult); - } - - [Test] - public void TestResultsMonitorInitialFilePositionIsZero() - { - Assert.AreEqual(0, testResultsMonitor.InitialFilePosition); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestFrameworkIsTestClassTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestFrameworkIsTestClassTests.cs deleted file mode 100644 index 1142de0be8..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestFrameworkIsTestClassTests.cs +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests.Utils; -using UnitTesting.Tests.Utils; - -namespace RubyBinding.Tests.Testing -{ - [TestFixture] - public class RubyTestFrameworkIsTestClassTests - { - RubyTestFramework testFramework; - - [SetUp] - public void Init() - { - testFramework = new RubyTestFramework(); - } - - [Test] - public void CreateClassWithTestUnitTestCaseBaseTypeReturnsClassWithFirstBaseTypeEqualToTestCase() - { - IClass c = MockClass.CreateClassWithBaseType("Test.Unit.TestCase"); - string name = c.BaseTypes[0].FullyQualifiedName; - string expectedName = "Test.Unit.TestCase"; - Assert.AreEqual(expectedName, name); - } - - [Test] - public void IsTestClassReturnsTrueWhenClassFirstBaseTypeIsUnitTestTestCase() - { - MockClass c = MockClass.CreateClassWithBaseType("Test.Unit.TestCase"); - Assert.IsTrue(testFramework.IsTestClass(c)); - } - - [Test] - public void IsTestClassReturnsFalseWhenClassHasNoBaseTypes() - { - MockClass c = MockClass.CreateMockClassWithoutAnyAttributes(); - Assert.IsFalse(testFramework.IsTestClass(c)); - } - - [Test] - public void IsTestClassReturnsFalseForNull() - { - Assert.IsFalse(testFramework.IsTestClass(null)); - } - - [Test] - public void IsTestClassReturnsFalseWhenFirstBaseTypeIsSystemWindowsFormsForm() - { - MockClass c = MockClass.CreateClassWithBaseType("System.Windows.Forms.Form"); - Assert.IsFalse(testFramework.IsTestClass(c)); - } - - [Test] - public void IsTestClassReturnsTrueWhenDerivedClassHasBaseClassDerivedFromTestCase() - { - MockClass baseClass = MockClass.CreateClassWithBaseType("Test.Unit.TestCase"); - MockClass c = MockClass.CreateMockClassWithoutAnyAttributes(); - DefaultReturnType returnType = new DefaultReturnType(baseClass); - c.BaseTypes.Add(returnType); - - Assert.IsTrue(testFramework.IsTestClass(c)); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestFrameworkIsTestMemberTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestFrameworkIsTestMemberTests.cs deleted file mode 100644 index 4da9a112b5..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestFrameworkIsTestMemberTests.cs +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Dom; -using NUnit.Framework; -using RubyBinding.Tests.Utils; -using UnitTesting.Tests.Utils; - -namespace RubyBinding.Tests.Testing -{ - [TestFixture] - public class RubyTestFrameworkIsTestMemberTests - { - RubyTestFramework testFramework; - - void CreateTestFramework() - { - testFramework = new RubyTestFramework(); - } - - [Test] - public void IsTestMember_MethodThatStartsWithTest_ReturnsTrue() - { - CreateTestFramework(); - MockClass c = MockClass.CreateMockClassWithoutAnyAttributes(); - var method = new MockMethod(c, "testRunThis"); - - bool result = testFramework.IsTestMember(method); - - Assert.IsTrue(result); - } - - [Test] - public void IsTestMember_NullPassed_ReturnsFalse() - { - CreateTestFramework(); - bool result = testFramework.IsTestMember(null); - - Assert.IsFalse(result); - } - - [Test] - public void IsTestMember_MethodThatDoesNotStartWithTest_ReturnsFalse() - { - CreateTestFramework(); - MockClass c = MockClass.CreateMockClassWithoutAnyAttributes(); - var method = new MockMethod(c, "RunThis"); - - bool result = testFramework.IsTestMember(method); - - Assert.IsFalse(result); - } - - [Test] - public void IsTestMember_FieldThatStartsWithTest_ReturnsFalse() - { - CreateTestFramework(); - MockClass c = MockClass.CreateMockClassWithoutAnyAttributes(); - var field = new DefaultField(c, "testField"); - - bool result = testFramework.IsTestMember(field); - - Assert.IsFalse(result); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestFrameworkIsTestProjectTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestFrameworkIsTestProjectTests.cs deleted file mode 100644 index 7a2b0e0eeb..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestFrameworkIsTestProjectTests.cs +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Internal.Templates; -using ICSharpCode.SharpDevelop.Project; -using NUnit.Framework; -using RubyBinding.Tests.Utils; -using UnitTesting.Tests.Utils; - -namespace RubyBinding.Tests.Testing -{ - [TestFixture] - public class RubyTestFrameworkIsTestProjectTests - { - RubyTestFramework testFramework; - - [TestFixtureSetUp] - public void SetUpFixture() - { - RubyMSBuildEngineHelper.InitMSBuildEngine(); - } - - [SetUp] - public void Init() - { - testFramework = new RubyTestFramework(); - } - - [Test] - public void IsTestProjectWhenPassedNullProjectReturnsFalse() - { - Assert.IsFalse(testFramework.IsTestProject(null)); - } - - [Test] - public void IsTestProjectWhenPassedRubyPythonProjectReturnsTrue() - { - ProjectCreateInformation createInfo = new ProjectCreateInformation(); - createInfo.Solution = new Solution(new MockProjectChangeWatcher()); - createInfo.OutputProjectFileName = @"C:\projects\test.rbproj"; - RubyProject project = new RubyProject(createInfo); - - Assert.IsTrue(testFramework.IsTestProject(project)); - } - - [Test] - public void IsTestProjectWhenPassedNonPythonProjectReturnsFalse() - { - MockProject project = new MockProject(); - Assert.IsFalse(testFramework.IsTestProject(project)); - } - - [Test] - public void IsTestProjectWhenPassedNullRubyProjectReturnsFalse() - { - RubyProject project = null; - Assert.IsFalse(testFramework.IsTestProject(project)); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestResultFailureTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestResultFailureTestFixture.cs deleted file mode 100644 index 8ccb668be4..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestResultFailureTestFixture.cs +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.RubyBinding; -using ICSharpCode.UnitTesting; -using NUnit.Framework; - -namespace RubyBinding.Tests.Testing -{ - [TestFixture] - public class RubyTestResultFailureTestFixture - { - RubyTestResult RubyTestResult; - string stackTraceText; - - [SetUp] - public void Init() - { - TestResult testResult = new TestResult("MyTest"); - testResult.ResultType = TestResultType.Failure; - testResult.Message = "test failed"; - - stackTraceText = - "Failure:\r\n" + - "test_fail(SecondTests)\r\n" + - " [d:\\projects\\rubytests\\SecondTests.rb:6:in `test_fail'\r\n" + - " d:\\test\\rubytests/sdtestrunner.rb:73:in `start_mediator'\r\n" + - " d:\\test\\rubytests/sdtestrunner.rb:47:in `start']:\r\n" + - "Assertion was false.\r\n" + - " is not true.\r\n" + - ""; - - testResult.StackTrace = stackTraceText; - RubyTestResult = new RubyTestResult(testResult); - } - - [Test] - public void TestResultNameIsMyTest() - { - Assert.AreEqual("MyTest", RubyTestResult.Name); - } - - [Test] - public void TestResultTypeIsFailure() - { - Assert.AreEqual(TestResultType.Failure, RubyTestResult.ResultType); - } - - [Test] - public void TestResultMessageIsTestFailed() - { - Assert.AreEqual("test failed", RubyTestResult.Message); - } - - [Test] - public void RubyTestResultHasStackTraceFromOriginalTestResult() - { - Assert.AreEqual(stackTraceText, RubyTestResult.StackTrace); - } - - [Test] - public void StackTraceFilePositionHasExpectedFileName() - { - string expectedFileName = @"d:\projects\rubytests\SecondTests.rb"; - Assert.AreEqual(expectedFileName, RubyTestResult.StackTraceFilePosition.FileName); - } - - [Test] - public void StackTraceFilePositionLineIs6() - { - Assert.AreEqual(6, RubyTestResult.StackTraceFilePosition.Line); - } - - [Test] - public void StackTraceFilePositionColumnIsOne() - { - Assert.AreEqual(1, RubyTestResult.StackTraceFilePosition.Column); - } - - [Test] - public void ChangingStackTraceToEmptyStringSetsStackTraceFilePositionToEmpty() - { - RubyTestResult.StackTraceFilePosition = new FilePosition("test.rb", 10, 2); - RubyTestResult.StackTrace = String.Empty; - Assert.IsTrue(RubyTestResult.StackTraceFilePosition.IsEmpty); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestRunnerApplicationTests.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestRunnerApplicationTests.cs deleted file mode 100644 index c37063568a..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestRunnerApplicationTests.cs +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Diagnostics; -using System.IO; - -using ICSharpCode.Core; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Project; -using ICSharpCode.UnitTesting; -using NUnit.Framework; -using RubyBinding.Tests.Testing; -using RubyBinding.Tests.Utils; -using UnitTesting.Tests.Utils; - -namespace RubyBinding.Tests.Testing -{ - [TestFixture] - public class RubyTestRunnerApplicationTests - { - RubyTestRunnerApplication testRunner; - RubyAddInOptions options; - - [SetUp] - public void Init() - { - string tempFileName = "temp.tmp"; - MockScriptingFileService fileService = new MockScriptingFileService(); - fileService.SetTempFileName(tempFileName); - fileService.SetTextWriter(new StringWriter()); - - Properties properties = new Properties(); - options = new RubyAddInOptions(properties); - - AddInPathHelper helper = new AddInPathHelper("RubyBinding"); - AddIn addin = helper.CreateDummyAddInInsideAddInTree(); - addin.FileName = @"c:\rubybinding\rubybinding.addin"; - - string testResultsFileName = "results.txt"; - testRunner = new RubyTestRunnerApplication(testResultsFileName, options, fileService); - } - - [Test] - public void CreateProcessInfoReturnsCommandLineWithTestClassOption() - { - MockClass c = MockClass.CreateMockClassWithoutAnyAttributes(); - c.FullyQualifiedName = "MyTests"; - SelectedTests selectedTests = RubySelectedTestsHelper.CreateSelectedTests(c); - ProcessStartInfo processStartInfo = GetProcessStartInfoFromTestRunnerApp(selectedTests); - - string expectedCommandLine = - "--disable-gems " + - "\"-Ic:\\rubybinding\\TestRunner\" " + - "\"c:\\rubybinding\\TestRunner\\sdtest.rb\" " + - "--testcase=MyTests " + - "-- " + - "\"results.txt\" " + - "\"temp.tmp\""; - - Assert.AreEqual(expectedCommandLine, processStartInfo.Arguments); - } - - ProcessStartInfo GetProcessStartInfoFromTestRunnerApp(SelectedTests selectedTests) - { - testRunner.CreateResponseFile(selectedTests); - return testRunner.CreateProcessStartInfo(selectedTests); - } - - [Test] - public void CreateProcessInfoReturnsCommandLineWithTestMethodOption() - { - MockClass c = MockClass.CreateMockClassWithoutAnyAttributes(); - MockMethod method = new MockMethod(c, "MyMethod"); - SelectedTests selectedTests = RubySelectedTestsHelper.CreateSelectedTests(method); - ProcessStartInfo processStartInfo = GetProcessStartInfoFromTestRunnerApp(selectedTests); - - string expectedCommandLine = - "--disable-gems " + - "\"-Ic:\\rubybinding\\TestRunner\" " + - "\"c:\\rubybinding\\TestRunner\\sdtest.rb\" " + - "--name=MyMethod " + - "-- " + - "\"results.txt\" " + - "\"temp.tmp\""; - - Assert.AreEqual(expectedCommandLine, processStartInfo.Arguments); - } - - [Test] - public void CreateProcessInfoReturnsFixedTestRunnerFilePath() - { - AddInPathHelper helper = new AddInPathHelper("RubyBinding"); - AddIn addin = helper.CreateDummyAddInInsideAddInTree(); - addin.FileName = @"c:\rubybinding\bin\..\AddIns\rubybinding.addin"; - - MockCSharpProject project = new MockCSharpProject(); - SelectedTests selectedTests = RubySelectedTestsHelper.CreateSelectedTests(project); - ProcessStartInfo processStartInfo = GetProcessStartInfoFromTestRunnerApp(selectedTests); - - string expectedCommandLine = - "--disable-gems " + - "\"-Ic:\\rubybinding\\AddIns\\TestRunner\" " + - "\"c:\\rubybinding\\AddIns\\TestRunner\\sdtest.rb\" " + - "-- " + - "\"results.txt\" " + - "\"temp.tmp\""; - - Assert.AreEqual(expectedCommandLine, processStartInfo.Arguments); - } - - [Test] - public void CreateProcessInfoReturnsCommandLineWithLoadPathSpecifiedInRubyAddInOptions() - { - MockCSharpProject project = new MockCSharpProject(); - options.RubyLibraryPath = @"c:\ruby\lib"; - SelectedTests selectedTests = RubySelectedTestsHelper.CreateSelectedTests(project); - ProcessStartInfo processStartInfo = GetProcessStartInfoFromTestRunnerApp(selectedTests); - - string expectedCommandLine = - "--disable-gems " + - "\"-Ic:\\ruby\\lib\" " + - "\"-Ic:\\rubybinding\\TestRunner\" " + - "\"c:\\rubybinding\\TestRunner\\sdtest.rb\" " + - "-- " + - "\"results.txt\" " + - "\"temp.tmp\""; - - Assert.AreEqual(expectedCommandLine, processStartInfo.Arguments); - } - - [Test] - public void CreateProcessInfoReturnsCommandLineWithDirectoriesForReferencedProjects() - { - MockCSharpProject referencedProject = new MockCSharpProject(); - referencedProject.FileName = @"c:\projects\rbproject\rbproject.rbproj"; - - MockCSharpProject unitTestProject = new MockCSharpProject(); - ProjectReferenceProjectItem projectRef = new ProjectReferenceProjectItem(unitTestProject, referencedProject); - projectRef.FileName = @"c:\projects\rbproject\pyproject.rbproj"; - ProjectService.AddProjectItem(unitTestProject, projectRef); - - MockMethod method = MockMethod.CreateMockMethodWithoutAnyAttributes(); - method.CompilationUnit.FileName = @"d:\mytest.rb"; - FileProjectItem fileItem = new FileProjectItem(unitTestProject, ItemType.Compile); - fileItem.FileName = @"d:\mytest.rb"; - ProjectService.AddProjectItem(unitTestProject, fileItem); - - SelectedTests tests = RubySelectedTestsHelper.CreateSelectedTests(unitTestProject); - ProcessStartInfo processStartInfo = GetProcessStartInfoFromTestRunnerApp(tests); - - string expectedCommandLine = - "--disable-gems " + - "\"-Ic:\\rubybinding\\TestRunner\" " + - "\"-Ic:\\projects\\rbproject\" " + - "\"c:\\rubybinding\\TestRunner\\sdtest.rb\" " + - "-- " + - "\"results.txt\" " + - "\"temp.tmp\""; - - Assert.AreEqual(expectedCommandLine, processStartInfo.Arguments); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestRunnerResponseFileTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestRunnerResponseFileTestFixture.cs deleted file mode 100644 index d1582f214a..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestRunnerResponseFileTestFixture.cs +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.IO; -using System.Text; -using ICSharpCode.Core.Services; -using ICSharpCode.RubyBinding; -using ICSharpCode.Core; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Gui; -using ICSharpCode.SharpDevelop.Project; -using ICSharpCode.UnitTesting; -using NUnit.Framework; -using RubyBinding.Tests.Utils; -using UnitTesting.Tests.Utils; - -namespace RubyBinding.Tests.Testing -{ - [TestFixture] - public class RubyTestRunnerResponseFileTestFixture - { - RubyTestRunnerResponseFile responseFile; - StringBuilder responseFileText; - StringWriter writer; - - [SetUp] - public void Init() - { - responseFileText = new StringBuilder(); - writer = new StringWriter(responseFileText); - responseFile = new RubyTestRunnerResponseFile(writer); - } - - [Test] - public void DisposeMethodDisposesTextWriterPassedInConstructor() - { - responseFile.Dispose(); - Assert.Throws(delegate { writer.WriteLine("test"); }); - } - - [Test] - public void WriteTestsAddsTestClassFileNameToResponseFile() - { - MockClass c = MockClass.CreateMockClassWithoutAnyAttributes(); - c.CompilationUnit.FileName = @"d:\mytest.rb"; - SelectedTests selectedTests = RubySelectedTestsHelper.CreateSelectedTests(c); - responseFile.WriteTests(selectedTests); - - string expectedText = "d:\\mytest.rb\r\n"; - Assert.AreEqual(expectedText, responseFileText.ToString()); - } - - [Test] - public void WriteTestsAddsTestMethodFileNameToResponseFile() - { - MockClass c = MockClass.CreateMockClassWithoutAnyAttributes(); - MockMethod method = new MockMethod(c, "MyTest"); - method.CompilationUnit.FileName = @"d:\mytest.rb"; - SelectedTests selectedTests = RubySelectedTestsHelper.CreateSelectedTests(method); - responseFile.WriteTests(selectedTests); - - string expectedText = "d:\\mytest.rb\r\n"; - Assert.AreEqual(expectedText, responseFileText.ToString()); - } - - [Test] - public void WriteTestsAddsFileNamesForFileInProject() - { - MockCSharpProject project = new MockCSharpProject(new Solution(new MockProjectChangeWatcher()), "mytests"); - - FileProjectItem item = new FileProjectItem(project, ItemType.Compile); - item.FileName = @"c:\projects\mytests\myTests.rb"; - ProjectService.AddProjectItem(project, item); - - SelectedTests selectedTests = RubySelectedTestsHelper.CreateSelectedTests(project); - responseFile.WriteTests(selectedTests); - - string expectedText = "c:\\projects\\mytests\\myTests.rb\r\n"; - Assert.AreEqual(expectedText, responseFileText.ToString()); - } - - [Test] - public void WriteTestsDoesNotThrowNullReferenceExceptionWhenNonFileProjectItemInProject() - { - MockCSharpProject project = new MockCSharpProject(new Solution(new MockProjectChangeWatcher()), "mytests"); - WebReferenceUrl webRef = new WebReferenceUrl(project); - webRef.Include = "test"; - ProjectService.AddProjectItem(project, webRef); - - FileProjectItem item = new FileProjectItem(project, ItemType.Compile); - item.FileName = @"c:\projects\mytests\myTests.rb"; - ProjectService.AddProjectItem(project, item); - - SelectedTests tests = new SelectedTests(project); - responseFile.WriteTests(tests); - - string expectedText = "c:\\projects\\mytests\\myTests.rb\r\n"; - Assert.AreEqual(expectedText, responseFileText.ToString()); - } - - [Test] - public void WriteTestsDoesNotThrowNullReferenceExceptionWhenProjectIsNull() - { - SelectedTests tests = new SelectedTests(null); - responseFile.WriteTests(tests); - - Assert.AreEqual(String.Empty, responseFileText.ToString()); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestRunnerRunsSelectedTestMethodTestFixture.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestRunnerRunsSelectedTestMethodTestFixture.cs deleted file mode 100644 index 77e01fc3bd..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Testing/RubyTestRunnerRunsSelectedTestMethodTestFixture.cs +++ /dev/null @@ -1,217 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Diagnostics; -using System.IO; -using System.Text; - -using ICSharpCode.Core; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Gui; -using ICSharpCode.UnitTesting; -using NUnit.Framework; -using RubyBinding.Tests.Utils; -using UnitTesting.Tests.Utils; - -namespace RubyBinding.Tests.Testing -{ - [TestFixture] - public class RubyTestRunnerRunsSelectedTestMethodTestFixture - { - MockCSharpProject project; - RubyTestRunner testRunner; - MockProcessRunner processRunner; - MockTestResultsMonitor testResultsMonitor; - SelectedTests selectedTests; - MockMethod methodToTest; - RubyAddInOptions options; - MockScriptingFileService fileService; - StringBuilder responseFileText; - StringWriter responseFileStringWriter; - - [SetUp] - public void Init() - { - CreateTestRunner(); - CreateTestMethod(); - } - - void CreateTestRunner() - { - processRunner = new MockProcessRunner(); - testResultsMonitor = new MockTestResultsMonitor(); - testResultsMonitor.InitialFilePosition = 3; - options = new RubyAddInOptions(new Properties()); - options.RubyFileName = @"c:\ironruby\ir.exe"; - fileService = new MockScriptingFileService(); - MockMessageService messageService = new MockMessageService(); - - RubyTestRunnerContext context = new RubyTestRunnerContext(processRunner, testResultsMonitor, options, fileService, messageService); - testRunner = new RubyTestRunner(context); - } - - void CreateTestMethod() - { - project = new MockCSharpProject(); - MockClass c = new MockClass("MyNamespace.MyTestClass"); - methodToTest = new MockMethod(c, "MyTestMethod"); - } - - void RunTestsOnSelectedTestMethod() - { - fileService.SetTempFileName(@"d:\temp\tmp66.tmp"); - CreateTemporaryResponseFileWriter(); - - selectedTests = new SelectedTests(project, null, null, methodToTest); - testRunner.Start(selectedTests); - } - - void CreateTemporaryResponseFileWriter() - { - responseFileText = new StringBuilder(); - responseFileStringWriter = new StringWriter(responseFileText); - fileService.SetTextWriter(responseFileStringWriter); - } - - [Test] - public void TestRunnerProcessFileNameIsIronRubyConsoleExeTakenFromAddInOptions() - { - RunTestsOnSelectedTestMethod(); - - string expectedFileName = @"c:\ironruby\ir.exe"; - Assert.AreEqual(expectedFileName, processRunner.CommandPassedToStartMethod); - } - - [Test] - public void CommandLineArgumentHasSharpDevelopTestRubyScriptFileNameAndTestResultsFileNameAndResponseFileName() - { - AddInPathHelper helper = new AddInPathHelper("RubyBinding"); - AddIn addin = helper.CreateDummyAddInInsideAddInTree(); - addin.FileName = @"c:\sharpdevelop\addins\rubybinding\rubybinding.addin"; - - testResultsMonitor.FileName = @"d:\testresults.txt"; - RunTestsOnSelectedTestMethod(); - - string expectedCommandLine = - "--disable-gems " + - "\"-Ic:\\sharpdevelop\\addins\\rubybinding\\TestRunner\" " + - "\"c:\\sharpdevelop\\addins\\rubybinding\\TestRunner\\sdtest.rb\" " + - "--name=MyTestMethod " + - "-- " + - "\"d:\\testresults.txt\" " + - "\"d:\\temp\\tmp66.tmp\""; - - Assert.AreEqual(expectedCommandLine, processRunner.CommandArgumentsPassedToStartMethod); - } - - [Test] - public void ResponseFileCreatedUsingTempFileName() - { - RunTestsOnSelectedTestMethod(); - - Assert.AreEqual(@"d:\temp\tmp66.tmp", fileService.CreateTextWriterInfoPassedToCreateTextWriter.FileName); - } - - [Test] - public void ResponseFileCreatedWithAsciiEncoding() - { - RunTestsOnSelectedTestMethod(); - - Assert.AreEqual(Encoding.ASCII, fileService.CreateTextWriterInfoPassedToCreateTextWriter.Encoding); - } - - [Test] - public void ResponseFileCreatedWithAppendSetToFalse() - { - RunTestsOnSelectedTestMethod(); - - Assert.IsFalse(fileService.CreateTextWriterInfoPassedToCreateTextWriter.Append); - } - - [Test] - public void DisposingTestRunnerDeletesTemporaryResponseFile() - { - fileService.FileNameDeleted = null; - RunTestsOnSelectedTestMethod(); - testRunner.Dispose(); - - string expectedFileName = @"d:\temp\tmp66.tmp"; - Assert.AreEqual(expectedFileName, fileService.FileNameDeleted); - } - - [Test] - public void DisposingTestRunnerDisposesTestResultsMonitor() - { - RunTestsOnSelectedTestMethod(); - testRunner.Dispose(); - Assert.IsTrue(testResultsMonitor.IsDisposeMethodCalled); - } - - [Test] - public void ResponseFileTextContainsTestMethodFileName() - { - methodToTest.CompilationUnit.FileName = @"d:\projects\ruby\test.rb"; - RunTestsOnSelectedTestMethod(); - - string expectedText = - "d:\\projects\\ruby\\test.rb\r\n"; - - Assert.AreEqual(expectedText, responseFileText.ToString()); - } - - [Test] - public void ResponseFileTextWriterDisposedAfterTestsRun() - { - RunTestsOnSelectedTestMethod(); - Assert.Throws(delegate { responseFileStringWriter.Write("test"); }); - } - - [Test] - public void ProcessRunnerWorkingDirectoryIsDirectoryContainingProject() - { - RunTestsOnSelectedTestMethod(); - - string expectedDirectory = @"c:\projects\MyTests"; - string actualDirectory = processRunner.WorkingDirectory; - - Assert.AreEqual(expectedDirectory, actualDirectory); - } - - [Test] - public void RubyTestResultReturnedFromTestFinishedEvent() - { - TestResult testResult = null; - testRunner.TestFinished += delegate(object source, TestFinishedEventArgs e) { - testResult = e.Result; - }; - TestResult testResultToFire = new TestResult("test"); - testResultsMonitor.FireTestFinishedEvent(testResultToFire); - - Assert.IsInstanceOf(typeof(RubyTestResult), testResult); - } - - [Test] - public void TestResultsMonitorInitialFilePositionIsZero() - { - Assert.AreEqual(0, testResultsMonitor.InitialFilePosition); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedConvertProjectToRubyProjectCommand.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedConvertProjectToRubyProjectCommand.cs deleted file mode 100644 index 1eec047f17..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedConvertProjectToRubyProjectCommand.cs +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Text; - -using ICSharpCode.Core; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Editor; -using ICSharpCode.SharpDevelop.Project; - -namespace RubyBinding.Tests.Utils -{ - public struct SourceAndTargetFile - { - public FileProjectItem Source; - public FileProjectItem Target; - - public SourceAndTargetFile(FileProjectItem source, FileProjectItem target) - { - this.Source = source; - this.Target = target; - } - } - - /// - /// Used to test the ConvertProjectToRubyProjectCommand class. - /// - public class DerivedConvertProjectToRubyProjectCommand : ConvertProjectToRubyProjectCommand - { - List sourceAndTargetFilesPassedToBaseClass = new List(); - List savedFiles = new List(); - List parseableFileContent = new List(); - IProjectContent projectContent; - ParseInformation parseInfo; - List filesPassedToGetParseInfo = new List(); - Encoding fileServiceDefaultEncoding = Encoding.ASCII; - - public List SourceAndTargetFilesPassedToBaseClass { - get { return sourceAndTargetFilesPassedToBaseClass; } - } - - /// - /// Gets the files converted and saved. - /// - public List SavedFiles { - get { return savedFiles; } - } - - /// - /// Sets the project content to be returned from the GetProjectContent method. - /// - public IProjectContent ProjectContent { - get { return projectContent; } - set { projectContent = value; } - } - - public ParseInformation ParseInfo { - get { return parseInfo; } - set { parseInfo = value; } - } - - public Encoding FileServiceDefaultEncoding { - get { return fileServiceDefaultEncoding; } - set { fileServiceDefaultEncoding = value; } - } - - public List FilesPassedToGetParseInfo { - get { return filesPassedToGetParseInfo; } - } - - public void AddParseableFileContent(string fileName, string content) - { - parseableFileContent.Add(new ConvertedFile(fileName, content, null)); - } - - public void CallConvertFile(FileProjectItem source, FileProjectItem target) - { - ConvertFile(source, target); - } - - public IProject CallCreateProject(string directory, IProject sourceProject) - { - return base.CreateProject(directory, sourceProject); - } - - public void CallCopyProperties(IProject source, IProject target) - { - base.CopyProperties(source, target); - } - - protected override void LanguageConverterConvertFile(FileProjectItem source, FileProjectItem target) - { - sourceAndTargetFilesPassedToBaseClass.Add(new SourceAndTargetFile(source, target)); - } - - protected override void SaveFile(string fileName, string content, Encoding encoding) - { - savedFiles.Add(new ConvertedFile(fileName, content, encoding)); - } - - protected override string GetParseableFileContent(string fileName) - { - foreach (ConvertedFile file in parseableFileContent) { - if (file.FileName == fileName) { - return file.Text; - } - } - return null; - } - - protected override ParseInformation GetParseInfo(string fileName) - { - filesPassedToGetParseInfo.Add(fileName); - return parseInfo; - } - - protected override IProjectContent GetProjectContent(IProject project) - { - return projectContent; - } - - protected override Encoding GetDefaultFileEncoding() - { - return fileServiceDefaultEncoding; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedRubyAddInOptions.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedRubyAddInOptions.cs deleted file mode 100644 index 65b7351060..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedRubyAddInOptions.cs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.Core; -using ICSharpCode.RubyBinding; - -namespace RubyBinding.Tests.Utils -{ - /// - /// Overrides the AddInOptions GetAddInPath method to return - /// some dummy data used for testing. - /// - public class DerivedRubyAddInOptions : RubyAddInOptions - { - string addInPath = String.Empty; - string addInPathRequested = String.Empty; - - public DerivedRubyAddInOptions(Properties properties) : base(properties) - { - } - - /// - /// Gets the addin path string passed to the GetAddInPath method. - /// - public string AddInPathRequested { - get { return addInPathRequested; } - } - - /// - /// Gets or sets the addin path that should be returned from the - /// GetAddInPath method. - /// - public string AddInPath { - get { return addInPath; } - set { addInPath = value; } - } - - /// - /// Returns our dummy AddInPath. - /// - protected override string GetAddInPath(string addIn) - { - addInPathRequested = addIn; - return addInPath; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedRubyConsoleHost.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedRubyConsoleHost.cs deleted file mode 100644 index 8f47cf45ad..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedRubyConsoleHost.cs +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.IO; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting; -using ICSharpCode.Scripting.Tests.Utils; -using Microsoft.Scripting; -using Microsoft.Scripting.Hosting; -using Microsoft.Scripting.Hosting.Shell; - -namespace RubyBinding.Tests.Console -{ - public class DerivedRubyConsoleHost : RubyConsoleHost - { - ScriptingConsoleOutputStream outputStream; - - public DerivedRubyConsoleHost(IScriptingConsoleTextEditor textEditor) - : base(textEditor, new FakeControlDispatcher()) - { - } - - public Type GetProvider() - { - return base.Provider; - } - - public CommandLine CallCreateCommandLine() - { - return base.CreateCommandLine(); - } - - public IConsole CallCreateConsole(ScriptEngine engine, CommandLine commandLine, ConsoleOptions options) - { - return base.CreateConsole(engine, commandLine, options); - } - - public OptionsParser CallCreateOptionsParser() - { - return base.CreateOptionsParser(); - } - - public LanguageSetup CallCreateLanguageSetup() - { - return base.CreateLanguageSetup(); - } - - /// - /// Gets the output stream class passed to SetOutput method. - /// - public ScriptingConsoleOutputStream OutputStream { - get { return outputStream; } - } - - protected override void SetOutput(ScriptingConsoleOutputStream stream) - { - outputStream = stream; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedRubyDesignerGenerator.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedRubyDesignerGenerator.cs deleted file mode 100644 index 98fc4a693c..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedRubyDesignerGenerator.cs +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using System.Collections; -using System.ComponentModel; -using System.Reflection; - -using ICSharpCode.FormsDesigner; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Editor; -using ICSharpCode.SharpDevelop.Gui; - -namespace RubyBinding.Tests.Utils -{ - /// - /// Gives access to various protected methods - /// of the RubyDesignerGenerator class for testing. - /// - public class DerivedRubyDesignerGenerator : RubyDesignerGenerator - { - ParseInformation parseInfoToReturnFromParseFile; - - public DerivedRubyDesignerGenerator() : this(new MockTextEditorOptions()) - { - } - - public DerivedRubyDesignerGenerator(ITextEditorOptions textEditorOptions) - : base(textEditorOptions) - { - } - - /// - /// Gets or sets the parse information that will be returned from the - /// ParseFile method. - /// - public ParseInformation ParseInfoToReturnFromParseFileMethod { - get { return parseInfoToReturnFromParseFile; } - set { parseInfoToReturnFromParseFile = value; } - } - - protected override ParseInformation ParseFile(string fileName, string textContent) - { - return parseInfoToReturnFromParseFile; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedRubyFormsDesignerDisplayBinding.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedRubyFormsDesignerDisplayBinding.cs deleted file mode 100644 index e7c2e90e65..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/DerivedRubyFormsDesignerDisplayBinding.cs +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Dom; - -namespace RubyBinding.Tests.Utils -{ - public class DerivedRubyFormsDesignerDisplayBinding : RubyFormsDesignerDisplayBinding - { - ParseInformation parseInfo; - ParseInformation parseServiceParseInfo; - bool isParseInfoDesignable; - string fileNamePassedToGetParseInfo; - string textContentNamePassedToGetParseInfo; - - public DerivedRubyFormsDesignerDisplayBinding() - { - } - - /// - /// Gets the parse info passed to the Forms Designer's IsDesignable method. - /// - public ParseInformation ParseInfoTestedForDesignability { - get { return parseInfo; } - } - - /// - /// Gets or sets the parse info that will be returned from the - /// GetParseInfo method. - /// - public ParseInformation ParseServiceParseInfoToReturn { - get { return parseServiceParseInfo; } - set { parseServiceParseInfo = value; } - } - - /// - /// Gets or sets what the IsDesignable method should return. - /// - public bool IsParseInfoDesignable { - get { return isParseInfoDesignable; } - set { isParseInfoDesignable = value; } - } - - /// - /// Gets the filename passed to the GetParseInfo method. - /// - public string FileNamePassedToGetParseInfo { - get { return fileNamePassedToGetParseInfo; } - } - - /// - /// Gets the text content passed to the GetParseInfo method. - /// - public string TextContentPassedToGetParseInfo { - get { return textContentNamePassedToGetParseInfo; } - } - - /// - /// Gets the parse information from the parse service - /// for the specified file. - /// - protected override ParseInformation GetParseInfo(string fileName, ITextBuffer textBuffer) - { - fileNamePassedToGetParseInfo = fileName; - textContentNamePassedToGetParseInfo = textBuffer.Text; - return parseServiceParseInfo; - } - - /// - /// Determines whether the specified parse information contains - /// a class which is designable. - /// - protected override bool IsDesignable(ParseInformation parseInfo) - { - this.parseInfo = parseInfo; - return isParseInfoDesignable; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyBindingAddInFile.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyBindingAddInFile.cs deleted file mode 100644 index 158d420598..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyBindingAddInFile.cs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.IO; -using System.Reflection; -using System.Xml; - -namespace RubyBinding.Tests.Utils -{ - /// - /// Utility class that reads the RubyBinding.addin file - /// that has been embedded as a resource into the test assembly. - /// - public sealed class RubyBindingAddInFile - { - RubyBindingAddInFile() - { - } - - /// - /// Returns the RubyBinding.addin file. - /// - public static TextReader ReadAddInFile() - { - Assembly assembly = Assembly.GetAssembly(typeof(RubyBindingAddInFile)); - string resourceName = String.Concat("RubyBinding.Tests.RubyBinding.addin"); - Stream resourceStream = assembly.GetManifestResourceStream(resourceName); - if (resourceStream != null) { - return new StreamReader(resourceStream); - } - return null; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyCodeDomSerializerHelper.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyCodeDomSerializerHelper.cs deleted file mode 100644 index 878d182e60..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyCodeDomSerializerHelper.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; - -namespace RubyBinding.Tests.Utils -{ - public class RubyCodeDomSerializerHelper - { - public static RubyCodeDomSerializer CreateSerializer() - { - return new RubyCodeDomSerializer(); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyComponentWalkerHelper.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyComponentWalkerHelper.cs deleted file mode 100644 index 86eb3d77c5..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyComponentWalkerHelper.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting; - -namespace RubyBinding.Tests.Utils -{ - public class RubyComponentWalkerHelper - { - public static IComponentWalker CreateComponentWalker(IComponentCreator componentCreator) - { - return new RubyComponentWalker(componentCreator); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyMSBuildEngineHelper.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyMSBuildEngineHelper.cs deleted file mode 100644 index 54d7071836..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyMSBuildEngineHelper.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.IO; -using ICSharpCode.RubyBinding; -using ICSharpCode.Scripting.Tests.Utils; -using ICSharpCode.SharpDevelop.Project; - -namespace RubyBinding.Tests.Utils -{ - public sealed class RubyMSBuildEngineHelper - { - RubyMSBuildEngineHelper() - { - } - - /// - /// The MSBuildEngine sets the RubyBinPath so if - /// the Ruby.Build.Tasks assembly is shadow copied it refers - /// to the shadow copied assembly not the original. This - /// causes problems for Ruby projects that refer to the - /// SharpDevelop.Ruby.Build.targets import via $(RubyBinPath) - /// so here we change it so it points to the real RubyBinPath - /// binary. - /// - public static void InitMSBuildEngine() - { - string relativePath = @"..\..\AddIns\BackendBindings\RubyBinding\"; - MSBuildEngineHelper.InitMSBuildEngine("RubyBinPath", relativePath, typeof(RubyParser)); - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyParserHelper.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyParserHelper.cs deleted file mode 100644 index 52318804a0..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubyParserHelper.cs +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop; -using ICSharpCode.RubyBinding; -using IronRuby.Compiler.Ast; - -namespace RubyBinding.Tests.Utils -{ - /// - /// Description of RubyParserHelper. - /// - public class RubyParserHelper - { - /// - /// Parses the code and returns the first statement as an assignment express. - /// - public static SimpleAssignmentExpression GetSimpleAssignmentExpression(string code) - { - return GetFirstExpression(code) as SimpleAssignmentExpression; - } - - /// - /// Parses the code and returns the first statement's expression as a method call. - /// - public static MethodCall GetMethodCall(string code) - { - return GetFirstExpression(code) as MethodCall; - } - - public static Expression GetLastExpression(string code) - { - return Parse(code).Last; - } - - static Expression GetFirstExpression(string code) - { - return Parse(code).First; - } - - static Statements Parse(string code) - { - RubyParser parser = new RubyParser(); - SourceUnitTree unit = parser.CreateAst(@"snippet.rb", new StringTextBuffer(code)); - return unit.Statements; - } - } -} diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubySelectedTestsHelper.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubySelectedTestsHelper.cs deleted file mode 100644 index f2a5b7333a..0000000000 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Test/Utils/RubySelectedTestsHelper.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.RubyBinding; -using ICSharpCode.SharpDevelop.Project; -using ICSharpCode.UnitTesting; -using UnitTesting.Tests.Utils; - -namespace RubyBinding.Tests.Utils -{ - public static class RubySelectedTestsHelper - { - public static SelectedTests CreateSelectedTests(IProject project) - { - return new SelectedTests(project, null, null, null); - } - - public static SelectedTests CreateSelectedTests(MockMethod method) - { - return new SelectedTests(method.MockDeclaringType.Project, null, method.MockDeclaringType, method); - } - - public static SelectedTests CreateSelectedTests(MockClass c) - { - return new SelectedTests(c.Project, null, c, null); - } - } -} diff --git a/src/Setup/Files.wxs b/src/Setup/Files.wxs index d23a95d9fc..25d647d529 100644 --- a/src/Setup/Files.wxs +++ b/src/Setup/Files.wxs @@ -1029,92 +1029,6 @@ - diff --git a/src/Setup/Setup.wxs b/src/Setup/Setup.wxs index d32bd32c2c..1828d3eee3 100644 --- a/src/Setup/Setup.wxs +++ b/src/Setup/Setup.wxs @@ -377,33 +377,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - --> From c186a26bc470dce16d2184b24f8322640f03077f Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sat, 30 Aug 2014 12:55:31 +0100 Subject: [PATCH 197/575] Remove IronPython addin. --- .../Python/PyWalker/AssemblyInfo.cs | 49 - .../Python/PyWalker/CodeDomVisitor.cs | 441 ---- .../Python/PyWalker/Indentation.cs | 46 - .../Python/PyWalker/MainForm.Designer.cs | 210 -- .../Python/PyWalker/MainForm.cs | 157 -- .../Python/PyWalker/MainForm.resx | 123 - .../Python/PyWalker/NRefactoryAstVisitor.cs | 678 ------ .../Python/PyWalker/Program.cs | 41 - .../Python/PyWalker/PyWalker.csproj | 84 - .../Python/PyWalker/ResolveWalker.cs | 237 -- .../Project/Configuration/AssemblyInfo.cs | 31 - .../Project/Python.Build.Tasks.csproj | 79 - .../Project/SharpDevelop.Build.Python.targets | 105 - .../Project/Src/IPythonCompiler.cs | 83 - .../Project/Src/PythonCompiler.cs | 282 --- .../Project/Src/PythonCompilerException.cs | 29 - .../Project/Src/PythonCompilerTask.cs | 313 --- .../Project/Src/ResourceFile.cs | 58 - .../Project/Src/Resources.cs | 36 - .../Python.Build.Tasks/Test/AssemblyInfo.cs | 49 - .../Test/CompileResourcesTestFixture.cs | 90 - .../CompileSingleSourceFileTestFixture.cs | 120 - .../Test/DifferentTargetTypesTestFixture.cs | 84 - .../Test/DummyPythonCompilerTask.cs | 109 - .../Test/IOErrorTestFixture.cs | 72 - .../Test/IncludeDebugInfoTestFixture.cs | 77 - .../Test/LogicalResourceNamesTests.cs | 59 - .../Test/MainEntryPointTestFixture.cs | 72 - .../Test/MissingMainEntryPointTestFixture.cs | 67 - .../Test/MockPythonCompiler.cs | 160 -- .../Test/PlatformTestFixture.cs | 116 - .../Test/Python.Build.Tasks.Tests.csproj | 90 - .../Test/PythonCompilerTests.cs | 57 - .../Test/RelativeReferenceTestFixture.cs | 69 - .../Test/RelativeResourceFileTestFixture.cs | 69 - ...ntaxErrorFileNameWithDotCharTestFixture.cs | 79 - .../SyntaxErrorNullFileNameTestFixture.cs | 71 - .../Test/SyntaxErrorTestFixture.cs | 119 - .../SyntaxErrorUnknownFileNameTestFixture.cs | 78 - .../BackendBindings/Python/PythonBinding.sln | 206 -- .../Project/Configuration/AssemblyInfo.cs | 31 - .../PythonBinding/Project/Lib/__future__.py | 25 - .../Python/PythonBinding/Project/Lib/runpy.py | 31 - .../Python/PythonBinding/Project/Lib/site.py | 14 - .../PythonBinding/Project/PythonBinding.addin | 227 -- .../Project/PythonBinding.csproj | 319 --- .../Resources/ApplicationSettingsPanel.xfrm | 138 -- .../Resources/CompilingOptionsPanel.xfrm | 71 - .../Project/Resources/Python.xshd | 135 -- .../PythonBinding/Project/Src/AddInOptions.cs | 100 - .../Project/Src/ApplicationSettingsPanel.cs | 154 -- .../Project/Src/CompilingOptionsPanel.cs | 108 - .../Project/Src/ConstructorInfo.cs | 68 - .../ConvertProjectToPythonProjectCommand.cs | 170 -- .../Project/Src/ConvertToPythonMenuCommand.cs | 66 - .../Project/Src/IPythonResolver.cs | 28 - .../PythonBinding/Project/Src/MemberName.cs | 90 - .../Src/NRefactoryToPythonConverter.cs | 2074 ----------------- .../Project/Src/PythonAstWalker.cs | 159 -- .../Src/PythonBuiltInModuleMemberName.cs | 37 - .../PythonBinding/Project/Src/PythonClass.cs | 106 - .../Project/Src/PythonClassFields.cs | 79 - .../Project/Src/PythonClassMembers.cs | 54 - .../Project/Src/PythonClassResolver.cs | 119 - .../Project/Src/PythonCodeBuilder.cs | 56 - .../Src/PythonCodeCompletionBinding.cs | 69 - .../Src/PythonCodeCompletionItemProvider.cs | 31 - .../Project/Src/PythonCodeDeserializer.cs | 253 -- .../Project/Src/PythonCodeDomSerializer.cs | 388 --- .../Project/Src/PythonCompilationUnit.cs | 33 - .../Project/Src/PythonCompilerError.cs | 52 - .../Project/Src/PythonCompilerSink.cs | 59 - .../Project/Src/PythonCompletionItemList.cs | 39 - .../Project/Src/PythonComponentWalker.cs | 417 ---- .../Src/PythonComponentWalkerException.cs | 32 - .../Project/Src/PythonConsole.cs | 86 - .../Project/Src/PythonConsoleApplication.cs | 46 - .../Project/Src/PythonConsoleHost.cs | 103 - .../Project/Src/PythonConsolePad.cs | 36 - .../Project/Src/PythonConstructor.cs | 32 - .../Src/PythonControlFieldExpression.cs | 533 ----- .../Project/Src/PythonDesignerGenerator.cs | 103 - .../Project/Src/PythonDesignerLoader.cs | 43 - .../Src/PythonDesignerLoaderProvider.cs | 37 - .../Project/Src/PythonExpression.cs | 91 - .../Project/Src/PythonExpressionFinder.cs | 208 -- .../Project/Src/PythonFormattingStrategy.cs | 36 - .../Src/PythonFormsDesignerDisplayBinding.cs | 104 - .../Project/Src/PythonFromImport.cs | 84 - .../PythonBinding/Project/Src/PythonImport.cs | 66 - .../Project/Src/PythonImportCompletion.cs | 86 - .../Project/Src/PythonImportExpression.cs | 190 -- .../Src/PythonImportExpressionContext.cs | 60 - .../Src/PythonImportModuleResolveResult.cs | 58 - .../Project/Src/PythonImportResolver.cs | 43 - .../Project/Src/PythonInsightWindowHandler.cs | 92 - .../Project/Src/PythonLanguageBinding.cs | 36 - .../Project/Src/PythonLanguageProperties.cs | 46 - .../Project/Src/PythonLineIndenter.cs | 61 - .../Src/PythonLocalVariableAssignment.cs | 89 - .../Src/PythonLocalVariableResolver.cs | 141 -- .../Project/Src/PythonMemberResolver.cs | 145 -- .../PythonBinding/Project/Src/PythonMethod.cs | 113 - .../Project/Src/PythonMethodDefinition.cs | 48 - .../Src/PythonMethodGroupResolveResult.cs | 31 - .../Src/PythonMethodOrClassBodyRegion.cs | 63 - .../Src/PythonMethodReturnValueResolver.cs | 61 - .../PythonBinding/Project/Src/PythonModule.cs | 32 - .../Src/PythonModuleCompletionItems.cs | 171 -- .../Src/PythonModuleCompletionItemsFactory.cs | 39 - .../Project/Src/PythonNamespaceResolver.cs | 84 - .../Project/Src/PythonOptionsPanel.xaml | 44 - .../Project/Src/PythonOptionsPanel.xaml.cs | 79 - .../PythonBinding/Project/Src/PythonParser.cs | 150 -- .../Project/Src/PythonProject.cs | 100 - .../Project/Src/PythonProjectBinding.cs | 56 - .../Project/Src/PythonProperty.cs | 41 - .../Project/Src/PythonPropertyAssignment.cs | 69 - .../Src/PythonPropertyValueAssignment.cs | 152 -- .../Project/Src/PythonResolver.cs | 112 - .../Project/Src/PythonResolverContext.cs | 328 --- .../Project/Src/PythonSelfResolver.cs | 61 - .../Project/Src/PythonStandardLibraryPath.cs | 88 - ...PythonStandardModuleMethodResolveResult.cs | 49 - .../Src/PythonStandardModuleMethodResolver.cs | 95 - .../Src/PythonStandardModuleResolveResult.cs | 43 - .../Src/PythonStandardModuleResolver.cs | 57 - .../Project/Src/PythonStandardModuleType.cs | 42 - .../Project/Src/PythonStandardModules.cs | 75 - .../Project/Src/PythonTestDebugger.cs | 85 - .../Project/Src/PythonTestFramework.cs | 86 - .../Project/Src/PythonTestResult.cs | 77 - .../Project/Src/PythonTestRunner.cs | 79 - .../Src/PythonTestRunnerApplication.cs | 122 - .../Project/Src/PythonTestRunnerContext.cs | 66 - .../Src/PythonTestRunnerResponseFile.cs | 133 -- .../Project/Src/PythonUsingScope.cs | 33 - .../Project/Src/PythonWorkbench.cs | 31 - .../Project/Src/RunDebugPythonCommand.cs | 38 - .../Project/Src/RunPythonCommand.cs | 41 - .../Src/SendLineToPythonConsoleCommand.cs | 32 - .../SendSelectedTextToPythonConsoleCommand.cs | 31 - .../Project/Src/StringTextContentProvider.cs | 44 - .../Project/Src/SysModuleCompletionItems.cs | 64 - .../Project/Templates/ConsoleProject.xpt | 54 - .../PythonBinding/Project/Templates/Empty.xft | 15 - .../Project/Templates/EmptyClass.xft | 18 - .../Project/Templates/EmptyForm.xft | 29 - .../Project/Templates/EmptyUserControl.xft | 28 - .../Project/Templates/FormsProject.xpt | 83 - .../Project/Templates/LibraryProject.xpt | 43 - .../Templates/SilverlightApplication.xpt | 73 - .../Project/Templates/WPFApplication.xpt | 102 - .../Project/Templates/WPFWindow.xft | 27 - .../Project/TestRunner/sdtest.py | 95 - .../Project/TestRunner/sdtestrunner.py | 106 - .../Python/PythonBinding/Test/AssemblyInfo.cs | 54 - ...pletionBindingFromImportCompletionTests.cs | 85 - ...eCompletionBindingImportCompletionTests.cs | 116 - ...FromDateTimeImportCompletionTestFixture.cs | 55 - ...romImportDotNetNamespaceCompletionTests.cs | 69 - .../FromImportPythonModuleCompletionTests.cs | 70 - ...mMathLibraryImportCompletionTestFixture.cs | 83 - ...aryImportCosMethodCompletionTestFixture.cs | 61 - ...LibraryImportCompletionItemsTestFixture.cs | 244 -- .../GetMethodsFromSysLibraryTestFixture.cs | 124 - .../Completion/GetPythonModulesTestFixture.cs | 82 - .../GetTypeForPythonModuleTestFixture.cs | 63 - .../Completion/ImportCompletionTestFixture.cs | 66 - ...portEmptyNamespaceCompletionTestFixture.cs | 51 - ...emsIfExpressionHasIdentifierTestFixture.cs | 64 - ...ImportSubNamespaceCompletionTestFixture.cs | 61 - ...ModuleMembersInPythonContextTestFixture.cs | 45 - ...paceContentsAddedToCtrlSpaceTestFixture.cs | 91 - .../PythonCodeCompletionBindingTests.cs | 44 - .../PythonCodeCompletionItemProviderTests.cs | 38 - .../PythonCompletionItemListTests.cs | 56 - .../PythonImportExpressionContextTests.cs | 140 -- .../PythonInsightWindowHandlerTests.cs | 141 -- ...onSocketLibraryDocumentationTestFixture.cs | 59 - ...ModuleMembersInPythonContextTestFixture.cs | 67 - .../Configuration/AddInOptionsTestFixture.cs | 107 - .../BuiltinCodeCompletionTestFixture.cs | 93 - .../Test/Console/PythonConsoleHostTests.cs | 116 - .../AddHandlerConversionTestFixture.cs | 71 - .../ArrayCastConversionTestFixture.cs | 57 - .../Converter/ArrayConversionTestFixture.cs | 182 -- ...AssignmentOperatorConversionTestFixture.cs | 177 -- .../BaseClassConversionTestFixture.cs | 47 - .../BaseClassReferenceTestFixture.cs | 54 - .../BinaryOperatorConversionTests.cs | 181 -- .../BitShiftConversionTestFixture.cs | 52 - .../Converter/BooleanConversionTestFixture.cs | 53 - .../BreakAndContinueConversionTestFixture.cs | 65 - ...ClassWithNamespaceConversionTestFixture.cs | 53 - ...ctorWithParametersConversionTestFixture.cs | 53 - .../ClassConstructorConversionTestFixture.cs | 53 - .../ClassDestructorConversionTestFixture.cs | 58 - .../ClassFieldReferenceTestFixture.cs | 63 - ...ertCSharpToPythonMenuCommandTestFixture.cs | 75 - ...onvertToPythonProjectCommandTestFixture.cs | 160 -- ...vertVBNetToPythonMenuCommandTestFixture.cs | 78 - .../ConverterSupportedLanguageTests.cs | 92 - .../ElseIfStatementConversionTestFixture.cs | 61 - .../EmptyCSharpClassConversionTestFixture.cs | 60 - ...entHandlerWithObjectCreationTestFixture.cs | 62 - ...DeclarationWithNoInitializerTestFixture.cs | 55 - .../Converter/ForLoopConversionTestFixture.cs | 77 - .../Test/Converter/ForNextConversionTests.cs | 89 - .../Converter/ForeachConversionTestFixture.cs | 93 - ...eachConversionWithMethodCallTestFixture.cs | 57 - .../GenerateMainMethodCallTestFixture.cs | 57 - .../GenericListConversionTestFixture.cs | 64 - .../IfBlockStatementConversionTestFixture.cs | 68 - .../IfStatementConversionTestFixture.cs | 63 - .../IncrementAndDecrementConversionTests.cs | 203 -- .../IntegerClassFieldConversionTestFixture.cs | 56 - ...ieldInitializedInConstructorTestFixture.cs | 56 - ...gerClassFieldWithConstructorTestFixture.cs | 56 - .../IntegerMethodParameterTestFixture.cs | 54 - ...ariableAssignedInConstructorTestFixture.cs | 55 - ...ableDeclarationInIfStatementTestFixture.cs | 68 - ...LocalVariableDefinitionsOnSameLineTests.cs | 75 - .../LocalVariableNotInitializedTestFixture.cs | 50 - .../MethodCallInConstructorTestFixture.cs | 53 - .../MethodParameterConversionTestFixture.cs | 53 - .../MethodReturnValueConversionTestFixture.cs | 53 - .../MethodWithBodyConversionTestFixture.cs | 53 - .../ModulusOperatorConversionTestFixture.cs | 49 - .../Converter/MultiLineCommentTestFixture.cs | 66 - .../MultipleFieldsOnSameLineTests.cs | 121 - .../NestedClassConversionTestFixture.cs | 69 - .../NestedIfStatementConversionTestFixture.cs | 86 - .../Converter/NullConversionTestFixture.cs | 57 - .../Converter/ObjectCreationTestFixture.cs | 56 - .../ObjectInitializerConversionTestFixture.cs | 86 - ...ectReferenceEqualsConversionTestFixture.cs | 50 - .../ProjectHasStartupObjectTestFixture.cs | 136 -- .../PropertyConversionTestFixture.cs | 70 - .../PropertyReferenceConversionTestFixture.cs | 73 - ...PropertyWithGetSetStatementsTestfixture.cs | 82 - .../PropertyWithGetterTestFixture.cs | 66 - .../PropertyWithSetterTestFixture.cs | 59 - .../RemoveHandlerConversionTestFixture.cs | 62 - .../SingleClassMethodConversionTestFixture.cs | 51 - .../SingleLineCommentConversionTestFixture.cs | 64 - .../StaticClassReferenceTestFixture.cs | 53 - .../StaticMethodConversionTestFixture.cs | 98 - .../SwitchStatementConversionTestFixture.cs | 111 - .../TernaryOperatorConversionTestFixture.cs | 52 - .../ThrowExceptionConversionTestFixture.cs | 54 - .../TryCatchFinallyConversionTestFixture.cs | 70 - .../Converter/TypeofConversionTestFixture.cs | 52 - .../Converter/UnaryOperatorConversionTests.cs | 115 - .../UsingStatementConversionTestFixture.cs | 67 - .../Converter/VBClassConversionTestFixture.cs | 50 - .../Test/Converter/VBExitConversionTests.cs | 53 - .../Converter/VBStringConcatTestFixture.cs | 52 - .../WhileLoopConversionTestFixture.cs | 54 - .../XmlDocCommentConversionTestFixture.cs | 88 - .../PythonBinding/Test/Designer/App.ico | Bin 1078 -> 0 bytes .../Designer/AssignmentAfterFormClassTests.cs | 77 - .../CallBeginInitOnLoadTestFixture.cs | 63 - ...ustomClassUsingTypeConverterTestFixture.cs | 43 - .../CursorTypeResolutionTestFixture.cs | 55 - .../DeserializeAssignmentTestFixtureBase.cs | 61 - .../DeserializeColorFromArgbTestFixture.cs | 56 - ...serializeComponentAssignmentTestFixture.cs | 51 - .../DeserializeConstraintArrayTestFixture.cs | 50 - .../DeserializeDateTimeArrayTestFixture.cs | 48 - .../DeserializeLocalVariableTestFixture.cs | 75 - .../DeserializeMethodParametersTestFixture.cs | 118 - .../DeserializeStringArrayTestFixture.cs | 57 - ...eserializeToolStripItemArrayTestFixture.cs | 63 - ...alizerConstructorStringArrayTestFixture.cs | 70 - ...edSetUsingPropertyDescriptorTestFixture.cs | 56 - .../EventHandlerAlreadyExistsTestFixture.cs | 86 - ...sWithIncorrectParameterCountTestFixture.cs | 71 - ...indInitializeComponentMethodTestFixture.cs | 135 -- .../FormBaseClassCreatedOnLoadTestFixture.cs | 58 - .../GenerateAcceptButtonFormTestFixture.cs | 61 - .../GenerateAccessibleRoleFormTestFixture.cs | 77 - .../GenerateAutoScaleModeFormTestFixture.cs | 90 - .../GenerateAutoScrollFormTestFixture.cs | 77 - .../GenerateBackgroundWorkerTestFixture.cs | 80 - ...GenerateButtonFlatAppearanceTestFixture.cs | 99 - .../GenerateComboBoxItemsTestFixture.cs | 98 - .../GenerateContextMenuStripTestFixture.cs | 97 - .../Designer/GenerateCursorFormTestFixture.cs | 77 - ...enerateCustomCollectionItemsTestFixture.cs | 122 - .../Designer/GenerateDataSetTestFixture.cs | 99 - .../GenerateDoubleBufferedFormTestFixture.cs | 80 - .../GenerateEventHandlerFormTestFixture.cs | 95 - .../Designer/GenerateEventLogTestFixture.cs | 79 - ...olderBrowserDialogRootFolderTestFixture.cs | 83 - .../Designer/GenerateFormColorTestFixture.cs | 80 - .../GenerateFormLocationTestFixture.cs | 77 - .../GenerateFormPaddingTestFixture.cs | 77 - .../GenerateFormResourcesTestFixture.cs | 114 - .../GenerateImageListResourcesTestFixture.cs | 114 - .../GenerateImeModeFormTestFixture.cs | 74 - .../GenerateInheritedFormTestFixture.cs | 88 - ...eInheritedProtectedPanelFormTestFixture.cs | 121 - .../GenerateInheritedToolTipTestFixture.cs | 91 - .../GenerateListViewGroupsTestFixture.cs | 124 - .../GenerateListViewItemTestFixture.cs | 144 -- .../GenerateListViewSubItemsTestFixture.cs | 143 -- ...enerateListViewWithImageListTestFixture.cs | 143 -- .../GenerateLocalImageResourceTestFixture.cs | 167 -- .../GenerateMenuStripFormTestFixture.cs | 97 - .../GenerateMenuStripItemsTestFixture.cs | 166 -- .../GenerateMinSizeFormTestFixture.cs | 86 - .../GenerateMonthCalendarTestFixture.cs | 94 - .../GenerateNestedPanelFormTestFixture.cs | 124 - .../Designer/GeneratePanelFormTestFixture.cs | 118 - .../GenerateRichTextBoxTestFixture.cs | 96 - .../GenerateRightToLeftFormTestFixture.cs | 74 - .../Designer/GenerateSimpleFormTestFixture.cs | 70 - .../GenerateTableLayoutPanelTestFixture.cs | 103 - .../GenerateTextBoxFormTestFixture.cs | 87 - .../Test/Designer/GenerateTimerTestFixture.cs | 81 - .../GenerateToolTipFormTestFixture.cs | 79 - .../Designer/GenerateTreeViewTestFixture.cs | 124 - ...teUserControlWithNullPropertyValueTests.cs | 60 - .../GeneratedControlOrderingTestFixture.cs | 110 - .../IgnoreDesignTimePropertiesTestFixture.cs | 78 - .../InsertEventHandlerTestFixtureBase.cs | 76 - ...tEventHandlerWithSpaceIndentTestFixture.cs | 78 - .../InsertNewEventHandlerTestFixture.cs | 106 - .../InsertSecondEventHandlerTestFixture.cs | 70 - .../Designer/IsFormDesignableTestFixture.cs | 89 - ...ifiedBaseClassFormDesignableTestFixture.cs | 74 - .../LoadAcceptButtonFormTestFixture.cs | 75 - .../Designer/LoadAccessibleRoleTestFixture.cs | 54 - .../LoadAnchorStylesFormTestFixture.cs | 68 - .../LoadBindingNavigatorTestFixture.cs | 216 -- .../LoadButtonFlatAppearanceTestFixture.cs | 82 - .../Designer/LoadColorFromArgbTestFixture.cs | 54 - .../LoadControlEventHandlerTestFixture.cs | 89 - .../Test/Designer/LoadCursorTestFixture.cs | 54 - .../Designer/LoadEventHandlerTestFixture.cs | 79 - .../LoadFileSystemWatcherTestFixture.cs | 90 - .../Test/Designer/LoadFontTestFixture.cs | 55 - .../Test/Designer/LoadFormTestFixtureBase.cs | 51 - ...FormWithBooleanPropertiesSetTestFixture.cs | 61 - ...ormWithButtonFollowedByTimerTestFixture.cs | 123 - ...rmWithSysPathAppendStatementTestFixture.cs | 77 - ...dInheritedProtectedPanelFormTestFixture.cs | 101 - ...LoadInheritedPublicPanelFormTestFixture.cs | 102 - .../LoadInheritedToolTipTestFixture.cs | 79 - .../Designer/LoadListViewFormTestFixture.cs | 96 - .../LoadLocalImageResourceTestFixture.cs | 116 - ...alVariablePropertyAssignmentTestFixture.cs | 76 - .../Designer/LoadMenuStripFormTestFixture.cs | 141 -- .../Designer/LoadMonthCalendarTestFixture.cs | 80 - .../Designer/LoadSimpleFormTestFixture.cs | 126 - .../LoadSimpleUserControlTestFixture.cs | 84 - .../Designer/LoadSplitContainerTestFixture.cs | 97 - .../LoadTableLayoutPanelTestFixture.cs | 99 - .../Designer/LoadTextBoxOnPanelTestFixture.cs | 85 - .../Test/Designer/LoadTextBoxTestFixture.cs | 114 - .../Test/Designer/LoadTimerTestFixture.cs | 78 - .../Test/Designer/LoadToolTipTestFixture.cs | 61 - .../Test/Designer/LoadTreeViewTestFixture.cs | 156 -- ...serControlWithDoublePropertyTestFixture.cs | 81 - .../Test/Designer/MergeFormTestFixture.cs | 131 -- ...ingInitializeComponentMethodTestFixture.cs | 143 -- ...LineAfterInitializeComponentTestFixture.cs | 115 - ...ctRootNamespacePassedToMergeTestFixture.cs | 141 -- .../Test/Designer/PythonBaseClassTests.cs | 86 - .../Test/Designer/PythonCodeBuilderTests.cs | 57 - .../Designer/PythonCodeDeserializerTests.cs | 123 - .../PythonControlFieldExpressionTests.cs | 293 --- ...PythonDesignerLoaderProviderTestFixture.cs | 57 - .../Designer/PythonGeneratorTestFixture.cs | 80 - .../PythonPropertyAssignmentToStringTests.cs | 132 -- .../RemoveMainMenuStripFromFormTestFixture.cs | 91 - .../TextBoxNotAddedToFormTestFixture.cs | 75 - .../Test/Designer/UnknownTypeTestFixture.cs | 94 - ...ressionOnLineWithSingleSpaceTestFixture.cs | 45 - ...sionWithImportOnPreviousLineTestFixture.cs | 46 - .../FindImportExpressionTestFixture.cs | 118 - .../FindSystemConsoleExpressionTestFixture.cs | 142 -- .../FromImportNamespaceExpressionTests.cs | 69 - .../FromSystemImportTestFixture.cs | 50 - .../ImportNamespaceExpressionTests.cs | 60 - .../IsImportExpressionTestFixture.cs | 92 - ...arseFromImportWithIdentifierTestFixture.cs | 55 - ...romImportWithoutImportedNameTestFixture.cs | 52 - .../ParseImportExpressionOnlyTestFixture.cs | 50 - ...mportSystemConsoleExpressionTestFixture.cs | 50 - .../ParseImportSystemExpressionTestFixture.cs | 50 - ...sePartialFromImportStatementTestFixture.cs | 134 -- ...ImportStatementWithTokenizerTestFixture.cs | 156 -- .../ParseSimpleImportExpressionTestFixture.cs | 69 - .../Test/Expressions/RemoveLastPartTests.cs | 61 - .../StringTextContentProviderTests.cs | 50 - .../Test/Gui/AppSettingsPanelTestFixture.cs | 214 -- .../Gui/CompilingOptionsPanelTestFixture.cs | 150 -- .../Test/Gui/DebugPythonCommandTests.cs | 73 - .../FormsDesignerDisplayBindingTestFixture.cs | 148 -- .../Test/Gui/PythonFormattingStrategyTests.cs | 334 --- .../Test/Gui/RunPythonCommandTests.cs | 91 - ...InvalidSourceSpanToErrorSinkTestFixture.cs | 45 - .../Parsing/ClassWithBaseClassTestFixture.cs | 63 - .../InvalidCastInPythonParserTestFixture.cs | 75 - .../Test/Parsing/InvalidClassTestFixture.cs | 64 - .../MethodWithParametersTestFixture.cs | 74 - ...ssingLastParameterFromMethodTestFixture.cs | 53 - ...ParseClassNestedInsideMethodTestFixture.cs | 66 - .../Parsing/ParseClassWithCtorTestFixture.cs | 105 - .../ParseClassWithMethodTestFixture.cs | 173 -- .../ParseFromMathImportAllTestFixture.cs | 63 - ...ParseFromMathImportCosAndTanTestFixture.cs | 73 - ...rseFromSysImportExitAsMyExitTestFixture.cs | 61 - .../ParseFromSysImportExitTestFixture.cs | 61 - ...seFromSysImportMissingImportTestFixture.cs | 61 - ...SysImportWithoutImportedNameTestFixture.cs | 61 - .../ParseImportMultipleModulesTestFixture.cs | 59 - .../Test/Parsing/ParseImportSysTestFixture.cs | 49 - .../Test/Parsing/ParseImportTestFixture.cs | 57 - .../ParseInvalidPythonCodeTestFixture.cs | 58 - .../ParseMethodsWithNoClassTestFixture.cs | 214 -- .../Parsing/ParseSingleClassTestFixture.cs | 101 - .../Test/Parsing/ParseTestClassTestFixture.cs | 63 - .../ParseTestClassWithBaseClassTestFixture.cs | 109 - .../Test/Parsing/ParserTestFixture.cs | 141 -- .../Parsing/PythonParserParseFieldTests.cs | 72 - .../Parsing/PythonParserParsePropertyTests.cs | 137 -- .../Test/PythonBinding.Tests.csproj | 528 ----- .../CreateNewPythonProjectTestFixture.cs | 131 -- .../ProjectBindingTestFixture.cs | 66 - .../PythonLanguageBindingTestFixture.cs | 55 - .../PythonLanguagePropertiesTests.cs | 41 - .../ImportModuleResolveResultTests.cs | 66 - .../InvalidResolveInputsTestFixture.cs | 65 - .../Test/Resolver/MemberNameTests.cs | 131 -- .../PythonLocalVariableAssignmentTests.cs | 48 - .../PythonLocalVariableResolverTests.cs | 134 -- .../Test/Resolver/PythonSelfResolverTests.cs | 64 - .../ResolveBuiltInRoundMethodTests.cs | 132 -- .../Test/Resolver/ResolveClassEventTests.cs | 97 - .../Test/Resolver/ResolveClassFieldTests.cs | 67 - .../Resolver/ResolveClassPropertyTests.cs | 113 - .../Resolver/ResolveConsoleWriteLineTests.cs | 73 - ...xitMethodFromSysImportExitAsMyExitTests.cs | 62 - ...eExitMethodFromSysImportExitTestFixture.cs | 75 - ...lveFooWindowsWithImportSystemAsFooTests.cs | 60 - .../Test/Resolver/ResolveFromImportTests.cs | 69 - ...hImportedMathModuleCompletionItemsTests.cs | 70 - .../ResolveFromSystemImportEverythingTests.cs | 71 - .../Resolver/ResolveImportsTestFixture.cs | 73 - .../ResolveLocalClassInstanceTests.cs | 195 -- .../ResolveLocalVariableMethodTests.cs | 71 - ...olveMemberWhenFieldHasNoReturnTypeTests.cs | 55 - .../ResolveMethodFromUnknownImportAllTests.cs | 52 - .../Resolver/ResolveMethodReturnValueTests.cs | 81 - ...solveMethodWhenFromImportIsUnknownTests.cs | 51 - .../ResolveMethodWhenImportIsUnknownTests.cs | 51 - ...esolveNullCtrlSpaceParseInfoTestFixture.cs | 42 - .../Resolver/ResolveRandomRandintTests.cs | 53 - .../Test/Resolver/ResolveSelfTests.cs | 130 -- .../ResolveSysModuleExitMethodTests.cs | 151 -- .../ResolveSysModuleImportedAsMySysTests.cs | 57 - .../Resolver/ResolveSysModuleTestFixture.cs | 72 - .../ResolveSysModuleUnknownMethodTests.cs | 51 - ...lveSystemConsoleOutsideClassTestFixture.cs | 47 - .../Resolver/ResolveSystemConsoleTests.cs | 120 - .../Test/Resolver/ResolveSystemImportTests.cs | 74 - .../ResolveSystemImportedAsMySystemTests.cs | 83 - .../Resolver/ResolveSystemNamespaceTests.cs | 81 - ...veSystemNamespaceWithMissingImportTests.cs | 59 - ...SystemWindowsFormsWithImportSystemTests.cs | 60 - ...solveSystemWindowsWithImportSystemTests.cs | 60 - ...solveSystemWithImportSystemWindowsTests.cs | 54 - .../ResolveTanMethodFromMathImportAllTests.cs | 78 - ...veTanMethodFromMathImportCosAndTanTests.cs | 75 - .../Test/Resolver/ResolveTestsBase.cs | 56 - ...romSystemWindowsFormsImportTextBoxTests.cs | 66 - ...romSystemWindowsFormsImportedAsFooTests.cs | 66 - ...temWindowsFormsImportedAsMyTextBoxTests.cs | 66 - .../Resolver/ResolveUnknownNamespaceTests.cs | 58 - ...lverContextDottedImportedNameMatchTests.cs | 50 - ...verContextGetModuleForImportedNameTests.cs | 62 - ...rNameImportedAsDifferentNameTestFixture.cs | 67 - ...textGetModulesThatImportEverythingTests.cs | 84 - .../Resolver/ResolverContextHasImportTests.cs | 80 - ...olverContextPartialNamespaceExistsTests.cs | 70 - ...extUnaliasImportedModuleNameTestFixture.cs | 56 - .../Python/PythonBinding/Test/Strings.resx | 123 - .../Python/PythonBinding/Test/TODO.txt | 106 - .../CreatePythonTestRunnerTestFixture.cs | 63 - .../Testing/PythonConsoleApplicationTests.cs | 120 - .../Testing/PythonStandardLibraryPathTests.cs | 93 - ...buggerRunsSelectedTestMethodTestFixture.cs | 170 -- .../PythonTestFrameworkIsTestClassTests.cs | 93 - .../PythonTestFrameworkIsTestMemberTests.cs | 83 - .../PythonTestFrameworkIsTestProjectTests.cs | 78 - .../PythonTestResultFailureTestFixture.cs | 101 - ...StackTraceLineNumberOverflowTestFixture.cs | 55 - ...PythonTestRunnerResponseFileTestFixture.cs | 193 -- ...RunnerRunsSelectedTestMethodTestFixture.cs | 247 -- .../Test/Utils/BrowseButtonInfo.cs | 41 - .../Test/Utils/BrowseFolderButtonInfo.cs | 41 - .../Utils/DerivedApplicationSettingsPanel.cs | 198 -- .../Utils/DerivedCompilingOptionsPanel.cs | 192 -- ...vedConvertProjectToPythonProjectCommand.cs | 129 - .../Test/Utils/DerivedPythonConsoleHost.cs | 71 - .../Utils/DerivedPythonDesignerGenerator.cs | 66 - ...erivedPythonFormsDesignerDisplayBinding.cs | 97 - .../Test/Utils/FakeCompletionItemProvider.cs | 39 - .../Test/Utils/FakeInsightWindow.cs | 102 - .../Test/Utils/PythonBindingAddInFile.cs | 50 - .../Utils/PythonCodeDomSerializerHelper.cs | 31 - .../Test/Utils/PythonCompletionItemsHelper.cs | 108 - .../Test/Utils/PythonComponentWalkerHelper.cs | 32 - .../Test/Utils/PythonMSBuildEngineHelper.cs | 48 - .../Test/Utils/PythonParserHelper.cs | 62 - .../Test/Utils/PythonResolverTestsHelper.cs | 88 - .../TestablePythonCodeCompletionBinding.cs | 70 - ...establePythonCodeCompletionItemProvider.cs | 32 - .../Tests/PythonCompletionItemsHelperTests.cs | 162 -- .../Utils/Tests/PythonParserHelperTests.cs | 65 - .../Python/RequiredLibraries/Chiron.exe | Bin 85504 -> 0 bytes .../RequiredLibraries/Chiron.exe.Config | 180 -- .../RequiredLibraries/DLLs/IronPython.Wpf.dll | Bin 7168 -> 0 bytes .../RequiredLibraries/IronPython.Modules.dll | Bin 732160 -> 0 bytes .../Python/RequiredLibraries/IronPython.dll | Bin 1810944 -> 0 bytes .../Python/RequiredLibraries/License.Rtf | 245 -- .../RequiredLibraries/Microsoft.Dynamic.dll | Bin 1044480 -> 0 bytes .../Microsoft.Scripting.Metadata.dll | Bin 93184 -> 0 bytes .../RequiredLibraries/Microsoft.Scripting.dll | Bin 144384 -> 0 bytes .../Python/RequiredLibraries/ipy.exe | Bin 18432 -> 0 bytes .../Python/RequiredLibraries/ipy.exe.config | 22 - .../Python/RequiredLibraries/ipyw.exe | Bin 17920 -> 0 bytes .../Python/RequiredLibraries/ipyw.exe.config | 22 - src/Setup/Files.wxs | 109 - src/Setup/Setup.wxs | 31 - 538 files changed, 49604 deletions(-) delete mode 100644 src/AddIns/BackendBindings/Python/PyWalker/AssemblyInfo.cs delete mode 100644 src/AddIns/BackendBindings/Python/PyWalker/CodeDomVisitor.cs delete mode 100644 src/AddIns/BackendBindings/Python/PyWalker/Indentation.cs delete mode 100644 src/AddIns/BackendBindings/Python/PyWalker/MainForm.Designer.cs delete mode 100644 src/AddIns/BackendBindings/Python/PyWalker/MainForm.cs delete mode 100644 src/AddIns/BackendBindings/Python/PyWalker/MainForm.resx delete mode 100644 src/AddIns/BackendBindings/Python/PyWalker/NRefactoryAstVisitor.cs delete mode 100644 src/AddIns/BackendBindings/Python/PyWalker/Program.cs delete mode 100644 src/AddIns/BackendBindings/Python/PyWalker/PyWalker.csproj delete mode 100644 src/AddIns/BackendBindings/Python/PyWalker/ResolveWalker.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Configuration/AssemblyInfo.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Python.Build.Tasks.csproj delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/SharpDevelop.Build.Python.targets delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/IPythonCompiler.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/PythonCompiler.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/PythonCompilerException.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/PythonCompilerTask.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/ResourceFile.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/Resources.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/AssemblyInfo.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/CompileResourcesTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/CompileSingleSourceFileTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/DifferentTargetTypesTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/DummyPythonCompilerTask.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/IOErrorTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/IncludeDebugInfoTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/LogicalResourceNamesTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/MainEntryPointTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/MissingMainEntryPointTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/MockPythonCompiler.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/PlatformTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/Python.Build.Tasks.Tests.csproj delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/PythonCompilerTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/RelativeReferenceTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/RelativeResourceFileTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorFileNameWithDotCharTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorNullFileNameTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorUnknownFileNameTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding.sln delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Configuration/AssemblyInfo.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Lib/__future__.py delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Lib/runpy.py delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Lib/site.py delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.addin delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.csproj delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/ApplicationSettingsPanel.xfrm delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/CompilingOptionsPanel.xfrm delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/Python.xshd delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/AddInOptions.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ApplicationSettingsPanel.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/CompilingOptionsPanel.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ConstructorInfo.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ConvertProjectToPythonProjectCommand.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ConvertToPythonMenuCommand.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/IPythonResolver.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/MemberName.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/NRefactoryToPythonConverter.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonAstWalker.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonBuiltInModuleMemberName.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClass.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassFields.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassMembers.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassResolver.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeBuilder.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeCompletionBinding.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeCompletionItemProvider.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDeserializer.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDomSerializer.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompilationUnit.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompilerError.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompilerSink.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompletionItemList.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalker.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalkerException.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsole.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsoleApplication.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsoleHost.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsolePad.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConstructor.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonControlFieldExpression.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerGenerator.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerLoader.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerLoaderProvider.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonExpression.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonExpressionFinder.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonFormattingStrategy.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonFormsDesignerDisplayBinding.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonFromImport.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImport.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportCompletion.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportExpression.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportExpressionContext.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportModuleResolveResult.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportResolver.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonInsightWindowHandler.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLanguageBinding.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLanguageProperties.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLineIndenter.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableAssignment.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableResolver.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMemberResolver.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethod.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodDefinition.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodGroupResolveResult.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodOrClassBodyRegion.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodReturnValueResolver.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonModule.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonModuleCompletionItems.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonModuleCompletionItemsFactory.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonNamespaceResolver.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonOptionsPanel.xaml delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonOptionsPanel.xaml.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonParser.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonProject.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonProjectBinding.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonProperty.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonPropertyAssignment.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonPropertyValueAssignment.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonResolver.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonResolverContext.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonSelfResolver.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonStandardLibraryPath.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonStandardModuleMethodResolveResult.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonStandardModuleMethodResolver.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonStandardModuleResolveResult.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonStandardModuleResolver.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonStandardModuleType.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonStandardModules.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonTestDebugger.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonTestFramework.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonTestResult.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonTestRunner.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonTestRunnerApplication.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonTestRunnerContext.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonTestRunnerResponseFile.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonUsingScope.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonWorkbench.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/RunDebugPythonCommand.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/RunPythonCommand.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/SendLineToPythonConsoleCommand.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/SendSelectedTextToPythonConsoleCommand.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/StringTextContentProvider.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/SysModuleCompletionItems.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Templates/ConsoleProject.xpt delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Templates/Empty.xft delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Templates/EmptyClass.xft delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Templates/EmptyForm.xft delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Templates/EmptyUserControl.xft delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Templates/FormsProject.xpt delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Templates/LibraryProject.xpt delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Templates/SilverlightApplication.xpt delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Templates/WPFApplication.xpt delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/Templates/WPFWindow.xft delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/TestRunner/sdtest.py delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Project/TestRunner/sdtestrunner.py delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/AssemblyInfo.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/CodeCompletionBindingFromImportCompletionTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/CodeCompletionBindingImportCompletionTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/FromDateTimeImportCompletionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/FromImportDotNetNamespaceCompletionTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/FromImportPythonModuleCompletionTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/FromMathLibraryImportCompletionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/FromMathLibraryImportCosMethodCompletionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/FromSysLibraryImportCompletionItemsTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/GetMethodsFromSysLibraryTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/GetPythonModulesTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/GetTypeForPythonModuleTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/ImportCompletionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/ImportEmptyNamespaceCompletionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/ImportResolveResultReturnsNoCompletionItemsIfExpressionHasIdentifierTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/ImportSubNamespaceCompletionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/MathModuleMembersInPythonContextTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/NamespaceContentsAddedToCtrlSpaceTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/PythonCodeCompletionBindingTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/PythonCodeCompletionItemProviderTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/PythonCompletionItemListTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/PythonImportExpressionContextTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/PythonInsightWindowHandlerTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/PythonSocketLibraryDocumentationTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Completion/SysModuleMembersInPythonContextTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Configuration/AddInOptionsTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Console/BuiltinCodeCompletionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Console/PythonConsoleHostTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/AddHandlerConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ArrayCastConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ArrayConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/AssignmentOperatorConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/BaseClassConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/BaseClassReferenceTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/BinaryOperatorConversionTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/BitShiftConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/BooleanConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/BreakAndContinueConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/CSharpClassWithNamespaceConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/CallConstructorWithParametersConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ClassConstructorConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ClassDestructorConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ClassFieldReferenceTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ConvertCSharpToPythonMenuCommandTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ConvertToPythonProjectCommandTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ConvertVBNetToPythonMenuCommandTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ConverterSupportedLanguageTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ElseIfStatementConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/EmptyCSharpClassConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/EventHandlerWithObjectCreationTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/FieldDeclarationWithNoInitializerTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ForLoopConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ForNextConversionTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ForeachConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ForeachConversionWithMethodCallTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/GenerateMainMethodCallTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/GenericListConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/IfBlockStatementConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/IfStatementConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/IncrementAndDecrementConversionTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/IntegerClassFieldConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/IntegerClassFieldInitializedInConstructorTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/IntegerClassFieldWithConstructorTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/IntegerMethodParameterTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/LocalVariableAssignedInConstructorTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/LocalVariableDeclarationInIfStatementTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/LocalVariableDefinitionsOnSameLineTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/LocalVariableNotInitializedTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/MethodCallInConstructorTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/MethodParameterConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/MethodReturnValueConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/MethodWithBodyConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ModulusOperatorConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/MultiLineCommentTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/MultipleFieldsOnSameLineTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/NestedClassConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/NestedIfStatementConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/NullConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ObjectCreationTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ObjectInitializerConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ObjectReferenceEqualsConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ProjectHasStartupObjectTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/PropertyConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/PropertyReferenceConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/PropertyWithGetSetStatementsTestfixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/PropertyWithGetterTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/PropertyWithSetterTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/RemoveHandlerConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/SingleClassMethodConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/SingleLineCommentConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/StaticClassReferenceTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/StaticMethodConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/SwitchStatementConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/TernaryOperatorConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ThrowExceptionConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/TryCatchFinallyConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/TypeofConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/UnaryOperatorConversionTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/UsingStatementConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/VBClassConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/VBExitConversionTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/VBStringConcatTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/WhileLoopConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/XmlDocCommentConversionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/App.ico delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/AssignmentAfterFormClassTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/CallBeginInitOnLoadTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/ConvertCustomClassUsingTypeConverterTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/CursorTypeResolutionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/DeserializeAssignmentTestFixtureBase.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/DeserializeColorFromArgbTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/DeserializeComponentAssignmentTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/DeserializeConstraintArrayTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/DeserializeDateTimeArrayTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/DeserializeLocalVariableTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/DeserializeMethodParametersTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/DeserializeStringArrayTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/DeserializeToolStripItemArrayTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/DeserializerConstructorStringArrayTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/EnabledSetUsingPropertyDescriptorTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/EventHandlerAlreadyExistsTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/EventHandlerExistsWithIncorrectParameterCountTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/FindInitializeComponentMethodTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/FormBaseClassCreatedOnLoadTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAcceptButtonFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAccessibleRoleFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAutoScaleModeFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateAutoScrollFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateBackgroundWorkerTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateButtonFlatAppearanceTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateComboBoxItemsTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateContextMenuStripTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateCursorFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateCustomCollectionItemsTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateDataSetTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateDoubleBufferedFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateEventHandlerFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateEventLogTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateFolderBrowserDialogRootFolderTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateFormColorTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateFormLocationTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateFormPaddingTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateFormResourcesTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateImageListResourcesTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateImeModeFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateInheritedFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateInheritedProtectedPanelFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateInheritedToolTipTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateListViewGroupsTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateListViewItemTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateListViewSubItemsTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateListViewWithImageListTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateLocalImageResourceTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMenuStripFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMenuStripItemsTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMinSizeFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateMonthCalendarTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateNestedPanelFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GeneratePanelFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateRichTextBoxTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateRightToLeftFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateSimpleFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTableLayoutPanelTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTextBoxFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTimerTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateToolTipFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateTreeViewTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GenerateUserControlWithNullPropertyValueTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/GeneratedControlOrderingTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/IgnoreDesignTimePropertiesTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/InsertEventHandlerTestFixtureBase.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/InsertEventHandlerWithSpaceIndentTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/InsertNewEventHandlerTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/InsertSecondEventHandlerTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/IsFormDesignableTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/IsFullyQualifiedBaseClassFormDesignableTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadAcceptButtonFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadAccessibleRoleTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadAnchorStylesFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadBindingNavigatorTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadButtonFlatAppearanceTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadColorFromArgbTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadControlEventHandlerTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadCursorTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadEventHandlerTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadFileSystemWatcherTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadFontTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadFormTestFixtureBase.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadFormWithBooleanPropertiesSetTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadFormWithButtonFollowedByTimerTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadFormWithSysPathAppendStatementTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadInheritedProtectedPanelFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadInheritedPublicPanelFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadInheritedToolTipTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadListViewFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadLocalImageResourceTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadLocalVariablePropertyAssignmentTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadMenuStripFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadMonthCalendarTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadSimpleFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadSimpleUserControlTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadSplitContainerTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadTableLayoutPanelTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadTextBoxOnPanelTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadTextBoxTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadTimerTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadToolTipTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadTreeViewTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadUserControlWithDoublePropertyTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/MergeFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/MissingInitializeComponentMethodTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/NoNewLineAfterInitializeComponentTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/ProjectRootNamespacePassedToMergeTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/PythonBaseClassTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/PythonCodeBuilderTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/PythonCodeDeserializerTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/PythonControlFieldExpressionTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/PythonDesignerLoaderProviderTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/PythonGeneratorTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/PythonPropertyAssignmentToStringTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/RemoveMainMenuStripFromFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/TextBoxNotAddedToFormTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/UnknownTypeTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/FindExpressionOnLineWithSingleSpaceTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/FindExpressionWithImportOnPreviousLineTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/FindImportExpressionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/FindSystemConsoleExpressionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/FromImportNamespaceExpressionTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/FromSystemImportTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/ImportNamespaceExpressionTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/IsImportExpressionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/ParseFromImportWithIdentifierTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/ParseFromImportWithoutImportedNameTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/ParseImportExpressionOnlyTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/ParseImportSystemConsoleExpressionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/ParseImportSystemExpressionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/ParsePartialFromImportStatementTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/ParsePartialFromImportStatementWithTokenizerTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/ParseSimpleImportExpressionTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/RemoveLastPartTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Expressions/StringTextContentProviderTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Gui/AppSettingsPanelTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Gui/CompilingOptionsPanelTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Gui/DebugPythonCommandTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Gui/FormsDesignerDisplayBindingTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Gui/PythonFormattingStrategyTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Gui/RunPythonCommandTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/AddInvalidSourceSpanToErrorSinkTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ClassWithBaseClassTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/InvalidCastInPythonParserTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/InvalidClassTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/MethodWithParametersTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/MissingLastParameterFromMethodTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseClassNestedInsideMethodTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseClassWithCtorTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseClassWithMethodTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseFromMathImportAllTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseFromMathImportCosAndTanTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseFromSysImportExitAsMyExitTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseFromSysImportExitTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseFromSysImportMissingImportTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseFromSysImportWithoutImportedNameTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseImportMultipleModulesTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseImportSysTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseImportTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseInvalidPythonCodeTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseMethodsWithNoClassTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseSingleClassTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseTestClassTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParseTestClassWithBaseClassTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/ParserTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/PythonParserParseFieldTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Parsing/PythonParserParsePropertyTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonLanguage/CreateNewPythonProjectTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonLanguage/ProjectBindingTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonLanguage/PythonLanguageBindingTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonLanguage/PythonLanguagePropertiesTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ImportModuleResolveResultTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/InvalidResolveInputsTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/MemberNameTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/PythonLocalVariableAssignmentTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/PythonLocalVariableResolverTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/PythonSelfResolverTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveBuiltInRoundMethodTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveClassEventTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveClassFieldTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveClassPropertyTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveConsoleWriteLineTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveExitMethodFromSysImportExitAsMyExitTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveExitMethodFromSysImportExitTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveFooWindowsWithImportSystemAsFooTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveFromImportTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveFromMathImportedMathModuleCompletionItemsTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveFromSystemImportEverythingTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveImportsTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveLocalClassInstanceTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveLocalVariableMethodTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveMemberWhenFieldHasNoReturnTypeTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveMethodFromUnknownImportAllTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveMethodReturnValueTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveMethodWhenFromImportIsUnknownTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveMethodWhenImportIsUnknownTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveNullCtrlSpaceParseInfoTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveRandomRandintTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSelfTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSysModuleExitMethodTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSysModuleImportedAsMySysTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSysModuleTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSysModuleUnknownMethodTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSystemConsoleOutsideClassTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSystemConsoleTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSystemImportTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSystemImportedAsMySystemTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSystemNamespaceTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSystemNamespaceWithMissingImportTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSystemWindowsFormsWithImportSystemTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSystemWindowsWithImportSystemTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSystemWithImportSystemWindowsTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveTanMethodFromMathImportAllTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveTanMethodFromMathImportCosAndTanTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveTestsBase.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveTextBoxFromSystemWindowsFormsImportTextBoxTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveTextBoxFromSystemWindowsFormsImportedAsFooTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveTextBoxFromSystemWindowsFormsImportedAsMyTextBoxTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveUnknownNamespaceTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolverContextDottedImportedNameMatchTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolverContextGetModuleForImportedNameTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolverContextGetModuleForNameImportedAsDifferentNameTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolverContextGetModulesThatImportEverythingTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolverContextHasImportTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolverContextPartialNamespaceExistsTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolverContextUnaliasImportedModuleNameTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Strings.resx delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/TODO.txt delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Testing/CreatePythonTestRunnerTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Testing/PythonConsoleApplicationTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Testing/PythonStandardLibraryPathTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Testing/PythonTestDebuggerRunsSelectedTestMethodTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Testing/PythonTestFrameworkIsTestClassTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Testing/PythonTestFrameworkIsTestMemberTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Testing/PythonTestFrameworkIsTestProjectTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Testing/PythonTestResultFailureTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Testing/PythonTestResultStackTraceLineNumberOverflowTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Testing/PythonTestRunnerResponseFileTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Testing/PythonTestRunnerRunsSelectedTestMethodTestFixture.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/BrowseButtonInfo.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/BrowseFolderButtonInfo.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/DerivedApplicationSettingsPanel.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/DerivedCompilingOptionsPanel.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/DerivedConvertProjectToPythonProjectCommand.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/DerivedPythonConsoleHost.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/DerivedPythonDesignerGenerator.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/DerivedPythonFormsDesignerDisplayBinding.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/FakeCompletionItemProvider.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/FakeInsightWindow.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/PythonBindingAddInFile.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/PythonCodeDomSerializerHelper.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/PythonCompletionItemsHelper.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/PythonComponentWalkerHelper.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/PythonMSBuildEngineHelper.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/PythonParserHelper.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/PythonResolverTestsHelper.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/TestablePythonCodeCompletionBinding.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/TestablePythonCodeCompletionItemProvider.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/Tests/PythonCompletionItemsHelperTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/Tests/PythonParserHelperTests.cs delete mode 100644 src/AddIns/BackendBindings/Python/RequiredLibraries/Chiron.exe delete mode 100644 src/AddIns/BackendBindings/Python/RequiredLibraries/Chiron.exe.Config delete mode 100644 src/AddIns/BackendBindings/Python/RequiredLibraries/DLLs/IronPython.Wpf.dll delete mode 100755 src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.Modules.dll delete mode 100755 src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.dll delete mode 100644 src/AddIns/BackendBindings/Python/RequiredLibraries/License.Rtf delete mode 100644 src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Dynamic.dll delete mode 100644 src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.Metadata.dll delete mode 100755 src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.dll delete mode 100755 src/AddIns/BackendBindings/Python/RequiredLibraries/ipy.exe delete mode 100644 src/AddIns/BackendBindings/Python/RequiredLibraries/ipy.exe.config delete mode 100644 src/AddIns/BackendBindings/Python/RequiredLibraries/ipyw.exe delete mode 100644 src/AddIns/BackendBindings/Python/RequiredLibraries/ipyw.exe.config diff --git a/src/AddIns/BackendBindings/Python/PyWalker/AssemblyInfo.cs b/src/AddIns/BackendBindings/Python/PyWalker/AssemblyInfo.cs deleted file mode 100644 index c252cee703..0000000000 --- a/src/AddIns/BackendBindings/Python/PyWalker/AssemblyInfo.cs +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -#region Using directives - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("PyWalker")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("PyWalker")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. -[assembly: ComVisible(false)] - -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all the values or you can use the default the Revision and -// Build Numbers by using the '*' as shown below: -[assembly: AssemblyVersion("0.1")] diff --git a/src/AddIns/BackendBindings/Python/PyWalker/CodeDomVisitor.cs b/src/AddIns/BackendBindings/Python/PyWalker/CodeDomVisitor.cs deleted file mode 100644 index 378ba467c9..0000000000 --- a/src/AddIns/BackendBindings/Python/PyWalker/CodeDomVisitor.cs +++ /dev/null @@ -1,441 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.Collections; -using System.Reflection; -using System.Text; - -namespace PyWalker -{ - /// - /// Visits the code dom generated by PythonProvider. - /// - public class CodeDomVisitor - { - IOutputWriter writer; - - public CodeDomVisitor(IOutputWriter writer) - { - this.writer = writer; - } - - public void Visit(CodeCompileUnit unit) - { - VisitCodeCompileUnit(unit); - } - - void VisitCodeCompileUnit(CodeCompileUnit unit) - { - WriteLine("VisitCodeCompileUnit"); - - foreach (CodeNamespace ns in unit.Namespaces) { - VisitCodeNamespace(ns); - } - } - - void VisitCodeNamespace(CodeNamespace ns) - { - WriteLine("VisitCodeNamespace: " + ns.Name); - - foreach (CodeNamespaceImport import in ns.Imports) { - VisitCodeNamespaceImport(import); - } - - using (IDisposable indentLevel = Indentation.IncrementLevel()) { - foreach (CodeTypeDeclaration type in ns.Types) { - VisitCodeTypeDeclaration(type); - } - } - } - - void VisitCodeNamespaceImport(CodeNamespaceImport import) - { - WriteLine("VisitCodeNamespaceImport: " + import.Namespace); - } - - void VisitCodeTypeDeclaration(CodeTypeDeclaration type) - { - WriteLine("VisitCodeTypeDeclaration: " + type.Name); - WriteLine(MemberAttributesToString(type.Attributes)); - - WriteLine("UserData: " + UserDataKeysToString(type.UserData)); - - WriteLine("VisitCodeTypeDeclaration: Custom attributes"); - foreach (CodeAttributeDeclaration attributeDeclaration in type.CustomAttributes) { - VisitCodeAttributeDeclaration(attributeDeclaration); - } - - WriteLine("TypeAttributes: " + TypeAttributesToString(type.TypeAttributes)); - - foreach (CodeTypeParameter parameter in type.TypeParameters) { - VisitCodeTypeParameter(parameter); - } - - using (IDisposable indentLevel = Indentation.IncrementLevel()) { - foreach (CodeTypeMember member in type.Members) { - CodeMemberMethod method = member as CodeMemberMethod; - CodeMemberField field = member as CodeMemberField; - if (method != null) { - VisitCodeMemberMethod(method); - } else if (field != null) { - VisitCodeMemberField(field); - } else { - WriteLine("Unhandled type member: " + member.GetType().Name); - } - } - } - } - - void VisitCodeTypeParameter(CodeTypeParameter parameter) - { - WriteLine("VisitCodeTypeParameter: " + parameter.Name); - } - - string TypeAttributesToString(TypeAttributes typeAttributes) - { - return typeAttributes.ToString(); - } - - void VisitCodeAttributeDeclaration(CodeAttributeDeclaration attributeDeclaration) - { - WriteLine("VisitCodeAttributeDeclaration: " + attributeDeclaration.Name); - } - - void VisitCodeMemberMethod(CodeMemberMethod method) - { - WriteLine("VisitCodeMemberMethod: " + method.Name); - WriteLine(MemberAttributesToString(method.Attributes)); - - WriteLine("UserData: " + UserDataKeysToString(method.UserData)); - foreach (CodeParameterDeclarationExpression param in method.Parameters) { - VisitCodeParameterDeclarationExpression(param); - } - - using (IDisposable indentLevel = Indentation.IncrementLevel()) { - WriteLine("Method.Statements.Count: " + method.Statements.Count); - foreach (CodeStatement statement in method.Statements) { - VisitCodeStatement(statement); - } - } - } - - void VisitCodeStatement(CodeStatement statement) - { - WriteLine("VisitCodeStatement: " + statement.GetType().Name); - CodeVariableDeclarationStatement codeVariableDeclarationStatement = statement as CodeVariableDeclarationStatement; - CodeAssignStatement codeAssignStatement = statement as CodeAssignStatement; - CodeConditionStatement codeConditionStatement = statement as CodeConditionStatement; - CodeIterationStatement codeIterationStatement = statement as CodeIterationStatement; - CodeExpressionStatement codeExpressionStatement = statement as CodeExpressionStatement; - CodeTryCatchFinallyStatement codeTryCatchFinallyStatement = statement as CodeTryCatchFinallyStatement; - if (codeVariableDeclarationStatement != null) { - VisitCodeVariableDeclarationStatement(codeVariableDeclarationStatement); - } else if (codeAssignStatement != null) { - VisitCodeAssignStatement(codeAssignStatement); - } else if (codeConditionStatement != null) { - VisitCodeConditionStatement(codeConditionStatement); - } else if (codeIterationStatement != null) { - VisitCodeIterationStatement(codeIterationStatement); - } else if (codeExpressionStatement != null) { - VisitCodeExpressionStatement(codeExpressionStatement); - } else if (codeTryCatchFinallyStatement != null) { - VisitCodeTryCatchFinallyStatement(codeTryCatchFinallyStatement); - } else { - WriteLine("Unhandled statement: " + statement.GetType().Name); - } - } - - void VisitCodeAssignStatement(CodeAssignStatement assignStatement) - { - WriteLine("VisitCodeAssignmentStatement"); - WriteLine("Left follows"); - VisitCodeExpression(assignStatement.Left); - WriteLine("Right follows"); - VisitCodeExpression(assignStatement.Right); - } - - void VisitCodeParameterDeclarationExpression(CodeParameterDeclarationExpression expression) - { - WriteLine("VisitCodeParameterDeclarationExpression: " + expression.Name); - WriteLine("BaseType: " + expression.Type.BaseType); - } - - void VisitCodeVariableDeclarationStatement(CodeVariableDeclarationStatement codeVariableDeclarationStatement) - { - WriteLine("VisitCodeVariableDeclarationStatement: " + codeVariableDeclarationStatement.Name); - WriteLine("BaseType: " + codeVariableDeclarationStatement.Type.BaseType); - WriteLine("UserData: " + UserDataKeysToString(codeVariableDeclarationStatement.UserData)); - WriteLine("InitExpression follows"); - VisitCodeExpression(codeVariableDeclarationStatement.InitExpression); - } - - void VisitCodeExpression(CodeExpression expression) - { - if (expression != null) { - WriteLine("VisitCodeExpression: " + expression.GetType().Name); - CodePrimitiveExpression primitiveExpression = expression as CodePrimitiveExpression; - CodeFieldReferenceExpression fieldReferenceExpression = expression as CodeFieldReferenceExpression; - CodeThisReferenceExpression thisReferenceExpression = expression as CodeThisReferenceExpression; - CodeObjectCreateExpression createExpression = expression as CodeObjectCreateExpression; - CodeBinaryOperatorExpression binaryExpression = expression as CodeBinaryOperatorExpression; - CodeMethodReferenceExpression methodReferenceExpression = expression as CodeMethodReferenceExpression; - CodeMethodInvokeExpression methodInvokeExpression = expression as CodeMethodInvokeExpression; - CodeVariableReferenceExpression variableReferenceExpression = expression as CodeVariableReferenceExpression; - if (primitiveExpression != null) { - VisitCodePrimitiveExpression(primitiveExpression); - } else if (fieldReferenceExpression != null) { - VisitCodeFieldReferenceExpression(fieldReferenceExpression); - } else if (thisReferenceExpression != null) { - VisitCodeThisReferenceExpression(thisReferenceExpression); - } else if (createExpression != null) { - VisitObjectCreateExpression(createExpression); - } else if (binaryExpression != null) { - VisitCodeBinaryOperatorExpression(binaryExpression); - } else if (methodReferenceExpression != null) { - VisitCodeMethodReferenceExpression(methodReferenceExpression); - } else if (methodInvokeExpression != null) { - VisitCodeMethodInvokeExpression(methodInvokeExpression); - } else if (variableReferenceExpression != null) { - VisitCodeVariableReferenceExpression(variableReferenceExpression); - } - } else { - WriteLine("VisitCodeExpression: Null"); - } - } - - void VisitCodePrimitiveExpression(CodePrimitiveExpression expression) - { - WriteLine("VisitCodePrimitiveExpression: " + expression.Value); - } - - void VisitCodeFieldReferenceExpression(CodeFieldReferenceExpression expression) - { - WriteLine("VisitFieldReferenceExpression: " + expression.FieldName); - WriteLine("Target object follows"); - VisitCodeExpression(expression.TargetObject); - } - - void VisitCodeThisReferenceExpression(CodeThisReferenceExpression expression) - { - WriteLine("VisitCodeThisReferenceExpression"); - WriteLine("UserData: " + UserDataKeysToString(expression.UserData)); - } - - void VisitCodeMemberField(CodeMemberField field) - { - WriteLine("VisitCodeMemberField: " + field.Name); - WriteLine("UserData: " + UserDataKeysToString(field.UserData)); - WriteLine(MemberAttributesToString(field.Attributes)); - WriteLine("InitExpression follows"); - VisitCodeExpression(field.InitExpression); - } - - void VisitObjectCreateExpression(CodeObjectCreateExpression createExpression) - { - WriteLine("VisitObjectCreateExpression: Type: " + createExpression.CreateType.BaseType); - foreach (CodeExpression expression in createExpression.Parameters) { - VisitCodeExpression(expression); - } - } - - void VisitCodeConditionStatement(CodeConditionStatement conditionStatement) - { - WriteLine("VisitCodeConditionStatement"); - - WriteLine("Condition follows"); - using (IDisposable indentLevel = Indentation.IncrementLevel()) { - VisitCodeExpression(conditionStatement.Condition); - } - - WriteLine("TrueStatements follow"); - using (IDisposable indentLevel = Indentation.IncrementLevel()) { - foreach (CodeStatement statement in conditionStatement.TrueStatements) { - VisitCodeStatement(statement); - } - } - - WriteLine("FalseStatements follow"); - using (IDisposable indentLevel = Indentation.IncrementLevel()) { - foreach (CodeStatement statement in conditionStatement.FalseStatements) { - VisitCodeStatement(statement); - } - } - } - - void VisitCodeBinaryOperatorExpression(CodeBinaryOperatorExpression expression) - { - WriteLine("VisitBinaryOperatorExpression: " + expression.Operator); - - WriteLine("Left follows"); - using (IDisposable currentLevel = Indentation.IncrementLevel()) { - VisitCodeExpression(expression.Left); - } - - WriteLine("Right follows"); - using (IDisposable currentLevel = Indentation.IncrementLevel()) { - VisitCodeExpression(expression.Right); - } - } - - void VisitCodeIterationStatement(CodeIterationStatement statement) - { - WriteLine("VisitIterationStatement"); - - WriteLine("Init statement follows"); - using (IDisposable currentLevel = Indentation.IncrementLevel()) { - VisitCodeStatement(statement.InitStatement); - } - - WriteLine("Increment statement follows"); - using (IDisposable currentLevel = Indentation.IncrementLevel()) { - VisitCodeStatement(statement.IncrementStatement); - } - - WriteLine("Test expression follows"); - using (IDisposable currentLevel = Indentation.IncrementLevel()) { - VisitCodeExpression(statement.TestExpression); - } - - WriteLine("Statements follow"); - using (IDisposable currentLevel = Indentation.IncrementLevel()) { - foreach (CodeStatement currentStatement in statement.Statements) { - VisitCodeStatement(currentStatement); - } - } - } - - void VisitCodeMethodInvokeExpression(CodeMethodInvokeExpression expression) - { - WriteLine("VisitCodeMethodInvokeExpression"); - using (IDisposable currentLevel = Indentation.IncrementLevel()) { - VisitCodeExpression(expression.Method); - } - } - - void VisitCodeMethodReferenceExpression(CodeMethodReferenceExpression expression) - { - WriteLine("VisitCodeMethodReferenceExpression: " + expression.MethodName); - WriteLine("Target Object follows"); - using (IDisposable currentLevel = Indentation.IncrementLevel()) { - VisitCodeExpression(expression.TargetObject); - } - } - - void VisitCodeExpressionStatement(CodeExpressionStatement statement) - { - WriteLine("VisitCodeExpressionStatement"); - using (IDisposable currentLevel = Indentation.IncrementLevel()) { - VisitCodeExpression(statement.Expression); - } - } - - void VisitCodeVariableReferenceExpression(CodeVariableReferenceExpression expression) - { - WriteLine("VisitCodeVariableReferenceExpression: " + expression.VariableName); - } - - void VisitCodeTryCatchFinallyStatement(CodeTryCatchFinallyStatement tryStatement) - { - WriteLine("VisitCodeTryCatchFinallyStatement"); - using (IDisposable currentLevel = Indentation.IncrementLevel()) { - WriteLine("Try statements follow: Count: " + tryStatement.TryStatements.Count); - foreach (CodeStatement statement in tryStatement.TryStatements) { - VisitCodeStatement(statement); - } - - WriteLine("Catch clauses follow: Count: " + tryStatement.CatchClauses.Count); - foreach (CodeCatchClause catchClause in tryStatement.CatchClauses) { - VisitCodeCatchClause(catchClause); - } - - WriteLine("Finally statements follow: Count: " + tryStatement.FinallyStatements); - foreach (CodeStatement statement in tryStatement.FinallyStatements) { - VisitCodeStatement(statement); - } - } - } - - void VisitCodeCatchClause(CodeCatchClause catchClause) - { - WriteLine("VisitCodeCatchClause"); - WriteLine("Exception caught: " + catchClause.CatchExceptionType.BaseType); - WriteLine("Exception variable: " + catchClause.LocalName); - - WriteLine("Catch statements follow: Count: " + catchClause.Statements.Count); - using (IDisposable currentLevel = Indentation.IncrementLevel()) { - foreach (CodeStatement statement in catchClause.Statements) { - VisitCodeStatement(statement); - } - } - } - - string MemberAttributesToString(MemberAttributes attributes) - { - StringBuilder s = new StringBuilder(); - s.Append("Attributes: "); - - if ((attributes & MemberAttributes.Public) == MemberAttributes.Public) { - s.Append("Public, "); - } - if ((attributes & MemberAttributes.Private) == MemberAttributes.Private) { - s.Append("Private, "); - } - if ((attributes & MemberAttributes.Family) == MemberAttributes.Family) { - s.Append("Family, "); - } - if ((attributes & MemberAttributes.Final) == MemberAttributes.Final) { - s.Append("Final, "); - } - - return s.ToString(); - } - - string UserDataKeysToString(IDictionary userData) - { - StringBuilder s = new StringBuilder(); - ICollection keys = userData.Keys; - foreach (object o in keys) { - string name = o as string; - if (name != null) { - s.Append(name); - s.Append(", "); - } - } - return s.ToString(); - } - - /// - /// Writes a line and indents it to the current level. - /// - void WriteLine(string s) - { - writer.WriteLine(GetIndent() + s); - } - - string GetIndent() - { - StringBuilder indent = new StringBuilder(); - for (int i = 0; i < Indentation.CurrentLevel; ++i) { - indent.Append('\t'); - } - return indent.ToString(); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PyWalker/Indentation.cs b/src/AddIns/BackendBindings/Python/PyWalker/Indentation.cs deleted file mode 100644 index 988d9d63c9..0000000000 --- a/src/AddIns/BackendBindings/Python/PyWalker/Indentation.cs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; - -namespace PyWalker -{ - class Indentation : IDisposable - { - static int currentLevel; - - public static int CurrentLevel { - get { return currentLevel; } - } - - Indentation() - { - currentLevel++; - } - - public void Dispose() - { - currentLevel--; - } - - public static IDisposable IncrementLevel() - { - return new Indentation(); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PyWalker/MainForm.Designer.cs b/src/AddIns/BackendBindings/Python/PyWalker/MainForm.Designer.cs deleted file mode 100644 index c0eedae1d8..0000000000 --- a/src/AddIns/BackendBindings/Python/PyWalker/MainForm.Designer.cs +++ /dev/null @@ -1,210 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -namespace PyWalker -{ - partial class MainForm - { - /// - /// Designer variable used to keep track of non-visual components. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Disposes resources used by the form. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing) { - if (components != null) { - components.Dispose(); - } - } - base.Dispose(disposing); - } - - /// - /// This method is required for Windows Forms designer support. - /// Do not change the method contents inside the source code editor. The Forms designer might - /// not be able to load this method if it was changed manually. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.splitContainer = new System.Windows.Forms.SplitContainer(); - this.codeTextBox = new System.Windows.Forms.RichTextBox(); - this.runCSharpNRefactoryVisitor = new System.Windows.Forms.Button(); - this.runNRefactoryCSharpCodeDomVisitor = new System.Windows.Forms.Button(); - this.runCSharpToPythonButton = new System.Windows.Forms.Button(); - this.runRoundTripButton = new System.Windows.Forms.Button(); - this.clearButton = new System.Windows.Forms.Button(); - this.runAstWalkerButton = new System.Windows.Forms.Button(); - this.walkerOutputTextBox = new System.Windows.Forms.RichTextBox(); - this.toolTip = new System.Windows.Forms.ToolTip(this.components); - this.splitContainer.Panel1.SuspendLayout(); - this.splitContainer.Panel2.SuspendLayout(); - this.splitContainer.SuspendLayout(); - this.SuspendLayout(); - // - // splitContainer - // - this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer.Location = new System.Drawing.Point(0, 0); - this.splitContainer.Name = "splitContainer"; - this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // splitContainer.Panel1 - // - this.splitContainer.Panel1.Controls.Add(this.codeTextBox); - // - // splitContainer.Panel2 - // - this.splitContainer.Panel2.Controls.Add(this.runCSharpNRefactoryVisitor); - this.splitContainer.Panel2.Controls.Add(this.runNRefactoryCSharpCodeDomVisitor); - this.splitContainer.Panel2.Controls.Add(this.runCSharpToPythonButton); - this.splitContainer.Panel2.Controls.Add(this.runRoundTripButton); - this.splitContainer.Panel2.Controls.Add(this.clearButton); - this.splitContainer.Panel2.Controls.Add(this.runAstWalkerButton); - this.splitContainer.Panel2.Controls.Add(this.walkerOutputTextBox); - this.splitContainer.Size = new System.Drawing.Size(515, 386); - this.splitContainer.SplitterDistance = 138; - this.splitContainer.TabIndex = 0; - // - // codeTextBox - // - this.codeTextBox.AcceptsTab = true; - this.codeTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.codeTextBox.Location = new System.Drawing.Point(0, 0); - this.codeTextBox.Name = "codeTextBox"; - this.codeTextBox.Size = new System.Drawing.Size(515, 138); - this.codeTextBox.TabIndex = 0; - this.codeTextBox.Text = ""; - this.codeTextBox.WordWrap = false; - // - // runCSharpNRefactoryVisitor - // - this.runCSharpNRefactoryVisitor.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.runCSharpNRefactoryVisitor.Location = new System.Drawing.Point(261, 218); - this.runCSharpNRefactoryVisitor.Name = "runCSharpNRefactoryVisitor"; - this.runCSharpNRefactoryVisitor.Size = new System.Drawing.Size(117, 23); - this.runCSharpNRefactoryVisitor.TabIndex = 8; - this.runCSharpNRefactoryVisitor.Text = "Visit C# AST"; - this.toolTip.SetToolTip(this.runCSharpNRefactoryVisitor, "Walks the NRefactory AST generated from the C# code."); - this.runCSharpNRefactoryVisitor.UseVisualStyleBackColor = true; - this.runCSharpNRefactoryVisitor.Click += new System.EventHandler(this.RunCSharpNRefactoryVisitorClick); - // - // runNRefactoryCSharpCodeDomVisitor - // - this.runNRefactoryCSharpCodeDomVisitor.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.runNRefactoryCSharpCodeDomVisitor.Location = new System.Drawing.Point(384, 218); - this.runNRefactoryCSharpCodeDomVisitor.Name = "runNRefactoryCSharpCodeDomVisitor"; - this.runNRefactoryCSharpCodeDomVisitor.Size = new System.Drawing.Size(127, 23); - this.runNRefactoryCSharpCodeDomVisitor.TabIndex = 7; - this.runNRefactoryCSharpCodeDomVisitor.Text = "Visit C# Code DOM"; - this.toolTip.SetToolTip(this.runNRefactoryCSharpCodeDomVisitor, "Visits the code dom generated from the C# code by the NRefactory code dom visitor" + - "."); - this.runNRefactoryCSharpCodeDomVisitor.UseVisualStyleBackColor = true; - this.runNRefactoryCSharpCodeDomVisitor.Click += new System.EventHandler(this.RunNRefactoryCSharpCodeDomVisitorClick); - // - // runCSharpToPythonButton - // - this.runCSharpToPythonButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.runCSharpToPythonButton.Location = new System.Drawing.Point(261, 192); - this.runCSharpToPythonButton.Name = "runCSharpToPythonButton"; - this.runCSharpToPythonButton.Size = new System.Drawing.Size(117, 23); - this.runCSharpToPythonButton.TabIndex = 6; - this.runCSharpToPythonButton.Text = "C# to Python"; - this.toolTip.SetToolTip(this.runCSharpToPythonButton, "Takes the code dom generated from the NRefactory parser and converts it to python" + - " using the python generator."); - this.runCSharpToPythonButton.UseVisualStyleBackColor = true; - this.runCSharpToPythonButton.Click += new System.EventHandler(this.RunCSharpToPythonClick); - // - // runRoundTripButton - // - this.runRoundTripButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.runRoundTripButton.Location = new System.Drawing.Point(138, 191); - this.runRoundTripButton.Name = "runRoundTripButton"; - this.runRoundTripButton.Size = new System.Drawing.Size(117, 23); - this.runRoundTripButton.TabIndex = 4; - this.runRoundTripButton.Text = "Round Trip"; - this.toolTip.SetToolTip(this.runRoundTripButton, "Generates a code dom from the python code and then generates python code from the" + - " code dom."); - this.runRoundTripButton.UseVisualStyleBackColor = true; - this.runRoundTripButton.Click += new System.EventHandler(this.RunRoundTripButtonClick); - // - // clearButton - // - this.clearButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.clearButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.clearButton.Location = new System.Drawing.Point(138, 218); - this.clearButton.Name = "clearButton"; - this.clearButton.Size = new System.Drawing.Size(117, 23); - this.clearButton.TabIndex = 2; - this.clearButton.Text = "Clear"; - this.clearButton.UseVisualStyleBackColor = true; - this.clearButton.Click += new System.EventHandler(this.ClearButtonClick); - // - // runAstWalkerButton - // - this.runAstWalkerButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.runAstWalkerButton.Location = new System.Drawing.Point(384, 191); - this.runAstWalkerButton.Name = "runAstWalkerButton"; - this.runAstWalkerButton.Size = new System.Drawing.Size(127, 23); - this.runAstWalkerButton.TabIndex = 1; - this.runAstWalkerButton.Text = "Visit AST"; - this.toolTip.SetToolTip(this.runAstWalkerButton, "Walks the python AST generated from the python code."); - this.runAstWalkerButton.UseVisualStyleBackColor = true; - this.runAstWalkerButton.Click += new System.EventHandler(this.RunAstWalkerButtonClick); - // - // walkerOutputTextBox - // - this.walkerOutputTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.walkerOutputTextBox.Location = new System.Drawing.Point(0, 2); - this.walkerOutputTextBox.Name = "walkerOutputTextBox"; - this.walkerOutputTextBox.Size = new System.Drawing.Size(515, 184); - this.walkerOutputTextBox.TabIndex = 0; - this.walkerOutputTextBox.Text = ""; - // - // MainForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(515, 386); - this.Controls.Add(this.splitContainer); - this.Name = "MainForm"; - this.Text = "PyWalker"; - this.splitContainer.Panel1.ResumeLayout(false); - this.splitContainer.Panel2.ResumeLayout(false); - this.splitContainer.ResumeLayout(false); - this.ResumeLayout(false); - } - private System.Windows.Forms.Button runCSharpNRefactoryVisitor; - private System.Windows.Forms.Button runNRefactoryCSharpCodeDomVisitor; - private System.Windows.Forms.Button runCSharpToPythonButton; - private System.Windows.Forms.ToolTip toolTip; - private System.Windows.Forms.Button runRoundTripButton; - private System.Windows.Forms.Button clearButton; - private System.Windows.Forms.Button runAstWalkerButton; - private System.Windows.Forms.RichTextBox walkerOutputTextBox; - private System.Windows.Forms.RichTextBox codeTextBox; - private System.Windows.Forms.SplitContainer splitContainer; - } -} diff --git a/src/AddIns/BackendBindings/Python/PyWalker/MainForm.cs b/src/AddIns/BackendBindings/Python/PyWalker/MainForm.cs deleted file mode 100644 index c532a2be29..0000000000 --- a/src/AddIns/BackendBindings/Python/PyWalker/MainForm.cs +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; -using ICSharpCode.PythonBinding; -using IronPython; -using IronPython.Compiler; -using IronPython.Compiler.Ast; -using IronPython.Runtime; -using Microsoft.CSharp; -using Microsoft.Scripting; -using Microsoft.Scripting.Runtime; -using NRefactory = ICSharpCode.NRefactory; - -namespace PyWalker -{ - public partial class MainForm : Form, IOutputWriter - { - public MainForm() - { - InitializeComponent(); - } - - public void WriteLine(string s) - { - walkerOutputTextBox.Text += String.Concat(s, "\r\n"); - } - - void RunAstWalkerButtonClick(object sender, EventArgs e) - { - try { - IronPython.Hosting.Python.CreateEngine(); - Clear(); - PythonCompilerSink sink = new PythonCompilerSink(); - SourceUnit source = DefaultContext.DefaultPythonContext.CreateFileUnit(@"D:\Temp.py", codeTextBox.Text); - CompilerContext context = new CompilerContext(source, new PythonCompilerOptions(), sink); - Parser parser = Parser.CreateParser(context, new PythonOptions()); - PythonAst ast = parser.ParseFile(false); - if (sink.Errors.Count == 0) { - ResolveWalker walker = new ResolveWalker(this); - ast.Walk(walker); - } else { - walkerOutputTextBox.Text += "\r\n"; - foreach (PythonCompilerError error in sink.Errors) { - walkerOutputTextBox.Text += error.ToString() + "\r\n"; - } - } - } catch (Exception ex) { - walkerOutputTextBox.Text = ex.ToString(); - } - } - - void ClearButtonClick(object sender, EventArgs e) - { - Clear(); - } - - void Clear() - { - walkerOutputTextBox.Text = String.Empty; - } - - /// - /// Round trips the Python code through the code DOM and back - /// to source code. - /// - void RunRoundTripButtonClick(object sender, EventArgs e) - { - try { - Clear(); -// PythonProvider provider = new PythonProvider(); -// CodeCompileUnit unit = provider.Parse(new StringReader(codeTextBox.Text)); -// StringWriter writer = new StringWriter(); -// CodeGeneratorOptions options = new CodeGeneratorOptions(); -// options.BlankLinesBetweenMembers = false; -// options.IndentString = "\t"; -// provider.GenerateCodeFromCompileUnit(unit, writer, options); -// -// walkerOutputTextBox.Text = writer.ToString(); - } catch (Exception ex) { - walkerOutputTextBox.Text = ex.ToString(); - } - } - - /// - /// Converts the C# code to a code dom using the NRefactory - /// library and then visits the code dom. - /// - void RunCSharpToPythonClick(object sender, EventArgs e) - { - try { - Clear(); - NRefactoryToPythonConverter converter = new NRefactoryToPythonConverter(NRefactory.SupportedLanguage.CSharp); - walkerOutputTextBox.Text = converter.Convert(codeTextBox.Text); - } catch (Exception ex) { - walkerOutputTextBox.Text = ex.ToString(); - } - } - - /// - /// Converts C# to python using the code dom generated by the - /// NRefactory parser. - /// - void RunNRefactoryCSharpCodeDomVisitorClick(object sender, EventArgs e) - { - try { - Clear(); - using (NRefactory.IParser parser = NRefactory.ParserFactory.CreateParser(NRefactory.SupportedLanguage.CSharp, new StringReader(codeTextBox.Text))) { - parser.ParseMethodBodies = false; - parser.Parse(); - NRefactory.Visitors.CodeDomVisitor visitor = new NRefactory.Visitors.CodeDomVisitor(); - visitor.VisitCompilationUnit(parser.CompilationUnit, null); - CodeDomVisitor codeDomVisitor = new CodeDomVisitor(this); - codeDomVisitor.Visit(visitor.codeCompileUnit); - } - } catch (Exception ex) { - walkerOutputTextBox.Text = ex.ToString(); - } - } - - void RunCSharpNRefactoryVisitorClick(object sender, EventArgs e) - { - try { - Clear(); - using (NRefactory.IParser parser = NRefactory.ParserFactory.CreateParser(NRefactory.SupportedLanguage.CSharp, new StringReader(codeTextBox.Text))) { - parser.ParseMethodBodies = false; - parser.Parse(); - NRefactoryAstVisitor visitor = new NRefactoryAstVisitor(this); - visitor.VisitCompilationUnit(parser.CompilationUnit, null); - } - } catch (Exception ex) { - walkerOutputTextBox.Text = ex.ToString(); - } - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PyWalker/MainForm.resx b/src/AddIns/BackendBindings/Python/PyWalker/MainForm.resx deleted file mode 100644 index 5cea0f6fc4..0000000000 --- a/src/AddIns/BackendBindings/Python/PyWalker/MainForm.resx +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - \ No newline at end of file diff --git a/src/AddIns/BackendBindings/Python/PyWalker/NRefactoryAstVisitor.cs b/src/AddIns/BackendBindings/Python/PyWalker/NRefactoryAstVisitor.cs deleted file mode 100644 index 4bcc991406..0000000000 --- a/src/AddIns/BackendBindings/Python/PyWalker/NRefactoryAstVisitor.cs +++ /dev/null @@ -1,678 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Text; -using ICSharpCode.NRefactory.Ast; -using ICSharpCode.NRefactory.Visitors; - -namespace PyWalker -{ - public class NRefactoryAstVisitor : AbstractAstVisitor - { - IOutputWriter writer; - - public NRefactoryAstVisitor(IOutputWriter writer) - { - this.writer = writer; - } - - public override object VisitAddHandlerStatement(AddHandlerStatement addHandlerStatement, object data) - { - return base.VisitAddHandlerStatement(addHandlerStatement, data); - } - - public override object VisitAddressOfExpression(AddressOfExpression addressOfExpression, object data) - { - return base.VisitAddressOfExpression(addressOfExpression, data); - } - - public override object VisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression, object data) - { - return base.VisitAnonymousMethodExpression(anonymousMethodExpression, data); - } - - public override object VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression, object data) - { - return base.VisitArrayCreateExpression(arrayCreateExpression, data); - } - - public override object VisitAssignmentExpression(AssignmentExpression assignmentExpression, object data) - { - WriteLine("VisitAssignmentExpression"); - return base.VisitAssignmentExpression(assignmentExpression, data); - } - - public override object VisitAttribute(ICSharpCode.NRefactory.Ast.Attribute attribute, object data) - { - return base.VisitAttribute(attribute, data); - } - - public override object VisitAttributeSection(AttributeSection attributeSection, object data) - { - return base.VisitAttributeSection(attributeSection, data); - } - - public override object VisitBaseReferenceExpression(BaseReferenceExpression baseReferenceExpression, object data) - { - return base.VisitBaseReferenceExpression(baseReferenceExpression, data); - } - - public override object VisitBinaryOperatorExpression(BinaryOperatorExpression binaryOperatorExpression, object data) - { - return base.VisitBinaryOperatorExpression(binaryOperatorExpression, data); - } - - public override object VisitBlockStatement(BlockStatement blockStatement, object data) - { - return base.VisitBlockStatement(blockStatement, data); - } - - public override object VisitBreakStatement(BreakStatement breakStatement, object data) - { - return base.VisitBreakStatement(breakStatement, data); - } - - public override object VisitCaseLabel(CaseLabel caseLabel, object data) - { - return base.VisitCaseLabel(caseLabel, data); - } - - public override object VisitCastExpression(CastExpression castExpression, object data) - { - return base.VisitCastExpression(castExpression, data); - } - - public override object VisitCatchClause(CatchClause catchClause, object data) - { - return base.VisitCatchClause(catchClause, data); - } - - public override object VisitCheckedExpression(CheckedExpression checkedExpression, object data) - { - return base.VisitCheckedExpression(checkedExpression, data); - } - - public override object VisitCheckedStatement(CheckedStatement checkedStatement, object data) - { - return base.VisitCheckedStatement(checkedStatement, data); - } - - public override object VisitClassReferenceExpression(ClassReferenceExpression classReferenceExpression, object data) - { - return base.VisitClassReferenceExpression(classReferenceExpression, data); - } - - public override object VisitCollectionInitializerExpression(CollectionInitializerExpression collectionInitializerExpression, object data) - { - WriteLine("VisitCollectionInitializerExpression"); - return base.VisitCollectionInitializerExpression(collectionInitializerExpression, data); - } - - public override object VisitCompilationUnit(CompilationUnit compilationUnit, object data) - { - WriteLine("VisitCodeCompileUnit"); - return base.VisitCompilationUnit(compilationUnit, data); - } - - public override object VisitConditionalExpression(ConditionalExpression conditionalExpression, object data) - { - return base.VisitConditionalExpression(conditionalExpression, data); - } - - public override object VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration, object data) - { - WriteLine("VisitConstructorDeclaration"); - return base.VisitConstructorDeclaration(constructorDeclaration, data); - } - - public override object VisitConstructorInitializer(ConstructorInitializer constructorInitializer, object data) - { - WriteLine("VisitConstructorInitializer"); - return base.VisitConstructorInitializer(constructorInitializer, data); - } - - public override object VisitContinueStatement(ContinueStatement continueStatement, object data) - { - return base.VisitContinueStatement(continueStatement, data); - } - - public override object VisitDeclareDeclaration(DeclareDeclaration declareDeclaration, object data) - { - return base.VisitDeclareDeclaration(declareDeclaration, data); - } - - public override object VisitDefaultValueExpression(DefaultValueExpression defaultValueExpression, object data) - { - return base.VisitDefaultValueExpression(defaultValueExpression, data); - } - - public override object VisitDelegateDeclaration(DelegateDeclaration delegateDeclaration, object data) - { - return base.VisitDelegateDeclaration(delegateDeclaration, data); - } - - public override object VisitDestructorDeclaration(DestructorDeclaration destructorDeclaration, object data) - { - return base.VisitDestructorDeclaration(destructorDeclaration, data); - } - - public override object VisitDirectionExpression(DirectionExpression directionExpression, object data) - { - return base.VisitDirectionExpression(directionExpression, data); - } - - public override object VisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) - { - return base.VisitDoLoopStatement(doLoopStatement, data); - } - - public override object VisitElseIfSection(ElseIfSection elseIfSection, object data) - { - return base.VisitElseIfSection(elseIfSection, data); - } - - public override object VisitEmptyStatement(EmptyStatement emptyStatement, object data) - { - WriteLine("VisitEmptyStatement"); - return base.VisitEmptyStatement(emptyStatement, data); - } - - public override object VisitEndStatement(EndStatement endStatement, object data) - { - return base.VisitEndStatement(endStatement, data); - } - - public override object VisitEraseStatement(EraseStatement eraseStatement, object data) - { - return base.VisitEraseStatement(eraseStatement, data); - } - - public override object VisitErrorStatement(ErrorStatement errorStatement, object data) - { - return base.VisitErrorStatement(errorStatement, data); - } - - public override object VisitEventAddRegion(EventAddRegion eventAddRegion, object data) - { - return base.VisitEventAddRegion(eventAddRegion, data); - } - - public override object VisitEventDeclaration(EventDeclaration eventDeclaration, object data) - { - return base.VisitEventDeclaration(eventDeclaration, data); - } - - public override object VisitEventRaiseRegion(EventRaiseRegion eventRaiseRegion, object data) - { - return base.VisitEventRaiseRegion(eventRaiseRegion, data); - } - - public override object VisitEventRemoveRegion(EventRemoveRegion eventRemoveRegion, object data) - { - return base.VisitEventRemoveRegion(eventRemoveRegion, data); - } - - public override object VisitExitStatement(ExitStatement exitStatement, object data) - { - return base.VisitExitStatement(exitStatement, data); - } - - public override object VisitExpressionRangeVariable(ExpressionRangeVariable expressionRangeVariable, object data) - { - return base.VisitExpressionRangeVariable(expressionRangeVariable, data); - } - - public override object VisitExpressionStatement(ExpressionStatement expressionStatement, object data) - { - WriteLine("VisitExpressionStatement"); - return base.VisitExpressionStatement(expressionStatement, data); - } - - public override object VisitFieldDeclaration(FieldDeclaration fieldDeclaration, object data) - { - WriteLine("VisitFieldDeclaration: " + fieldDeclaration.Fields[0].Name); - return base.VisitFieldDeclaration(fieldDeclaration, data); - } - - public override object VisitFixedStatement(FixedStatement fixedStatement, object data) - { - return base.VisitFixedStatement(fixedStatement, data); - } - - public override object VisitForeachStatement(ForeachStatement foreachStatement, object data) - { - return base.VisitForeachStatement(foreachStatement, data); - } - - public override object VisitForNextStatement(ForNextStatement forNextStatement, object data) - { - return base.VisitForNextStatement(forNextStatement, data); - } - - public override object VisitForStatement(ForStatement forStatement, object data) - { - return base.VisitForStatement(forStatement, data); - } - - public override object VisitGotoCaseStatement(GotoCaseStatement gotoCaseStatement, object data) - { - return base.VisitGotoCaseStatement(gotoCaseStatement, data); - } - - public override object VisitGotoStatement(GotoStatement gotoStatement, object data) - { - return base.VisitGotoStatement(gotoStatement, data); - } - - public override object VisitIdentifierExpression(IdentifierExpression identifierExpression, object data) - { - WriteLine("VisitIdentifierExpression"); - return base.VisitIdentifierExpression(identifierExpression, data); - } - - public override object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) - { - return base.VisitIfElseStatement(ifElseStatement, data); - } - - public override object VisitIndexerExpression(IndexerExpression indexerExpression, object data) - { - return base.VisitIndexerExpression(indexerExpression, data); - } - - public override object VisitInnerClassTypeReference(InnerClassTypeReference innerClassTypeReference, object data) - { - return base.VisitInnerClassTypeReference(innerClassTypeReference, data); - } - - public override object VisitInterfaceImplementation(InterfaceImplementation interfaceImplementation, object data) - { - return base.VisitInterfaceImplementation(interfaceImplementation, data); - } - - public override object VisitInvocationExpression(InvocationExpression invocationExpression, object data) - { - return base.VisitInvocationExpression(invocationExpression, data); - } - - public override object VisitLabelStatement(LabelStatement labelStatement, object data) - { - return base.VisitLabelStatement(labelStatement, data); - } - - public override object VisitLambdaExpression(LambdaExpression lambdaExpression, object data) - { - return base.VisitLambdaExpression(lambdaExpression, data); - } - - public override object VisitLocalVariableDeclaration(LocalVariableDeclaration localVariableDeclaration, object data) - { - WriteLine("VisitLocalVariableDeclaration"); - return base.VisitLocalVariableDeclaration(localVariableDeclaration, data); - } - - public override object VisitLockStatement(LockStatement lockStatement, object data) - { - return base.VisitLockStatement(lockStatement, data); - } - - public override object VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, object data) - { - WriteLine("VisitMemberReferenceExpression"); - return base.VisitMemberReferenceExpression(memberReferenceExpression, data); - } - - public override object VisitMethodDeclaration(MethodDeclaration methodDeclaration, object data) - { - WriteLine("VisitMethodDeclaration"); - using (IDisposable indentLevel = Indentation.IncrementLevel()) { - return base.VisitMethodDeclaration(methodDeclaration, data); - } - } - - public override object VisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression, object data) - { - return base.VisitNamedArgumentExpression(namedArgumentExpression, data); - } - - public override object VisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration, object data) - { - WriteLine("VisitNamespaceDeclaration"); - return base.VisitNamespaceDeclaration(namespaceDeclaration, data); - } - - public override object VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, object data) - { - WriteLine("VisitObjectCreateExpression"); - return base.VisitObjectCreateExpression(objectCreateExpression, data); - } - - public override object VisitOnErrorStatement(OnErrorStatement onErrorStatement, object data) - { - return base.VisitOnErrorStatement(onErrorStatement, data); - } - - public override object VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration, object data) - { - return base.VisitOperatorDeclaration(operatorDeclaration, data); - } - - public override object VisitOptionDeclaration(OptionDeclaration optionDeclaration, object data) - { - return base.VisitOptionDeclaration(optionDeclaration, data); - } - - public override object VisitParameterDeclarationExpression(ParameterDeclarationExpression parameterDeclarationExpression, object data) - { - return base.VisitParameterDeclarationExpression(parameterDeclarationExpression, data); - } - - public override object VisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression, object data) - { - return base.VisitParenthesizedExpression(parenthesizedExpression, data); - } - - public override object VisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression, object data) - { - return base.VisitPointerReferenceExpression(pointerReferenceExpression, data); - } - - public override object VisitPrimitiveExpression(PrimitiveExpression primitiveExpression, object data) - { - return base.VisitPrimitiveExpression(primitiveExpression, data); - } - - public override object VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration, object data) - { - return base.VisitPropertyDeclaration(propertyDeclaration, data); - } - - public override object VisitPropertyGetRegion(PropertyGetRegion propertyGetRegion, object data) - { - return base.VisitPropertyGetRegion(propertyGetRegion, data); - } - - public override object VisitPropertySetRegion(PropertySetRegion propertySetRegion, object data) - { - return base.VisitPropertySetRegion(propertySetRegion, data); - } - - public override object VisitQueryExpression(QueryExpression queryExpression, object data) - { - return base.VisitQueryExpression(queryExpression, data); - } - - public override object VisitQueryExpressionAggregateClause(QueryExpressionAggregateClause queryExpressionAggregateClause, object data) - { - return base.VisitQueryExpressionAggregateClause(queryExpressionAggregateClause, data); - } - - public override object VisitQueryExpressionDistinctClause(QueryExpressionDistinctClause queryExpressionDistinctClause, object data) - { - return base.VisitQueryExpressionDistinctClause(queryExpressionDistinctClause, data); - } - - public override object VisitQueryExpressionFromClause(QueryExpressionFromClause queryExpressionFromClause, object data) - { - return base.VisitQueryExpressionFromClause(queryExpressionFromClause, data); - } - - public override object VisitQueryExpressionGroupClause(QueryExpressionGroupClause queryExpressionGroupClause, object data) - { - return base.VisitQueryExpressionGroupClause(queryExpressionGroupClause, data); - } - - public override object VisitQueryExpressionGroupJoinVBClause(QueryExpressionGroupJoinVBClause queryExpressionGroupJoinVBClause, object data) - { - return base.VisitQueryExpressionGroupJoinVBClause(queryExpressionGroupJoinVBClause, data); - } - - public override object VisitQueryExpressionGroupVBClause(QueryExpressionGroupVBClause queryExpressionGroupVBClause, object data) - { - return base.VisitQueryExpressionGroupVBClause(queryExpressionGroupVBClause, data); - } - - public override object VisitQueryExpressionJoinClause(QueryExpressionJoinClause queryExpressionJoinClause, object data) - { - return base.VisitQueryExpressionJoinClause(queryExpressionJoinClause, data); - } - - public override object VisitQueryExpressionJoinConditionVB(QueryExpressionJoinConditionVB queryExpressionJoinConditionVB, object data) - { - return base.VisitQueryExpressionJoinConditionVB(queryExpressionJoinConditionVB, data); - } - - public override object VisitQueryExpressionJoinVBClause(QueryExpressionJoinVBClause queryExpressionJoinVBClause, object data) - { - return base.VisitQueryExpressionJoinVBClause(queryExpressionJoinVBClause, data); - } - - public override object VisitQueryExpressionLetClause(QueryExpressionLetClause queryExpressionLetClause, object data) - { - return base.VisitQueryExpressionLetClause(queryExpressionLetClause, data); - } - - public override object VisitQueryExpressionLetVBClause(QueryExpressionLetVBClause queryExpressionLetVBClause, object data) - { - return base.VisitQueryExpressionLetVBClause(queryExpressionLetVBClause, data); - } - - public override object VisitQueryExpressionOrderClause(QueryExpressionOrderClause queryExpressionOrderClause, object data) - { - return base.VisitQueryExpressionOrderClause(queryExpressionOrderClause, data); - } - - public override object VisitQueryExpressionOrdering(QueryExpressionOrdering queryExpressionOrdering, object data) - { - return base.VisitQueryExpressionOrdering(queryExpressionOrdering, data); - } - - public override object VisitQueryExpressionPartitionVBClause(QueryExpressionPartitionVBClause queryExpressionPartitionVBClause, object data) - { - return base.VisitQueryExpressionPartitionVBClause(queryExpressionPartitionVBClause, data); - } - - public override object VisitQueryExpressionSelectClause(QueryExpressionSelectClause queryExpressionSelectClause, object data) - { - return base.VisitQueryExpressionSelectClause(queryExpressionSelectClause, data); - } - - public override object VisitQueryExpressionSelectVBClause(QueryExpressionSelectVBClause queryExpressionSelectVBClause, object data) - { - return base.VisitQueryExpressionSelectVBClause(queryExpressionSelectVBClause, data); - } - - public override object VisitQueryExpressionWhereClause(QueryExpressionWhereClause queryExpressionWhereClause, object data) - { - return base.VisitQueryExpressionWhereClause(queryExpressionWhereClause, data); - } - - public override object VisitRaiseEventStatement(RaiseEventStatement raiseEventStatement, object data) - { - return base.VisitRaiseEventStatement(raiseEventStatement, data); - } - - public override object VisitReDimStatement(ReDimStatement reDimStatement, object data) - { - return base.VisitReDimStatement(reDimStatement, data); - } - - public override object VisitRemoveHandlerStatement(RemoveHandlerStatement removeHandlerStatement, object data) - { - return base.VisitRemoveHandlerStatement(removeHandlerStatement, data); - } - - public override object VisitResumeStatement(ResumeStatement resumeStatement, object data) - { - return base.VisitResumeStatement(resumeStatement, data); - } - - public override object VisitReturnStatement(ReturnStatement returnStatement, object data) - { - return base.VisitReturnStatement(returnStatement, data); - } - - public override object VisitSizeOfExpression(SizeOfExpression sizeOfExpression, object data) - { - return base.VisitSizeOfExpression(sizeOfExpression, data); - } - - public override object VisitStackAllocExpression(StackAllocExpression stackAllocExpression, object data) - { - return base.VisitStackAllocExpression(stackAllocExpression, data); - } - - public override object VisitStopStatement(StopStatement stopStatement, object data) - { - return base.VisitStopStatement(stopStatement, data); - } - - public override object VisitSwitchSection(SwitchSection switchSection, object data) - { - return base.VisitSwitchSection(switchSection, data); - } - - public override object VisitSwitchStatement(SwitchStatement switchStatement, object data) - { - return base.VisitSwitchStatement(switchStatement, data); - } - - public override object VisitTemplateDefinition(TemplateDefinition templateDefinition, object data) - { - return base.VisitTemplateDefinition(templateDefinition, data); - } - - public override object VisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression, object data) - { - WriteLine("VisitThisReferenceExpression"); - return base.VisitThisReferenceExpression(thisReferenceExpression, data); - } - - public override object VisitThrowStatement(ThrowStatement throwStatement, object data) - { - return base.VisitThrowStatement(throwStatement, data); - } - - public override object VisitTryCatchStatement(TryCatchStatement tryCatchStatement, object data) - { - return base.VisitTryCatchStatement(tryCatchStatement, data); - } - - public override object VisitTypeDeclaration(TypeDeclaration typeDeclaration, object data) - { - WriteLine("VisitTypeDeclaration"); - using (IDisposable indentLevel = Indentation.IncrementLevel()) { - return base.VisitTypeDeclaration(typeDeclaration, data); - } - } - - public override object VisitTypeOfExpression(TypeOfExpression typeOfExpression, object data) - { - return base.VisitTypeOfExpression(typeOfExpression, data); - } - - public override object VisitTypeOfIsExpression(TypeOfIsExpression typeOfIsExpression, object data) - { - return base.VisitTypeOfIsExpression(typeOfIsExpression, data); - } - - public override object VisitTypeReference(TypeReference typeReference, object data) - { - return base.VisitTypeReference(typeReference, data); - } - - public override object VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression, object data) - { - return base.VisitTypeReferenceExpression(typeReferenceExpression, data); - } - - public override object VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression, object data) - { - return base.VisitUnaryOperatorExpression(unaryOperatorExpression, data); - } - - public override object VisitUncheckedExpression(UncheckedExpression uncheckedExpression, object data) - { - return base.VisitUncheckedExpression(uncheckedExpression, data); - } - - public override object VisitUncheckedStatement(UncheckedStatement uncheckedStatement, object data) - { - return base.VisitUncheckedStatement(uncheckedStatement, data); - } - - public override object VisitUnsafeStatement(UnsafeStatement unsafeStatement, object data) - { - return base.VisitUnsafeStatement(unsafeStatement, data); - } - - public override object VisitUsing(Using @using, object data) - { - WriteLine("VisitUsing"); - return base.VisitUsing(@using, data); - } - - public override object VisitUsingDeclaration(UsingDeclaration usingDeclaration, object data) - { - WriteLine("VisitUsingDeclaration"); - return base.VisitUsingDeclaration(usingDeclaration, data); - } - - public override object VisitUsingStatement(UsingStatement usingStatement, object data) - { - WriteLine("VisitUsingStatement"); - return base.VisitUsingStatement(usingStatement, data); - } - - public override object VisitVariableDeclaration(VariableDeclaration variableDeclaration, object data) - { - WriteLine("VisitVariableDeclaration"); - return base.VisitVariableDeclaration(variableDeclaration, data); - } - - public override object VisitWithStatement(WithStatement withStatement, object data) - { - return base.VisitWithStatement(withStatement, data); - } - - public override object VisitYieldStatement(YieldStatement yieldStatement, object data) - { - return base.VisitYieldStatement(yieldStatement, data); - } - - /// - /// Writes a line and indents it to the current level. - /// - void WriteLine(string s) - { - writer.WriteLine(GetIndent() + s); - } - - string GetIndent() - { - StringBuilder indent = new StringBuilder(); - for (int i = 0; i < Indentation.CurrentLevel; ++i) { - indent.Append('\t'); - } - return indent.ToString(); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PyWalker/Program.cs b/src/AddIns/BackendBindings/Python/PyWalker/Program.cs deleted file mode 100644 index 49504f22d2..0000000000 --- a/src/AddIns/BackendBindings/Python/PyWalker/Program.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Windows.Forms; - -namespace PyWalker -{ - /// - /// Class with program entry point. - /// - internal sealed class Program - { - /// - /// Program entry point. - /// - [STAThread] - private static void Main(string[] args) - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new MainForm()); - } - - } -} diff --git a/src/AddIns/BackendBindings/Python/PyWalker/PyWalker.csproj b/src/AddIns/BackendBindings/Python/PyWalker/PyWalker.csproj deleted file mode 100644 index 50c0c251a6..0000000000 --- a/src/AddIns/BackendBindings/Python/PyWalker/PyWalker.csproj +++ /dev/null @@ -1,84 +0,0 @@ - - - - {55329704-6046-48EC-8A20-5C80B3092A63} - Debug - AnyCPU - WinExe - PyWalker - PyWalker - v4.0 - False - False - 4 - false - - - bin\Debug\ - true - Full - True - DEBUG;TRACE - Project - False - - - bin\Release\ - False - None - False - TRACE - - - False - Auto - 4194304 - AnyCPU - 4096 - - - - - ..\RequiredLibraries\IronPython.dll - - - ..\RequiredLibraries\IronPython.Modules.dll - - - ..\RequiredLibraries\Microsoft.Dynamic.dll - - - ..\RequiredLibraries\Microsoft.Scripting.dll - - - - - - - - - - - - - - MainForm.cs - - - - - - MainForm.cs - - - - - {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} - NRefactory - - - {8D732610-8FC6-43BA-94C9-7126FD7FE361} - PythonBinding - - - \ No newline at end of file diff --git a/src/AddIns/BackendBindings/Python/PyWalker/ResolveWalker.cs b/src/AddIns/BackendBindings/Python/PyWalker/ResolveWalker.cs deleted file mode 100644 index 504a313814..0000000000 --- a/src/AddIns/BackendBindings/Python/PyWalker/ResolveWalker.cs +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Text; -using IronPython; -using IronPython.Compiler; -using IronPython.Compiler.Ast; - -namespace PyWalker -{ - public interface IOutputWriter - { - void WriteLine(string s); - } - - public class ResolveWalker : PythonWalker - { - IOutputWriter writer; - - public ResolveWalker(IOutputWriter writer) - { - this.writer = writer; - } - - public override bool Walk(AndExpression node) - { - writer.WriteLine("And"); - return base.Walk(node); - } - - public override bool Walk(AssertStatement node) - { - writer.WriteLine("Assert"); - return base.Walk(node); - } - - public override bool Walk(Arg node) - { - writer.WriteLine("Arg: " + node.Name.ToString()); - return base.Walk(node); - } - - public override bool Walk(AugmentedAssignStatement node) - { - writer.WriteLine("AugmentedAssignStatement"); - return base.Walk(node); - } - - public override bool Walk(AssignmentStatement node) - { - writer.WriteLine("AssignmentStatement"); - return base.Walk(node); - } - - public override bool Walk(BackQuoteExpression node) - { - writer.WriteLine("BackQuote"); - return base.Walk(node); - } - - public override bool Walk(BinaryExpression node) - { - writer.WriteLine("Binary"); - return base.Walk(node); - } - - public override bool Walk(BreakStatement node) - { - writer.WriteLine("Breaks"); - return base.Walk(node); - } - - public override bool Walk(ClassDefinition node) - { - if (node.Bases.Count > 0) { - writer.WriteLine("Class: " + node.Name + " BaseTypes: " + GetBaseTypes(node.Bases)); - } else { - writer.WriteLine("Class: " + node.Name); - } - return base.Walk(node); - } - - public override bool Walk(ConditionalExpression node) - { - writer.WriteLine("ConditionalExpression"); - return base.Walk(node); - } - - public override bool Walk(ConstantExpression node) - { - writer.WriteLine("ConstantExpression"); - return base.Walk(node); - } - - public override bool Walk(ContinueStatement node) - { - writer.WriteLine("Continue"); - return base.Walk(node); - } - - public override bool Walk(PrintStatement node) - { - writer.WriteLine("PrintStatement"); - return base.Walk(node); - } - - public override bool Walk(FunctionDefinition node) - { - writer.WriteLine("FunctionDefinition"); - return base.Walk(node); - } - - public override bool Walk(CallExpression node) - { - writer.WriteLine("Call"); - return base.Walk(node); - } - - public override bool Walk(DictionaryExpression node) - { - writer.WriteLine("Dict"); - return base.Walk(node); - } - - public override bool Walk(DottedName node) - { - writer.WriteLine("DottedName"); - return base.Walk(node); - } - - public override bool Walk(ExpressionStatement node) - { - writer.WriteLine("Expr"); - return base.Walk(node); - } - - public override bool Walk(GlobalStatement node) - { - writer.WriteLine("Global"); - return base.Walk(node); - } - - public override bool Walk(NameExpression node) - { - writer.WriteLine("Name: " + node.Name); - return base.Walk(node); - } - - public override bool Walk(MemberExpression node) - { - writer.WriteLine("Member: " + node.Name); - return base.Walk(node); - } - - public override bool Walk(FromImportStatement node) - { - writer.WriteLine("FromImport: " + node.Root.MakeString()); - return base.Walk(node); - } - - public override bool Walk(ImportStatement node) - { - writer.WriteLine("Import: " + GetImports(node.Names)); - return base.Walk(node); - } - - public override bool Walk(IndexExpression node) - { - writer.WriteLine("Index: " + node.Index.ToString()); - return base.Walk(node); - } - - public override bool Walk(UnaryExpression node) - { - writer.WriteLine("Unary"); - return base.Walk(node); - } - - public override bool Walk(SuiteStatement node) - { - writer.WriteLine("Suite"); - return base.Walk(node); - } - - public override bool Walk(ErrorExpression node) - { - writer.WriteLine("Error"); - return base.Walk(node); - } - - public override bool Walk(IfStatement node) - { - writer.WriteLine("If"); - return base.Walk(node); - } - - string GetImports(IList names) - { - StringBuilder s = new StringBuilder(); - foreach (DottedName name in names) { - s.Append(name.MakeString()); - s.Append(','); - } - return s.ToString(); - } - - string GetBaseTypes(IList types) - { - StringBuilder s = new StringBuilder(); - foreach (Expression expression in types) { - NameExpression nameExpression = expression as NameExpression; - if (nameExpression != null) { - s.Append(nameExpression.Name.ToString()); - s.Append(','); - } - } - return s.ToString(); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Configuration/AssemblyInfo.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Configuration/AssemblyInfo.cs deleted file mode 100644 index b0b9b2682e..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Configuration/AssemblyInfo.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System.Reflection; - -// Information about this assembly is defined by the following -// attributes. -// -// change them to the information which is associated with the assembly -// you compile. - -[assembly: AssemblyTitle("Python.Build.Tasks")] -[assembly: AssemblyDescription("Provides IronPython build tasks for the IronPython addin.")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Python.Build.Tasks.csproj b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Python.Build.Tasks.csproj deleted file mode 100644 index 413080a8a7..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Python.Build.Tasks.csproj +++ /dev/null @@ -1,79 +0,0 @@ - - - - {D332F2D1-2CF1-43B7-903C-844BD5211A7E} - Debug - AnyCPU - Library - ICSharpCode.Python.Build.Tasks - Python.Build.Tasks - False - False - 4 - false - v4.0 - OnBuildSuccess - - - - - ..\..\..\..\..\..\AddIns\BackendBindings\PythonBinding\ - true - Full - True - DEBUG;TRACE - False - - - ..\..\..\..\..\..\AddIns\BackendBindings\PythonBinding\ - false - None - False - TRACE - False - - - False - Auto - 4194304 - AnyCPU - 4096 - - - - - ..\..\RequiredLibraries\IronPython.dll - - - ..\..\RequiredLibraries\IronPython.Modules.dll - - - - - 3.5 - - - ..\..\RequiredLibraries\Microsoft.Dynamic.dll - - - ..\..\RequiredLibraries\Microsoft.Scripting.dll - - - - - - - Configuration\GlobalAssemblyInfo.cs - - - - - - - - - - Always - - - \ No newline at end of file diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/SharpDevelop.Build.Python.targets b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/SharpDevelop.Build.Python.targets deleted file mode 100644 index 51171eeae5..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/SharpDevelop.Build.Python.targets +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - $(MSBuildAllProjects);$(PythonBinPath)\SharpDevelop.Build.Python.targets - .py - Python - - - - - - - - - <_Temporary Remove="@(_Temporary)" /> - - - - - - - - - - - - - - - - - - - - <_Temporary Remove="@(_Temporary)" /> - - - - - - - - - - - - CopyFilesToOutputDirectory;CopyIntermediateAssemblyDllToOutputDirectory - - - - - - - - - - - - - - - diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/IPythonCompiler.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/IPythonCompiler.cs deleted file mode 100644 index dd5e193f5f..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/IPythonCompiler.cs +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Reflection.Emit; - -namespace ICSharpCode.Python.Build.Tasks -{ - /// - /// Python compiler interface. - /// - public interface IPythonCompiler : IDisposable - { - /// - /// Gets or sets the source files to compile. - /// - IList SourceFiles { get; set; } - - /// - /// Gets or sets the filenames of the referenced assemblies. - /// - IList ReferencedAssemblies { get; set; } - - /// - /// Gets or sets the resources to be compiled. - /// - IList ResourceFiles { get; set; } - - /// - /// Executes the compiler. - /// - void Compile(); - - /// - /// Gets or sets the type of the compiled assembly (e.g. windows app, - /// console app or dll). - /// - PEFileKinds TargetKind { get; set; } - - /// - /// Gets or sets the nature of the code in the executable produced by the compiler. - /// - PortableExecutableKinds ExecutableKind { get; set; } - - /// - /// Gets or sets the machine that will be targeted by the compiler. - /// - ImageFileMachine Machine { get; set; } - - /// - /// Gets or sets the file that contains the main entry point. - /// - string MainFile { get; set; } - - /// - /// Gets or sets the output assembly filename. - /// - string OutputAssembly { get; set; } - - /// - /// Gets or sets whether the compiler should include debug - /// information in the created assembly. - /// - bool IncludeDebugInformation { get; set; } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/PythonCompiler.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/PythonCompiler.cs deleted file mode 100644 index 30d4063580..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/PythonCompiler.cs +++ /dev/null @@ -1,282 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Reflection.Emit; -using System.Resources; - -using IronPython.Hosting; -using IronPython.Runtime; -using IronPython.Runtime.Operations; -using Microsoft.Scripting; -using Microsoft.Scripting.Hosting; - -namespace ICSharpCode.Python.Build.Tasks -{ - /// - /// Wraps the IronPython.Hosting.PythonCompiler class so it - /// implements the IPythonCompiler interface. - /// - public class PythonCompiler : IPythonCompiler - { - IList sourceFiles; - IList referencedAssemblies; - IList resourceFiles; - PEFileKinds targetKind = PEFileKinds.Dll; - PortableExecutableKinds executableKind = PortableExecutableKinds.ILOnly; - ImageFileMachine machine = ImageFileMachine.I386; - string mainFile = String.Empty; - bool includeDebugInformation; - string outputAssembly = String.Empty; - - public PythonCompiler() - { - } - - public IList SourceFiles { - get { return sourceFiles; } - set { sourceFiles = value; } - } - - public IList ReferencedAssemblies { - get { return referencedAssemblies; } - set { referencedAssemblies = value; } - } - - public IList ResourceFiles { - get { return resourceFiles; } - set { resourceFiles = value; } - } - - public PEFileKinds TargetKind { - get { return targetKind; } - set { targetKind = value; } - } - - public PortableExecutableKinds ExecutableKind { - get { return executableKind; } - set { executableKind = value; } - } - - public ImageFileMachine Machine { - get { return machine; } - set { machine = value; } - } - - public string MainFile { - get { return mainFile; } - set { mainFile = value; } - } - - public string OutputAssembly { - get { return outputAssembly; } - set { outputAssembly = value; } - } - - public bool IncludeDebugInformation { - get { return includeDebugInformation; } - set { includeDebugInformation = value; } - } - - /// - /// The compilation requires us to change into the compile output folder since the - /// AssemblyBuilder.Save does not use a full path when generating the assembly. - /// - public void Compile() - { - VerifyParameters(); - - // Compile the source files to a dll first. - ScriptEngine engine = IronPython.Hosting.Python.CreateEngine(); - Dictionary dictionary = new Dictionary(); - dictionary.Add("mainModule", mainFile); - string outputAssemblyDll = Path.ChangeExtension(outputAssembly, ".dll"); - ClrModule.CompileModules(DefaultContext.Default, outputAssemblyDll, dictionary, ToStringArray(sourceFiles)); - - // Generate an executable if required. - if (targetKind != PEFileKinds.Dll) { - // Change into compilation folder. - string originalFolder = Directory.GetCurrentDirectory(); - try { - string compileFolder = Path.Combine(originalFolder, Path.GetDirectoryName(outputAssembly)); - Directory.SetCurrentDirectory(compileFolder); - GenerateExecutable(outputAssemblyDll); - } finally { - Directory.SetCurrentDirectory(originalFolder); - } - } - } - - /// - /// Verifies the compiler parameters that have been set correctly. - /// - public void VerifyParameters() - { - if ((mainFile == null) && (targetKind != PEFileKinds.Dll)) { - throw new PythonCompilerException(Resources.NoMainFileSpecified); - } - } - - public void Dispose() - { - } - - /// - /// Generates an executable from the already compiled dll. - /// - void GenerateExecutable(string outputAssemblyDll) - { - string outputAssemblyFileNameWithoutExtension = Path.GetFileNameWithoutExtension(outputAssembly); - AssemblyName assemblyName = new AssemblyName(outputAssemblyFileNameWithoutExtension); - AssemblyBuilder assemblyBuilder = PythonOps.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave); - ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(outputAssemblyFileNameWithoutExtension, assemblyName.Name + ".exe"); - TypeBuilder typeBuilder = moduleBuilder.DefineType("PythonMain", TypeAttributes.Public); - MethodBuilder mainMethod = typeBuilder.DefineMethod("Main", MethodAttributes.Public | MethodAttributes.Static, typeof(int), new Type[0]); - - MarkMainMethodAsSTA(mainMethod); - GenerateMainMethodBody(mainMethod, outputAssemblyDll); - - // Add resources. - AddResources(moduleBuilder); - - // Create executable. - typeBuilder.CreateType(); - assemblyBuilder.SetEntryPoint(mainMethod, targetKind); - assemblyBuilder.Save(assemblyName.Name + ".exe", executableKind, machine); - } - - void MarkMainMethodAsSTA(MethodBuilder mainMethod) - { - mainMethod.SetCustomAttribute(typeof(STAThreadAttribute).GetConstructor(Type.EmptyTypes), new byte[0]); - } - - void GenerateMainMethodBody(MethodBuilder mainMethod, string outputAssemblyDll) - { - ILGenerator generator = mainMethod.GetILGenerator(); - LocalBuilder exeAssemblyLocalVariable = generator.DeclareLocal(typeof(Assembly)); - LocalBuilder directoryLocalVariable = generator.DeclareLocal(typeof(string)); - LocalBuilder fileNameLocalVariable = generator.DeclareLocal(typeof(string)); - - generator.EmitCall(OpCodes.Call, typeof(Assembly).GetMethod("GetExecutingAssembly", new Type[0], new ParameterModifier[0]), null); - generator.Emit(OpCodes.Stloc_0); - - generator.Emit(OpCodes.Ldloc_0); - generator.EmitCall(OpCodes.Callvirt, typeof(Assembly).GetMethod("get_Location"), null); - generator.EmitCall(OpCodes.Call, typeof(Path).GetMethod("GetDirectoryName", new Type[] {typeof(String)}, new ParameterModifier[0]), null); - generator.Emit(OpCodes.Stloc_1); - - generator.Emit(OpCodes.Ldloc_1); - generator.Emit(OpCodes.Ldstr, Path.GetFileName(outputAssemblyDll)); - generator.EmitCall(OpCodes.Call, typeof(Path).GetMethod("Combine", new Type[] {typeof(String), typeof(String)}, new ParameterModifier[0]), null); - generator.Emit(OpCodes.Stloc_2); - - generator.Emit(OpCodes.Ldloc_2); - generator.EmitCall(OpCodes.Call, typeof(Assembly).GetMethod("LoadFile", new Type[] {typeof(String)}, new ParameterModifier[0]), null); - generator.Emit(OpCodes.Ldstr, Path.GetFileNameWithoutExtension(mainFile)); - - // Add referenced assemblies. - AddReferences(generator); - - generator.EmitCall(OpCodes.Call, typeof(PythonOps).GetMethod("InitializeModule"), new Type[0]); - generator.Emit(OpCodes.Ret); - } - - /// - /// Converts an IList into a string[]. - /// - string[] ToStringArray(IList items) - { - string[] array = new string[items.Count]; - items.CopyTo(array, 0); - return array; - } - - /// - /// Adds reference information to the IL. - /// - void AddReferences(ILGenerator generator) - { - if (referencedAssemblies.Count > 0) { - generator.Emit(OpCodes.Ldc_I4, referencedAssemblies.Count); - generator.Emit(OpCodes.Newarr, typeof(String)); - - for (int i = 0; i < referencedAssemblies.Count; ++i) { - generator.Emit(OpCodes.Dup); - generator.Emit(OpCodes.Ldc_I4, i); - string assemblyFileName = referencedAssemblies[i]; - Assembly assembly = Assembly.ReflectionOnlyLoadFrom(assemblyFileName); - generator.Emit(OpCodes.Ldstr, assembly.FullName); - generator.Emit(OpCodes.Stelem_Ref); - } - } else { - generator.Emit(OpCodes.Ldnull); - } - } - - /// - /// Embeds resources into the assembly. - /// - void AddResources(ModuleBuilder moduleBuilder) - { - foreach (ResourceFile resourceFile in resourceFiles) { - AddResource(moduleBuilder, resourceFile); - } - } - - /// - /// Embeds a single resource into the assembly. - /// - void AddResource(ModuleBuilder moduleBuilder, ResourceFile resourceFile) - { - string fileName = resourceFile.FileName; - string extension = Path.GetExtension(fileName).ToLowerInvariant(); - if (extension == ".resources") { - string fullFileName = Path.GetFileName(fileName); - IResourceWriter resourceWriter = moduleBuilder.DefineResource(fullFileName, resourceFile.Name, ResourceAttributes.Public); - AddResources(resourceWriter, fileName); - } else { - moduleBuilder.DefineManifestResource(resourceFile.Name, new FileStream(fileName, FileMode.Open), ResourceAttributes.Public); - } - } - - void AddResources(IResourceWriter resourceWriter, string fileName) - { - ResourceReader resourceReader = new ResourceReader(fileName); - using (resourceReader) { - IDictionaryEnumerator enumerator = resourceReader.GetEnumerator(); - while (enumerator.MoveNext()) { - string key = enumerator.Key as string; - Stream resourceStream = enumerator.Value as Stream; - if (resourceStream != null) { - BinaryReader reader = new BinaryReader(resourceStream); - MemoryStream stream = new MemoryStream(); - byte[] bytes = reader.ReadBytes((int)resourceStream.Length); - stream.Write(bytes, 0, bytes.Length); - resourceWriter.AddResource(key, stream); - } else { - resourceWriter.AddResource(key, enumerator.Value); - } - } - } - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/PythonCompilerException.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/PythonCompilerException.cs deleted file mode 100644 index 71535e8464..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/PythonCompilerException.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; - -namespace ICSharpCode.Python.Build.Tasks -{ - public class PythonCompilerException : ApplicationException - { - public PythonCompilerException(string message) : base(message) - { - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/PythonCompilerTask.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/PythonCompilerTask.cs deleted file mode 100644 index 7c8ce1da92..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/PythonCompilerTask.cs +++ /dev/null @@ -1,313 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Reflection.Emit; -using IronPython.Hosting; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using Microsoft.Scripting; - -namespace ICSharpCode.Python.Build.Tasks -{ - /// - /// Python compiler task. - /// - public class PythonCompilerTask : Task - { - IPythonCompiler compiler; - ITaskItem[] sources; - ITaskItem[] references; - ITaskItem[] resources; - string targetType; - string mainFile; - string outputAssembly; - bool emitDebugInformation; - string platform; - - public PythonCompilerTask() - : this(new PythonCompiler()) - { - } - - public PythonCompilerTask(IPythonCompiler compiler) - { - this.compiler = compiler; - } - - /// - /// Gets or sets the source files that will be compiled. - /// - public ITaskItem[] Sources { - get { return sources; } - set { sources = value; } - } - - /// - /// Gets or sets the resources to be compiled. - /// - public ITaskItem[] Resources { - get { return resources; } - set { resources = value; } - } - - /// - /// Gets or sets the output assembly type. - /// - public string TargetType { - get { return targetType; } - set { targetType = value; } - } - - /// - /// Gets or sets the file that contains the main entry point. - /// - public string MainFile { - get { return mainFile; } - set { mainFile = value; } - } - - /// - /// Gets or sets the output assembly filename. - /// - public string OutputAssembly { - get { return outputAssembly; } - set { outputAssembly = value; } - } - - /// - /// Gets or sets the platform that will be targeted by the compiler (e.g. x86). - /// - public string Platform { - get { return platform; } - set { platform = value; } - } - - /// - /// Gets or sets whether the compiler should include debug - /// information in the created assembly. - /// - public bool EmitDebugInformation { - get { return emitDebugInformation; } - set { emitDebugInformation = value; } - } - - /// - /// Gets or sets the assembly references. - /// - public ITaskItem[] References { - get { return references; } - set { references = value; } - } - - /// - /// Executes the compiler. - /// - public override bool Execute() - { - using (compiler) { - // Set what sort of assembly we are generating - // (e.g. WinExe, Exe or Dll) - compiler.TargetKind = GetPEFileKind(targetType); - - compiler.ExecutableKind = GetExecutableKind(platform); - compiler.Machine = GetMachine(platform); - - compiler.SourceFiles = GetFiles(sources, false); - compiler.ReferencedAssemblies = GetFiles(references, true); - compiler.ResourceFiles = GetResourceFiles(resources); - compiler.MainFile = mainFile; - compiler.OutputAssembly = outputAssembly; - compiler.IncludeDebugInformation = emitDebugInformation; - - // Compile the code. - try { - compiler.Compile(); - return true; - } catch (SyntaxErrorException ex) { - LogSyntaxError(ex); - } catch (IOException ex) { - LogError(ex.Message); - } catch (PythonCompilerException ex) { - LogError(ex.Message); - } - } - return false; - } - - /// - /// Gets the current folder where this task is being executed from. - /// - protected virtual string GetCurrentFolder() - { - return Directory.GetCurrentDirectory(); - } - - /// - /// Logs any error message that occurs during compilation. Default implementation - /// is to use the MSBuild task's base.Log.LogError(...) - /// - protected virtual void LogError(string message, string errorCode, string file, int lineNumber, int columnNumber, int endLineNumber, int endColumnNumber) - { - Log.LogError(null, errorCode, null, file, lineNumber, columnNumber, endLineNumber, endColumnNumber, message); - } - - void LogError(string message) - { - LogError(message, null, null, 0, 0, 0, 0); - } - - void LogSyntaxError(SyntaxErrorException ex) - { - string fileName = GetFileName(ex, sources); - LogError(ex.Message, ex.ErrorCode.ToString(), fileName, ex.Line, ex.Column, ex.RawSpan.End.Line, ex.RawSpan.End.Column); - } - - /// - /// Matches the syntax exception SourcePath against filenames being compiled. The - /// syntax exception only contains the file name without its path and without its file extension. - /// - string GetFileName(SyntaxErrorException ex, ITaskItem[] sources) - { - if (ex.SourcePath == null) { - return null; - } - - string sourcePath = ex.SourcePath.Replace('\\', '.'); - foreach (ITaskItem item in sources) { - string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(item.ItemSpec); - if (fileNameWithoutExtension == sourcePath) { - return item.ItemSpec; - } - } - string fileName = sourcePath + ".py"; - return Path.Combine(GetCurrentFolder(), fileName); - } - - /// - /// Maps from the target type string to the PEFileKind - /// needed by the compiler. - /// - static PEFileKinds GetPEFileKind(string targetType) - { - if (targetType != null) { - switch (targetType.ToLowerInvariant()) { - case "winexe": - return PEFileKinds.WindowApplication; - case "library": - return PEFileKinds.Dll; - } - } - return PEFileKinds.ConsoleApplication; - } - - /// - /// Converts from an array of ITaskItems to a list of - /// strings, each containing the ITaskItem filename. - /// - IList GetFiles(ITaskItem[] taskItems, bool fullPath) - { - List files = new List(); - if (taskItems != null) { - foreach (ITaskItem item in taskItems) { - string fileName = item.ItemSpec; - if (fullPath) { - fileName = GetFullPath(item.ItemSpec); - } - files.Add(fileName); - } - } - return files; - } - - /// - /// Converts the string into a PortableExecutableKinds enum. - /// - PortableExecutableKinds GetExecutableKind(string platform) - { - switch (platform) { - case "x86": - return PortableExecutableKinds.ILOnly | PortableExecutableKinds.Required32Bit; - case "Itanium": - case "x64": - return PortableExecutableKinds.ILOnly | PortableExecutableKinds.PE32Plus; - } - return PortableExecutableKinds.ILOnly; - } - - /// - /// Gets the machine associated with a PortalExecutableKind. - /// - ImageFileMachine GetMachine(string platform) - { - switch (platform) { - case "Itanium": - return ImageFileMachine.IA64; - case "x64": - return ImageFileMachine.AMD64; - } - return ImageFileMachine.I386; - } - - /// - /// Converts from an array of ITaskItems to a list of - /// ResourceFiles. - /// - /// - /// The resource name is the filename without any preceding - /// path information. - /// - IList GetResourceFiles(ITaskItem[] taskItems) - { - List files = new List(); - if (taskItems != null) { - foreach (ITaskItem item in taskItems) { - string resourceFileName = GetFullPath(item.ItemSpec); - string resourceName = GetResourceName(item); - ResourceFile resourceFile = new ResourceFile(resourceName, resourceFileName); - files.Add(resourceFile); - } - } - return files; - } - - string GetResourceName(ITaskItem item) - { - string logicalResourceName = item.GetMetadata("LogicalName"); - if (!String.IsNullOrEmpty(logicalResourceName)) { - return logicalResourceName; - } - return Path.GetFileName(item.ItemSpec); - } - - /// - /// Takes a relative path to a file and turns it into the full path using the current folder - /// as the base directory. - /// - string GetFullPath(string fileName) - { - if (!Path.IsPathRooted(fileName)) { - return Path.GetFullPath(Path.Combine(GetCurrentFolder(), fileName)); - } - return fileName; - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/ResourceFile.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/ResourceFile.cs deleted file mode 100644 index 77c82cec70..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/ResourceFile.cs +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; - -namespace ICSharpCode.Python.Build.Tasks -{ - /// - /// Stores the name and filename of a resource that will be embedded by the PythonCompiler. - /// - public class ResourceFile - { - string name; - string fileName; - bool isPublic; - - public ResourceFile(string name, string fileName) : this(name, fileName, true) - { - } - - public ResourceFile(string name, string fileName, bool isPublic) - { - this.name = name; - this.fileName = fileName; - this.isPublic = isPublic; - } - - public string Name { - get { return name; } - set { name = value; } - } - - public string FileName { - get { return fileName; } - set { fileName = value; } - } - - public bool IsPublic { - get { return isPublic; } - set { isPublic = value; } - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/Resources.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/Resources.cs deleted file mode 100644 index 4fc6db072d..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Project/Src/Resources.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; - -namespace ICSharpCode.Python.Build.Tasks -{ - public class Resources - { - Resources() - { - } - - /// - /// No main file specified when trying to compile an application - /// - public static string NoMainFileSpecified { - get { return "No main file specified."; } - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/AssemblyInfo.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/AssemblyInfo.cs deleted file mode 100644 index 7dffcdad0b..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/AssemblyInfo.cs +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Information about this assembly is defined by the following -// attributes. -// -// change them to the information which is associated with the assembly -// you compile. - -[assembly: AssemblyTitle("Python.Build.Tasks.Tests")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Python.Build.Tasks.Tests")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. -[assembly: ComVisible(false)] - -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all values by your own or you can build default build and revision -// numbers with the '*' character (the default): - -[assembly: AssemblyVersion("0.3")] diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/CompileResourcesTestFixture.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/CompileResourcesTestFixture.cs deleted file mode 100644 index 358140d077..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/CompileResourcesTestFixture.cs +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection.Emit; -using ICSharpCode.Python.Build.Tasks; -using IronPython.Hosting; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - /// - /// Tests that resources are compiled using the PythonCompilerTask. - /// - [TestFixture] - public class CompileResourcesTestFixture - { - MockPythonCompiler mockCompiler; - TaskItem resourceTaskItem; - ResourceFile resourceFile; - PythonCompilerTask compiler; - - [SetUp] - public void Init() - { - mockCompiler = new MockPythonCompiler(); - compiler = new PythonCompilerTask(mockCompiler); - TaskItem sourceTaskItem = new TaskItem("test.py"); - - compiler.Sources = new ITaskItem[] {sourceTaskItem}; - compiler.TargetType = "Exe"; - compiler.OutputAssembly = "test.exe"; - - resourceTaskItem = new TaskItem(@"C:\Projects\Test\Test.resources"); - compiler.Resources = new ITaskItem[] {resourceTaskItem}; - - compiler.Execute(); - - if (mockCompiler.ResourceFiles != null && mockCompiler.ResourceFiles.Count > 0) { - resourceFile = mockCompiler.ResourceFiles[0]; - } - } - - [Test] - public void OneResourceFile() - { - Assert.AreEqual(1, mockCompiler.ResourceFiles.Count); - } - - [Test] - public void ResourceFileName() - { - Assert.AreEqual(resourceTaskItem.ItemSpec, resourceFile.FileName); - } - - /// - /// The resource name should be the same as the filename without - /// any preceding path information. - /// - [Test] - public void ResourceName() - { - Assert.AreEqual("Test.resources", resourceFile.Name); - } - - [Test] - public void CompilerTaskResources() - { - ITaskItem[] resources = compiler.Resources; - Assert.AreEqual(resourceTaskItem, resources[0]); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/CompileSingleSourceFileTestFixture.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/CompileSingleSourceFileTestFixture.cs deleted file mode 100644 index 3fd9e653c3..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/CompileSingleSourceFileTestFixture.cs +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection.Emit; -using ICSharpCode.Python.Build.Tasks; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - /// - /// Tests that the python compiler task compiles a single source file. - /// - [TestFixture] - public class CompileSingleSourceFileTestFixture - { - MockPythonCompiler mockCompiler; - TaskItem sourceTaskItem; - TaskItem systemXmlReferenceTaskItem; - TaskItem systemDataReferenceTaskItem; - PythonCompilerTask compiler; - bool success; - - [SetUp] - public void Init() - { - mockCompiler = new MockPythonCompiler(); - compiler = new PythonCompilerTask(mockCompiler); - sourceTaskItem = new TaskItem("test.py"); - compiler.Sources = new ITaskItem[] {sourceTaskItem}; - compiler.TargetType = "Exe"; - compiler.OutputAssembly = "test.exe"; - - systemDataReferenceTaskItem = new TaskItem(@"C:\Windows\Microsoft.NET\Framework\2.0\System.Data.dll"); - systemXmlReferenceTaskItem = new TaskItem(@"C:\Windows\Microsoft.NET\Framework\2.0\System.Xml.dll"); - compiler.References = new ITaskItem[] {systemDataReferenceTaskItem, systemXmlReferenceTaskItem}; - - success = compiler.Execute(); - } - - [Test] - public void CompilationSucceeded() - { - Assert.IsTrue(success); - } - - [Test] - public void OneSourceFile() - { - Assert.AreEqual(1, mockCompiler.SourceFiles.Count); - } - - [Test] - public void SourceFileName() - { - Assert.AreEqual("test.py", mockCompiler.SourceFiles[0]); - } - - [Test] - public void IsCompileCalled() - { - Assert.IsTrue(mockCompiler.CompileCalled); - } - - [Test] - public void IsDisposeCalled() - { - Assert.IsTrue(mockCompiler.DisposeCalled); - } - - [Test] - public void TargetKindIsExe() - { - Assert.AreEqual(PEFileKinds.ConsoleApplication, mockCompiler.TargetKind); - } - - [Test] - public void OutputAssembly() - { - Assert.AreEqual("test.exe", mockCompiler.OutputAssembly); - } - - [Test] - public void DebugInfo() - { - Assert.IsFalse(mockCompiler.IncludeDebugInformation); - } - - [Test] - public void TwoReferences() - { - Assert.AreEqual(2, mockCompiler.ReferencedAssemblies.Count); - } - - [Test] - public void PythonCompilerTaskReferences() - { - ITaskItem[] references = compiler.References; - Assert.AreEqual(systemDataReferenceTaskItem, references[0]); - Assert.AreEqual(systemXmlReferenceTaskItem, references[1]); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/DifferentTargetTypesTestFixture.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/DifferentTargetTypesTestFixture.cs deleted file mode 100644 index 41b3c36ff1..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/DifferentTargetTypesTestFixture.cs +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection.Emit; -using ICSharpCode.Python.Build.Tasks; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - /// - /// Tests that the PythonCompiler correctly compiles to a - /// windows app when the TargetType is set to WinExe". - /// - [TestFixture] - public class DifferentTargetTypesTestFixture - { - MockPythonCompiler mockCompiler; - TaskItem sourceTaskItem; - PythonCompilerTask compilerTask; - - [SetUp] - public void Init() - { - mockCompiler = new MockPythonCompiler(); - compilerTask = new PythonCompilerTask(mockCompiler); - sourceTaskItem = new TaskItem("test.py"); - compilerTask.Sources = new ITaskItem[] {sourceTaskItem}; - } - - [Test] - public void CompiledToWindowsApp() - { - compilerTask.TargetType = "WinExe"; - compilerTask.Execute(); - - Assert.AreEqual(PEFileKinds.WindowApplication, mockCompiler.TargetKind); - } - - [Test] - public void CompiledToWindowsAppWhenTargetTypeLowerCase() - { - compilerTask.TargetType = "winexe"; - compilerTask.Execute(); - - Assert.AreEqual(PEFileKinds.WindowApplication, mockCompiler.TargetKind); - } - - [Test] - public void CompiledToDll() - { - compilerTask.TargetType = "Library"; - compilerTask.Execute(); - - Assert.AreEqual(PEFileKinds.Dll, mockCompiler.TargetKind); - } - - [Test] - public void NullTargetTypeCompilesToConsoleApp() - { - compilerTask.TargetType = null; - compilerTask.Execute(); - - Assert.AreEqual(PEFileKinds.ConsoleApplication, mockCompiler.TargetKind); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/DummyPythonCompilerTask.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/DummyPythonCompilerTask.cs deleted file mode 100644 index 9720747f22..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/DummyPythonCompilerTask.cs +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.Python.Build.Tasks; - -namespace Python.Build.Tasks.Tests -{ - /// - /// Overrides the GetCurrentFolder to return a predefined string. - /// - public class DummyPythonCompilerTask : PythonCompilerTask - { - string currentFolder; - string loggedErrorMessage; - string loggedErrorCode; - string loggedErrorFile; - int loggedStartColumn = -1; - int loggedStartLine = -1; - int loggedEndLine = -1; - int loggedEndColumn = -1; - - public DummyPythonCompilerTask(IPythonCompiler compiler, string currentFolder) - : base(compiler) - { - this.currentFolder = currentFolder; - } - - /// - /// Gets the error message passed to the LogError method. - /// - public string LoggedErrorMessage { - get { return loggedErrorMessage; } - } - - /// - /// Gets the error code passed to the LogError method. - /// - public string LoggedErrorCode { - get { return loggedErrorCode; } - } - - /// - /// Gets the file passed to the LogError method. - /// - public string LoggedErrorFile { - get { return loggedErrorFile; } - } - - /// - /// Gets the start line passed to the LogError method. - /// - public int LoggedStartLine { - get { return loggedStartLine; } - } - - /// - /// Gets the end line passed to the LogError method. - /// - public int LoggedEndLine { - get { return loggedEndLine; } - } - - /// - /// Gets the start column passed to the LogError method. - /// - public int LoggedStartColumn { - get { return loggedStartColumn; } - } - - /// - /// Gets the end column passed to the LogError method. - /// - public int LoggedEndColumn { - get { return loggedEndColumn; } - } - - protected override string GetCurrentFolder() - { - return currentFolder; - } - - protected override void LogError(string message, string errorCode, string file, int lineNumber, int columnNumber, int endLineNumber, int endColumnNumber) - { - loggedErrorMessage = message; - loggedErrorCode = errorCode; - loggedErrorFile = file; - loggedStartColumn = columnNumber; - loggedStartLine = lineNumber; - loggedEndColumn = endColumnNumber; - loggedEndLine = endLineNumber; - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/IOErrorTestFixture.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/IOErrorTestFixture.cs deleted file mode 100644 index 1c459b2e8b..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/IOErrorTestFixture.cs +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection; -using System.Reflection.Emit; -using IronPython.Runtime; -using IronPython.Runtime.Operations; -using ICSharpCode.Python.Build.Tasks; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using Microsoft.Scripting; -using Microsoft.Scripting.Hosting; -using Microsoft.Scripting.Runtime; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - /// - /// Tests that an IOException is caught and logged. - /// - [TestFixture] - public class IOErrorTestFixture - { - MockPythonCompiler mockCompiler; - DummyPythonCompilerTask compiler; - bool success; - - [SetUp] - public void Init() - { - mockCompiler = new MockPythonCompiler(); - compiler = new DummyPythonCompilerTask(mockCompiler, @"C:\Projects\MyProject"); - compiler.TargetType = "Exe"; - compiler.OutputAssembly = "test.exe"; - - TaskItem sourceFile = new TaskItem(@"D:\Projects\MyProject\test.py"); - compiler.Sources = new ITaskItem[] {sourceFile}; - - mockCompiler.ThrowExceptionAtCompile = PythonOps.IOError("Could not find main file test.py"); - - success = compiler.Execute(); - } - - [Test] - public void ExecuteFailed() - { - Assert.IsFalse(success); - } - - [Test] - public void IsExceptionMessageLogged() - { - Assert.AreEqual("Could not find main file test.py", compiler.LoggedErrorMessage); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/IncludeDebugInfoTestFixture.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/IncludeDebugInfoTestFixture.cs deleted file mode 100644 index ea6d5edfd7..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/IncludeDebugInfoTestFixture.cs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection.Emit; -using ICSharpCode.Python.Build.Tasks; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - /// - /// Tests that the compiler includes debug info in the - /// generated assembly. - /// - [TestFixture] - public class IncludeDebugInfoTestFixture - { - MockPythonCompiler mockCompiler; - TaskItem sourceTaskItem; - PythonCompilerTask compiler; - - [SetUp] - public void Init() - { - mockCompiler = new MockPythonCompiler(); - compiler = new PythonCompilerTask(mockCompiler); - sourceTaskItem = new TaskItem("test.py"); - compiler.Sources = new ITaskItem[] {sourceTaskItem}; - compiler.TargetType = "Exe"; - compiler.OutputAssembly = "test.exe"; - compiler.EmitDebugInformation = true; - - compiler.Execute(); - } - - [Test] - public void DebugInfoIncluded() - { - Assert.IsTrue(mockCompiler.IncludeDebugInformation); - } - - [Test] - public void PythonCompilerTaskTargetType() - { - Assert.AreEqual("Exe", compiler.TargetType); - } - - [Test] - public void PythonCompilerTaskOutputAssembly() - { - Assert.AreEqual("test.exe", compiler.OutputAssembly); - } - - [Test] - public void PythonCompilerTaskEmitDebugInfo() - { - Assert.AreEqual(true, compiler.EmitDebugInformation); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/LogicalResourceNamesTests.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/LogicalResourceNamesTests.cs deleted file mode 100644 index f23443a7f7..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/LogicalResourceNamesTests.cs +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.Python.Build.Tasks; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - [TestFixture] - public class LogicalResourceNamesTests - { - MockPythonCompiler mockCompiler; - PythonCompilerTask compilerTask; - - void CreatePythonCompilerTask() - { - mockCompiler = new MockPythonCompiler(); - compilerTask = new PythonCompilerTask(mockCompiler); - compilerTask.TargetType = "Exe"; - compilerTask.OutputAssembly = "test.exe"; - } - - [Test] - public void Execute_ResourceHasLogicalNameSetInTaskItemMetadata_ResourceNamePassedToCompilerUsesLogicalName() - { - CreatePythonCompilerTask(); - - TaskItem resourceTaskItem = new TaskItem("test.xaml"); - resourceTaskItem.SetMetadata("LogicalName", "MyLogicalResourceName"); - compilerTask.Resources = new ITaskItem[] {resourceTaskItem}; - compilerTask.Execute(); - - ResourceFile resourceFile = mockCompiler.ResourceFiles[0]; - string resourceName = resourceFile.Name; - - string expectedResourceName = "MyLogicalResourceName"; - - Assert.AreEqual(expectedResourceName, resourceName); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/MainEntryPointTestFixture.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/MainEntryPointTestFixture.cs deleted file mode 100644 index c1b3290aba..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/MainEntryPointTestFixture.cs +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection.Emit; -using ICSharpCode.Python.Build.Tasks; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - /// - /// Tests that the main entry point is set in the PythonCompiler - /// by the PythonCompilerTask. - /// - [TestFixture] - public class MainEntryPointTestFixture - { - MockPythonCompiler mockCompiler; - PythonCompilerTask compilerTask; - TaskItem mainTaskItem; - TaskItem classTaskItem; - - [SetUp] - public void Init() - { - mockCompiler = new MockPythonCompiler(); - compilerTask = new PythonCompilerTask(mockCompiler); - mainTaskItem = new TaskItem("main.py"); - classTaskItem = new TaskItem("class1.py"); - compilerTask.Sources = new ITaskItem[] {mainTaskItem, classTaskItem}; - compilerTask.MainFile = "main.py"; - compilerTask.Execute(); - } - - [Test] - public void MainFile() - { - Assert.AreEqual("main.py", mockCompiler.MainFile); - } - - [Test] - public void TaskMainFile() - { - Assert.AreEqual("main.py", compilerTask.MainFile); - } - - [Test] - public void TaskSources() - { - ITaskItem[] sources = compilerTask.Sources; - Assert.AreEqual(sources[0], mainTaskItem); - Assert.AreEqual(sources[1], classTaskItem); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/MissingMainEntryPointTestFixture.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/MissingMainEntryPointTestFixture.cs deleted file mode 100644 index fe9e37e90c..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/MissingMainEntryPointTestFixture.cs +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection.Emit; -using ICSharpCode.Python.Build.Tasks; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - /// - /// Tests that an error is reported when the mainFile is missing and we are trying to compile - /// an executable. - /// - [TestFixture] - public class MissingMainEntryPointTestFixture - { - MockPythonCompiler mockCompiler; - DummyPythonCompilerTask compiler; - bool success; - - [SetUp] - public void Init() - { - mockCompiler = new MockPythonCompiler(); - compiler = new DummyPythonCompilerTask(mockCompiler, @"C:\Projects\MyProject"); - compiler.TargetType = "Exe"; - compiler.OutputAssembly = "test.exe"; - - TaskItem sourceFile = new TaskItem(@"D:\Projects\MyProject\test.py"); - compiler.Sources = new ITaskItem[] {sourceFile}; - - mockCompiler.ThrowExceptionAtCompile = new PythonCompilerException("Missing main file."); - - success = compiler.Execute(); - } - - [Test] - public void ExecuteFailed() - { - Assert.IsFalse(success); - } - - [Test] - public void IsExceptionMessageLogged() - { - Assert.AreEqual("Missing main file.", compiler.LoggedErrorMessage); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/MockPythonCompiler.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/MockPythonCompiler.cs deleted file mode 100644 index 9ce7f6e6e3..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/MockPythonCompiler.cs +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Reflection.Emit; -using ICSharpCode.Python.Build.Tasks; -using IronPython.Hosting; - -namespace Python.Build.Tasks.Tests -{ - /// - /// Implements the IPythonCompiler interface so the - /// PythonCompiler task can be tested. - /// - public class MockPythonCompiler : IPythonCompiler - { - IList sourceFiles; - bool compileCalled; - bool disposeCalled; - PEFileKinds targetKind; - PortableExecutableKinds executableKind; - ImageFileMachine machine; - string mainFile; - string outputAssembly; - bool includeDebugInformation; - IList referencedAssemblies; - IList resourceFiles; - Exception throwExceptionAtCompile; - - public MockPythonCompiler() - { - } - - /// - /// Gets or sets the source files to compiler. - /// - public IList SourceFiles { - get { return sourceFiles; } - set { sourceFiles = value; } - } - - /// - /// Gets or sets the filenames of the referenced assemblies. - /// - public IList ReferencedAssemblies { - get { return referencedAssemblies; } - set { referencedAssemblies = value; } - } - - /// - /// Gets or sets the resources to be compiled. - /// - public IList ResourceFiles { - get { return resourceFiles; } - set { resourceFiles = value; } - } - - /// - /// Gets or sets the exception that will be thrown when the Compile method is called. - /// - public Exception ThrowExceptionAtCompile { - get { return throwExceptionAtCompile; } - set { throwExceptionAtCompile = value; } - } - - /// - /// Compiles the source code. - /// - public void Compile() - { - compileCalled = true; - - if (throwExceptionAtCompile != null) { - throw throwExceptionAtCompile; - } - } - - /// - /// Disposes the compiler. - /// - public void Dispose() - { - disposeCalled = true; - } - - /// - /// Gets or sets the type of the compiled assembly. - /// - public PEFileKinds TargetKind { - get { return targetKind; } - set { targetKind = value; } - } - - public PortableExecutableKinds ExecutableKind { - get { return executableKind; } - set { executableKind = value; } - } - - public ImageFileMachine Machine { - get { return machine; } - set { machine = value; } - } - - /// - /// Gets or sets the file that contains the main entry point. - /// - public string MainFile { - get { return mainFile; } - set { mainFile = value; } - } - - /// - /// Gets or sets the output assembly filename. - /// - public string OutputAssembly { - get { return outputAssembly; } - set { outputAssembly = value; } - } - - /// - /// Gets or sets whether the compiler should include debug - /// information in the created assembly. - /// - public bool IncludeDebugInformation { - get { return includeDebugInformation; } - set { includeDebugInformation = value; } - } - - /// - /// Gets whether the Compile method has been called. - /// - public bool CompileCalled { - get { return compileCalled; } - } - - /// - /// Gets whether the Dispose method has been called. - /// - public bool DisposeCalled { - get { return disposeCalled; } - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/PlatformTestFixture.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/PlatformTestFixture.cs deleted file mode 100644 index 6c2a2c63f5..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/PlatformTestFixture.cs +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection; -using System.Reflection.Emit; -using ICSharpCode.Python.Build.Tasks; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - /// - /// Tests the platform information (e.g. x86) is correctly passed to the IPythonCompiler. - /// - [TestFixture] - public class PlatformTestFixture - { - MockPythonCompiler mockCompiler; - TaskItem sourceTaskItem; - PythonCompilerTask compilerTask; - - [SetUp] - public void Init() - { - mockCompiler = new MockPythonCompiler(); - compilerTask = new PythonCompilerTask(mockCompiler); - sourceTaskItem = new TaskItem("test.py"); - compilerTask.Sources = new ITaskItem[] {sourceTaskItem}; - } - - [Test] - public void DefaultPlatformIsILOnly() - { - compilerTask.Execute(); - Assert.AreEqual(PortableExecutableKinds.ILOnly, mockCompiler.ExecutableKind); - } - - [Test] - public void DefaultMachineIs386() - { - compilerTask.Execute(); - Assert.AreEqual(ImageFileMachine.I386, mockCompiler.Machine); - } - - [Test] - public void ExecutableIsCompiledTo32Bit() - { - compilerTask.Platform = "x86"; - compilerTask.Execute(); - - Assert.AreEqual(PortableExecutableKinds.ILOnly | PortableExecutableKinds.Required32Bit, mockCompiler.ExecutableKind); - } - - [Test] - public void MachineWhenExecutableIsCompiledTo32Bit() - { - compilerTask.Platform = "x86"; - compilerTask.Execute(); - - Assert.AreEqual(ImageFileMachine.I386, mockCompiler.Machine); - } - - [Test] - public void ExecutableIsCompiledToItanium() - { - compilerTask.Platform = "Itanium"; - compilerTask.Execute(); - - Assert.AreEqual(PortableExecutableKinds.ILOnly | PortableExecutableKinds.PE32Plus, mockCompiler.ExecutableKind); - } - - [Test] - public void MachineWhenExecutableIsCompiledToItanium() - { - compilerTask.Platform = "Itanium"; - compilerTask.Execute(); - - Assert.AreEqual(ImageFileMachine.IA64, mockCompiler.Machine); - } - - [Test] - public void ExecutableIsCompiledTo64Bit() - { - compilerTask.Platform = "x64"; - compilerTask.Execute(); - - Assert.AreEqual(PortableExecutableKinds.ILOnly | PortableExecutableKinds.PE32Plus, mockCompiler.ExecutableKind); - } - - [Test] - public void MachineWhenExecutableIsCompiledTo64Bit() - { - compilerTask.Platform = "x64"; - compilerTask.Execute(); - - Assert.AreEqual(ImageFileMachine.AMD64, mockCompiler.Machine); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/Python.Build.Tasks.Tests.csproj b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/Python.Build.Tasks.Tests.csproj deleted file mode 100644 index deffa1633a..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/Python.Build.Tasks.Tests.csproj +++ /dev/null @@ -1,90 +0,0 @@ - - - - {833904AB-3CD4-4071-9B48-5770E44685AA} - Debug - AnyCPU - Library - Python.Build.Tasks.Tests - Python.Build.Tasks.Tests - False - False - 4 - false - v4.0 - - - ..\..\..\..\..\..\bin\UnitTests\ - true - Full - True - DEBUG;TRACE - False - - - ..\..\..\..\..\..\bin\UnitTests\ - false - None - False - TRACE - False - - - False - Auto - 4194304 - x86 - 4096 - - - - - ..\..\RequiredLibraries\IronPython.dll - - - - - - 3.5 - - - ..\..\RequiredLibraries\Microsoft.Dynamic.dll - - - ..\..\RequiredLibraries\Microsoft.Scripting.dll - - - ..\..\..\..\..\Tools\NUnit\nunit.framework.dll - False - - - - - - - - - - - - - - - - - - - - - - - - - - - - {D332F2D1-2CF1-43B7-903C-844BD5211A7E} - Python.Build.Tasks - - - \ No newline at end of file diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/PythonCompilerTests.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/PythonCompilerTests.cs deleted file mode 100644 index a692ad75b9..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/PythonCompilerTests.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection.Emit; -using ICSharpCode.Python.Build.Tasks; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - [TestFixture] - public class PythonCompilerTests - { - [Test] - public void NoMainFileSpecifiedForWindowsApplication() - { - try { - PythonCompiler compiler = new PythonCompiler(); - compiler.TargetKind = PEFileKinds.WindowApplication; - compiler.OutputAssembly = "test.exe"; - compiler.SourceFiles = new string[0]; - compiler.MainFile = null; - compiler.Compile(); - - Assert.Fail("Expected PythonCompilerException."); - } catch (PythonCompilerException ex) { - Assert.AreEqual(Resources.NoMainFileSpecified, ex.Message); - } - } - - [Test] - public void NoMainSpecifiedForLibraryThrowsNoError() - { - PythonCompiler compiler = new PythonCompiler(); - compiler.TargetKind = PEFileKinds.Dll; - compiler.OutputAssembly = "test.dll"; - compiler.SourceFiles = new string[0]; - compiler.MainFile = null; - compiler.VerifyParameters(); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/RelativeReferenceTestFixture.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/RelativeReferenceTestFixture.cs deleted file mode 100644 index df3314470e..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/RelativeReferenceTestFixture.cs +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection.Emit; -using ICSharpCode.Python.Build.Tasks; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - /// - /// Tests that references with a relative path are converted to a full path before being - /// passed to the PythonCompiler. - /// - [TestFixture] - public class RelativeReferenceTestFixture - { - MockPythonCompiler mockCompiler; - TaskItem referenceTaskItem; - TaskItem fullPathReferenceTaskItem; - DummyPythonCompilerTask compiler; - - [SetUp] - public void Init() - { - mockCompiler = new MockPythonCompiler(); - compiler = new DummyPythonCompilerTask(mockCompiler, @"C:\Projects\MyProject"); - compiler.TargetType = "Exe"; - compiler.OutputAssembly = "test.exe"; - - referenceTaskItem = new TaskItem(@"..\RequiredLibraries\MyReference.dll"); - fullPathReferenceTaskItem = new TaskItem(@"C:\Projects\Test\MyTest.dll"); - compiler.References = new ITaskItem[] {referenceTaskItem, fullPathReferenceTaskItem}; - - compiler.Execute(); - } - - [Test] - public void RelativePathReferenceItemPassedToCompilerWithFullPath() - { - string fileName = mockCompiler.ReferencedAssemblies[0]; - Assert.AreEqual(@"C:\Projects\RequiredLibraries\MyReference.dll", fileName); - } - - [Test] - public void FullPathReferenceItemUnchangedWhenPassedToCompiler() - { - string fileName = mockCompiler.ReferencedAssemblies[1]; - Assert.AreEqual(fullPathReferenceTaskItem.ItemSpec, fileName); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/RelativeResourceFileTestFixture.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/RelativeResourceFileTestFixture.cs deleted file mode 100644 index b0d6d1695f..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/RelativeResourceFileTestFixture.cs +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection.Emit; -using ICSharpCode.Python.Build.Tasks; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - /// - /// Tests that resoures with a relative path are converted to a full path before being - /// passed to the PythonCompiler. - /// - [TestFixture] - public class RelativeResourceFileTestFixture - { - MockPythonCompiler mockCompiler; - TaskItem resourceTaskItem; - TaskItem fullPathResourceTaskItem; - DummyPythonCompilerTask compiler; - - [SetUp] - public void Init() - { - mockCompiler = new MockPythonCompiler(); - compiler = new DummyPythonCompilerTask(mockCompiler, @"C:\Projects\MyProject"); - compiler.TargetType = "Exe"; - compiler.OutputAssembly = "test.exe"; - - resourceTaskItem = new TaskItem(@"..\RequiredLibraries\MyResource.resx"); - fullPathResourceTaskItem = new TaskItem(@"C:\Projects\Test\MyTest.resx"); - compiler.Resources = new ITaskItem[] {resourceTaskItem, fullPathResourceTaskItem}; - - compiler.Execute(); - } - - [Test] - public void RelativePathReferenceItemPassedToCompilerWithFullPath() - { - string fileName = mockCompiler.ResourceFiles[0].FileName; - Assert.AreEqual(@"C:\Projects\RequiredLibraries\MyResource.resx", fileName); - } - - [Test] - public void FullPathReferenceItemUnchangedWhenPassedToCompiler() - { - string fileName = mockCompiler.ResourceFiles[1].FileName; - Assert.AreEqual(fullPathResourceTaskItem.ItemSpec, fileName); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorFileNameWithDotCharTestFixture.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorFileNameWithDotCharTestFixture.cs deleted file mode 100644 index d921239ea4..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorFileNameWithDotCharTestFixture.cs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection; -using System.Reflection.Emit; -using IronPython.Runtime; -using ICSharpCode.Python.Build.Tasks; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using Microsoft.Scripting; -using Microsoft.Scripting.Hosting; -using Microsoft.Scripting.Runtime; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - /// - /// If the project has a filename with a dot character in it (e.g. Resources.Designer.py) and this file - /// has a syntax error then IronPython's ClrModule.CompileModules method will throw a syntax error exception but the - /// filename will have a '\' replacing the dot character (i.e. Resources\Designer.py). - /// - [TestFixture] - public class SyntaxErrorFileNameWithDotCharTestFixture - { - MockPythonCompiler mockCompiler; - DummyPythonCompilerTask compiler; - bool success; - - [TestFixtureSetUp] - public void SetUpFixture() - { - ScriptEngine engine = IronPython.Hosting.Python.CreateEngine(); - } - - [SetUp] - public void Init() - { - mockCompiler = new MockPythonCompiler(); - compiler = new DummyPythonCompilerTask(mockCompiler, @"C:\Projects\MyProject"); - compiler.TargetType = "Exe"; - compiler.OutputAssembly = "test.exe"; - - TaskItem sourceFile = new TaskItem(@"D:\Projects\MyProject\PythonApp.Program.py"); - compiler.Sources = new ITaskItem[] {sourceFile}; - - SourceUnit source = DefaultContext.DefaultPythonContext.CreateSourceUnit(NullTextContentProvider.Null, @"PythonApp\Program", SourceCodeKind.InteractiveCode); - - SourceLocation start = new SourceLocation(0, 1, 1); - SourceLocation end = new SourceLocation(0, 2, 3); - SourceSpan span = new SourceSpan(start, end); - SyntaxErrorException ex = new SyntaxErrorException("Error", source, span, 1000, Severity.FatalError); - mockCompiler.ThrowExceptionAtCompile = ex; - - success = compiler.Execute(); - } - - [Test] - public void SourceFile() - { - Assert.AreEqual(@"D:\Projects\MyProject\PythonApp.Program.py", compiler.LoggedErrorFile); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorNullFileNameTestFixture.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorNullFileNameTestFixture.cs deleted file mode 100644 index f3fbb2c8f3..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorNullFileNameTestFixture.cs +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection; -using System.Reflection.Emit; -using IronPython.Runtime; -using ICSharpCode.Python.Build.Tasks; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using Microsoft.Scripting; -using Microsoft.Scripting.Hosting; -using Microsoft.Scripting.Runtime; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - [TestFixture] - public class SyntaxErrorNullFileNameTestFixture - { - MockPythonCompiler mockCompiler; - DummyPythonCompilerTask compiler; - bool success; - - [TestFixtureSetUp] - public void SetUpFixture() - { - ScriptEngine engine = IronPython.Hosting.Python.CreateEngine(); - } - - [SetUp] - public void Init() - { - mockCompiler = new MockPythonCompiler(); - compiler = new DummyPythonCompilerTask(mockCompiler, @"C:\Projects\MyProject"); - compiler.TargetType = "Exe"; - compiler.OutputAssembly = "test.exe"; - - TaskItem sourceFile = new TaskItem(@"D:\Projects\MyProject\test.py"); - compiler.Sources = new ITaskItem[] {sourceFile}; - - SourceUnit source = DefaultContext.DefaultPythonContext.CreateSourceUnit(NullTextContentProvider.Null, @"test", SourceCodeKind.InteractiveCode); - - SyntaxErrorException ex = new SyntaxErrorException("Error", null, SourceSpan.None, 1000, Severity.FatalError); - mockCompiler.ThrowExceptionAtCompile = ex; - - success = compiler.Execute(); - } - - [Test] - public void IsExceptionMessageLogged() - { - Assert.AreEqual("Error", compiler.LoggedErrorMessage); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorTestFixture.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorTestFixture.cs deleted file mode 100644 index 0d2ef5ee66..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorTestFixture.cs +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection; -using System.Reflection.Emit; -using IronPython.Runtime; -using ICSharpCode.Python.Build.Tasks; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using Microsoft.Scripting; -using Microsoft.Scripting.Hosting; -using Microsoft.Scripting.Runtime; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - /// - /// Tests that a syntax error exception is caught and logged. - /// - [TestFixture] - public class SyntaxErrorTestFixture - { - MockPythonCompiler mockCompiler; - DummyPythonCompilerTask compiler; - bool success; - - [TestFixtureSetUp] - public void SetUpFixture() - { - ScriptEngine engine = IronPython.Hosting.Python.CreateEngine(); - } - - [SetUp] - public void Init() - { - mockCompiler = new MockPythonCompiler(); - compiler = new DummyPythonCompilerTask(mockCompiler, @"C:\Projects\MyProject"); - compiler.TargetType = "Exe"; - compiler.OutputAssembly = "test.exe"; - - TaskItem sourceFile = new TaskItem(@"D:\Projects\MyProject\test.py"); - compiler.Sources = new ITaskItem[] {sourceFile}; - - SourceUnit source = DefaultContext.DefaultPythonContext.CreateSourceUnit(NullTextContentProvider.Null, @"test", SourceCodeKind.InteractiveCode); - - SourceLocation start = new SourceLocation(0, 1, 1); - SourceLocation end = new SourceLocation(0, 2, 3); - SourceSpan span = new SourceSpan(start, end); - SyntaxErrorException ex = new SyntaxErrorException("Error", source, span, 1000, Severity.FatalError); - mockCompiler.ThrowExceptionAtCompile = ex; - - success = compiler.Execute(); - } - - [Test] - public void ExecuteFailed() - { - Assert.IsFalse(success); - } - - [Test] - public void IsExceptionMessageLogged() - { - Assert.AreEqual("Error", compiler.LoggedErrorMessage); - } - - [Test] - public void IsErrorCodeLogged() - { - Assert.AreEqual("1000", compiler.LoggedErrorCode); - } - - [Test] - public void SourceFile() - { - Assert.AreEqual(@"D:\Projects\MyProject\test.py", compiler.LoggedErrorFile); - } - - [Test] - public void SourceStartLine() - { - Assert.AreEqual(1, compiler.LoggedStartLine); - } - - [Test] - public void SourceStartColumn() - { - Assert.AreEqual(1, compiler.LoggedStartColumn); - } - - [Test] - public void SourceEndLine() - { - Assert.AreEqual(2, compiler.LoggedEndLine); - } - - [Test] - public void SourceEndColumn() - { - Assert.AreEqual(3, compiler.LoggedEndColumn); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorUnknownFileNameTestFixture.cs b/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorUnknownFileNameTestFixture.cs deleted file mode 100644 index 0936c47207..0000000000 --- a/src/AddIns/BackendBindings/Python/Python.Build.Tasks/Test/SyntaxErrorUnknownFileNameTestFixture.cs +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Reflection; -using System.Reflection.Emit; -using IronPython.Runtime; -using ICSharpCode.Python.Build.Tasks; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using Microsoft.Scripting; -using Microsoft.Scripting.Hosting; -using Microsoft.Scripting.Runtime; -using NUnit.Framework; - -namespace Python.Build.Tasks.Tests -{ - /// - /// If the filename returned from the SyntaxErrorException cannot be found in the project then - /// just use the project's folder concatenated with the filename. - /// - [TestFixture] - public class SyntaxErrorUnknownFileNameTestFixture - { - MockPythonCompiler mockCompiler; - DummyPythonCompilerTask compiler; - bool success; - - [TestFixtureSetUp] - public void SetUpFixture() - { - ScriptEngine engine = IronPython.Hosting.Python.CreateEngine(); - } - - [SetUp] - public void Init() - { - mockCompiler = new MockPythonCompiler(); - compiler = new DummyPythonCompilerTask(mockCompiler, @"D:\Projects\MyProject"); - compiler.TargetType = "Exe"; - compiler.OutputAssembly = "test.exe"; - - TaskItem sourceFile = new TaskItem(@"D:\Projects\MyProject\test.py"); - compiler.Sources = new ITaskItem[] {sourceFile}; - - SourceUnit source = DefaultContext.DefaultPythonContext.CreateSourceUnit(NullTextContentProvider.Null, @"test\unknown", SourceCodeKind.InteractiveCode); - - SourceLocation start = new SourceLocation(0, 1, 1); - SourceLocation end = new SourceLocation(0, 2, 3); - SourceSpan span = new SourceSpan(start, end); - SyntaxErrorException ex = new SyntaxErrorException("Error", source, span, 1000, Severity.FatalError); - mockCompiler.ThrowExceptionAtCompile = ex; - - success = compiler.Execute(); - } - - [Test] - public void SourceFile() - { - Assert.AreEqual(@"D:\Projects\MyProject\test.unknown.py", compiler.LoggedErrorFile); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding.sln b/src/AddIns/BackendBindings/Python/PythonBinding.sln deleted file mode 100644 index 2b9b97c3ca..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding.sln +++ /dev/null @@ -1,206 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -# SharpDevelop 4.3 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding.Tests", "PythonBinding\Test\PythonBinding.Tests.csproj", "{23B517C9-1ECC-4419-A13F-0B7136D085CB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks.Tests", "Python.Build.Tasks\Test\Python.Build.Tasks.Tests.csproj", "{833904AB-3CD4-4071-9B48-5770E44685AA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "..\..\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "..\..\..\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "..\..\..\Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "..\..\..\Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "..\..\..\Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "..\..\..\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "..\..\..\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "..\..\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "..\..\Analysis\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting.Tests", "..\..\Analysis\UnitTesting\Test\UnitTesting.Tests.csproj", "{44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Scripting", "..\Scripting\Project\ICSharpCode.Scripting.csproj", "{7048AE18-EB93-4A84-82D0-DD60EB58ADBD}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Scripting.Tests", "..\Scripting\Test\ICSharpCode.Scripting.Tests.csproj", "{85C09AD8-183B-403A-869A-7226646218A9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PyWalker", "PyWalker\PyWalker.csproj", "{55329704-6046-48EC-8A20-5C80B3092A63}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - Debug|x86 = Debug|x86 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Release|Any CPU.Build.0 = Release|Any CPU - {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Release|Any CPU.ActiveCfg = Release|Any CPU - {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Release|Any CPU.Build.0 = Release|Any CPU - {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Release|Any CPU.Build.0 = Release|Any CPU - {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {833904AB-3CD4-4071-9B48-5770E44685AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {833904AB-3CD4-4071-9B48-5770E44685AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {833904AB-3CD4-4071-9B48-5770E44685AA}.Release|Any CPU.Build.0 = Release|Any CPU - {833904AB-3CD4-4071-9B48-5770E44685AA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Release|Any CPU.Build.0 = Release|Any CPU - {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|Any CPU.Build.0 = Release|Any CPU - {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Release|Any CPU.Build.0 = Release|Any CPU - {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|Any CPU.Build.0 = Release|Any CPU - {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|Any CPU.ActiveCfg = Release|Any CPU - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|Any CPU.Build.0 = Release|Any CPU - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Release|Any CPU.Build.0 = Release|Any CPU - {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|Any CPU.Build.0 = Debug|Any CPU - {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|Any CPU.Build.0 = Release|Any CPU - {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|Any CPU.ActiveCfg = Release|Any CPU - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|Any CPU.Build.0 = Release|Any CPU - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8035765F-D51F-4A0C-A746-2FD100E19419}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8035765F-D51F-4A0C-A746-2FD100E19419}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8035765F-D51F-4A0C-A746-2FD100E19419}.Release|Any CPU.Build.0 = Release|Any CPU - {8035765F-D51F-4A0C-A746-2FD100E19419}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0162E499-42D0-409B-AA25-EED21F75336B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0162E499-42D0-409B-AA25-EED21F75336B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0162E499-42D0-409B-AA25-EED21F75336B}.Release|Any CPU.Build.0 = Release|Any CPU - {0162E499-42D0-409B-AA25-EED21F75336B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|Any CPU.Build.0 = Release|Any CPU - {1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|Any CPU.ActiveCfg = Release|Any CPU - {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Debug|Any CPU.Build.0 = Debug|Any CPU - {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Release|Any CPU.Build.0 = Release|Any CPU - {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7048AE18-EB93-4A84-82D0-DD60EB58ADBD}.Debug|Any CPU.Build.0 = Debug|x86 - {7048AE18-EB93-4A84-82D0-DD60EB58ADBD}.Debug|Any CPU.ActiveCfg = Debug|x86 - {7048AE18-EB93-4A84-82D0-DD60EB58ADBD}.Release|Any CPU.Build.0 = Release|x86 - {7048AE18-EB93-4A84-82D0-DD60EB58ADBD}.Release|Any CPU.ActiveCfg = Release|x86 - {7048AE18-EB93-4A84-82D0-DD60EB58ADBD}.Debug|x86.Build.0 = Debug|x86 - {7048AE18-EB93-4A84-82D0-DD60EB58ADBD}.Debug|x86.ActiveCfg = Debug|x86 - {7048AE18-EB93-4A84-82D0-DD60EB58ADBD}.Release|x86.Build.0 = Release|x86 - {7048AE18-EB93-4A84-82D0-DD60EB58ADBD}.Release|x86.ActiveCfg = Release|x86 - {85C09AD8-183B-403A-869A-7226646218A9}.Debug|Any CPU.Build.0 = Debug|x86 - {85C09AD8-183B-403A-869A-7226646218A9}.Debug|Any CPU.ActiveCfg = Debug|x86 - {85C09AD8-183B-403A-869A-7226646218A9}.Debug|x86.Build.0 = Debug|x86 - {85C09AD8-183B-403A-869A-7226646218A9}.Debug|x86.ActiveCfg = Debug|x86 - {85C09AD8-183B-403A-869A-7226646218A9}.Release|Any CPU.Build.0 = Release|x86 - {85C09AD8-183B-403A-869A-7226646218A9}.Release|Any CPU.ActiveCfg = Release|x86 - {85C09AD8-183B-403A-869A-7226646218A9}.Release|x86.Build.0 = Release|x86 - {85C09AD8-183B-403A-869A-7226646218A9}.Release|x86.ActiveCfg = Release|x86 - {55329704-6046-48EC-8A20-5C80B3092A63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {55329704-6046-48EC-8A20-5C80B3092A63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {55329704-6046-48EC-8A20-5C80B3092A63}.Debug|x86.Build.0 = Debug|Any CPU - {55329704-6046-48EC-8A20-5C80B3092A63}.Debug|x86.ActiveCfg = Debug|Any CPU - {55329704-6046-48EC-8A20-5C80B3092A63}.Release|Any CPU.Build.0 = Release|Any CPU - {55329704-6046-48EC-8A20-5C80B3092A63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {55329704-6046-48EC-8A20-5C80B3092A63}.Release|x86.Build.0 = Release|Any CPU - {55329704-6046-48EC-8A20-5C80B3092A63}.Release|x86.ActiveCfg = Release|Any CPU - {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Debug|x86.Build.0 = Debug|Any CPU - {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Debug|x86.ActiveCfg = Debug|Any CPU - {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Release|x86.Build.0 = Release|Any CPU - {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Release|x86.ActiveCfg = Release|Any CPU - {1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|x86.Build.0 = Debug|Any CPU - {1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|x86.ActiveCfg = Debug|Any CPU - {1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|x86.Build.0 = Release|Any CPU - {1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|x86.ActiveCfg = Release|Any CPU - {0162E499-42D0-409B-AA25-EED21F75336B}.Debug|x86.Build.0 = Debug|Any CPU - {0162E499-42D0-409B-AA25-EED21F75336B}.Debug|x86.ActiveCfg = Debug|Any CPU - {0162E499-42D0-409B-AA25-EED21F75336B}.Release|x86.Build.0 = Release|Any CPU - {0162E499-42D0-409B-AA25-EED21F75336B}.Release|x86.ActiveCfg = Release|Any CPU - {8035765F-D51F-4A0C-A746-2FD100E19419}.Debug|x86.Build.0 = Debug|Any CPU - {8035765F-D51F-4A0C-A746-2FD100E19419}.Debug|x86.ActiveCfg = Debug|Any CPU - {8035765F-D51F-4A0C-A746-2FD100E19419}.Release|x86.Build.0 = Release|Any CPU - {8035765F-D51F-4A0C-A746-2FD100E19419}.Release|x86.ActiveCfg = Release|Any CPU - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|x86.Build.0 = Debug|Any CPU - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|x86.ActiveCfg = Debug|Any CPU - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|x86.Build.0 = Release|Any CPU - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|x86.ActiveCfg = Release|Any CPU - {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|x86.Build.0 = Debug|Any CPU - {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|x86.ActiveCfg = Debug|Any CPU - {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|x86.Build.0 = Release|Any CPU - {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|x86.ActiveCfg = Release|Any CPU - {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Debug|x86.Build.0 = Debug|Any CPU - {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Debug|x86.ActiveCfg = Debug|Any CPU - {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Release|x86.Build.0 = Release|Any CPU - {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Release|x86.ActiveCfg = Release|Any CPU - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|x86.Build.0 = Debug|Any CPU - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|x86.ActiveCfg = Debug|Any CPU - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|x86.Build.0 = Release|Any CPU - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|x86.ActiveCfg = Release|Any CPU - {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Debug|x86.Build.0 = Debug|Any CPU - {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Debug|x86.ActiveCfg = Debug|Any CPU - {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|x86.Build.0 = Release|Any CPU - {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|x86.ActiveCfg = Release|Any CPU - {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Debug|x86.Build.0 = Debug|Any CPU - {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Debug|x86.ActiveCfg = Debug|Any CPU - {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Release|x86.Build.0 = Release|Any CPU - {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Release|x86.ActiveCfg = Release|Any CPU - {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|x86.Build.0 = Debug|Any CPU - {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|x86.ActiveCfg = Debug|Any CPU - {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|x86.Build.0 = Release|Any CPU - {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|x86.ActiveCfg = Release|Any CPU - {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Debug|x86.Build.0 = Debug|Any CPU - {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Debug|x86.ActiveCfg = Debug|Any CPU - {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Release|x86.Build.0 = Release|Any CPU - {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Release|x86.ActiveCfg = Release|Any CPU - {833904AB-3CD4-4071-9B48-5770E44685AA}.Debug|x86.Build.0 = Debug|Any CPU - {833904AB-3CD4-4071-9B48-5770E44685AA}.Debug|x86.ActiveCfg = Debug|Any CPU - {833904AB-3CD4-4071-9B48-5770E44685AA}.Release|x86.Build.0 = Release|Any CPU - {833904AB-3CD4-4071-9B48-5770E44685AA}.Release|x86.ActiveCfg = Release|Any CPU - {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Debug|x86.Build.0 = Debug|Any CPU - {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Debug|x86.ActiveCfg = Debug|Any CPU - {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Release|x86.Build.0 = Release|Any CPU - {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Release|x86.ActiveCfg = Release|Any CPU - {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Debug|x86.Build.0 = Debug|Any CPU - {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Debug|x86.ActiveCfg = Debug|Any CPU - {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Release|x86.Build.0 = Release|Any CPU - {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Release|x86.ActiveCfg = Release|Any CPU - {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Debug|x86.Build.0 = Debug|Any CPU - {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Debug|x86.ActiveCfg = Debug|Any CPU - {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Release|x86.Build.0 = Release|Any CPU - {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Release|x86.ActiveCfg = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Configuration/AssemblyInfo.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Configuration/AssemblyInfo.cs deleted file mode 100644 index e765f062dd..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Configuration/AssemblyInfo.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System.Reflection; - -// Information about this assembly is defined by the following -// attributes. -// -// change them to the information which is associated with the assembly -// you compile. - -[assembly: AssemblyTitle("PythonBinding")] -[assembly: AssemblyDescription("IronPython addin for SharpDevelop.")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Lib/__future__.py b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Lib/__future__.py deleted file mode 100644 index 4b9df43d5e..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Lib/__future__.py +++ /dev/null @@ -1,25 +0,0 @@ -##################################################################################### -# -# Copyright (c) Microsoft Corporation. All rights reserved. -# -# This source code is subject to terms and conditions of the Microsoft Public License. A -# copy of the license can be found in the License.html file at the root of this distribution. If -# you cannot locate the Microsoft Public License, please send an email to -# ironpy@microsoft.com. By using this source code in any fashion, you are agreeing to be bound -# by the terms of the Microsoft Public License. -# -# You must not remove this notice, or any other, from this software. -# -# -##################################################################################### - -all_feature_names = ['nested_scopes', 'generators', 'division', - 'absolute_import', 'with_statement', 'print_function', - 'unicode_literals'] - -division=1 -with_statement=1 -generators=1 -absolute_import=1 -print_function=1 -unicode_literals=1 diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Lib/runpy.py b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Lib/runpy.py deleted file mode 100644 index 451562244f..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Lib/runpy.py +++ /dev/null @@ -1,31 +0,0 @@ -##################################################################################### -# -# Copyright (c) Microsoft Corporation. All rights reserved. -# -# This source code is subject to terms and conditions of the Microsoft Public License. A -# copy of the license can be found in the License.html file at the root of this distribution. If -# you cannot locate the Microsoft Public License, please send an email to -# ironpy@microsoft.com. By using this source code in any fashion, you are agreeing to be bound -# by the terms of the Microsoft Public License. -# -# You must not remove this notice, or any other, from this software. -# -# -##################################################################################### - -""" -Fake runpy.py which emulates what CPython does to properly support the '-m' flag. -If you have access to the CPython standard library, you most likely do not need this. -""" - -import sys, nt - -def run_module(modToRun, init_globals=None, run_name = '__main__', alter_sys = True): - if alter_sys: - for o in sys.path: - libpath = o + '\\' + modToRun + '.py' - if nt.access(libpath, nt.F_OK): - sys.argv[0] = libpath - break - - __import__(modToRun) diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Lib/site.py b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Lib/site.py deleted file mode 100644 index 07581427f6..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Lib/site.py +++ /dev/null @@ -1,14 +0,0 @@ -##################################################################################### -# -# Copyright (c) Microsoft Corporation. All rights reserved. -# -# This source code is subject to terms and conditions of the Microsoft Public License. A -# copy of the license can be found in the License.html file at the root of this distribution. If -# you cannot locate the Microsoft Public License, please send an email to -# ironpy@microsoft.com. By using this source code in any fashion, you are agreeing to be bound -# by the terms of the Microsoft Public License. -# -# You must not remove this notice, or any other, from this software. -# -# -##################################################################################### diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.addin b/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.addin deleted file mode 100644 index 529aea81d8..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.addin +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.csproj b/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.csproj deleted file mode 100644 index dd2fef1d06..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.csproj +++ /dev/null @@ -1,319 +0,0 @@ - - - - {8D732610-8FC6-43BA-94C9-7126FD7FE361} - Debug - AnyCPU - Library - ICSharpCode.PythonBinding - PythonBinding - False - False - 4 - false - v4.0 - - - - - ..\..\..\..\..\..\AddIns\BackendBindings\PythonBinding\ - true - Full - True - DEBUG;TRACE - False - - - ..\..\..\..\..\..\AddIns\BackendBindings\PythonBinding\ - false - None - False - TRACE - False - - - False - Auto - 4194304 - x86 - 4096 - - - - - ..\..\RequiredLibraries\Chiron.exe - - - ..\..\RequiredLibraries\ipy.exe - - - ..\..\RequiredLibraries\IronPython.dll - True - - - ..\..\RequiredLibraries\IronPython.Modules.dll - True - - - ..\..\RequiredLibraries\Microsoft.Dynamic.dll - True - - - ..\..\RequiredLibraries\Microsoft.Scripting.dll - True - - - ..\..\RequiredLibraries\Microsoft.Scripting.Metadata.dll - True - - - 3.0 - - - 3.0 - - - - 3.5 - - - - - - 4.0 - - - - 3.0 - - - - - Configuration\GlobalAssemblyInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PythonOptionsPanel.xaml - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Chiron.exe.Config - Always - - - DLLs\IronPython.Wpf.dll - Always - - - License.Rtf - Always - - - Always - - - Always - - - Always - - - Always - - - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - - Always - - - Always - - - Always - - - Always - - - Always - - - - - - - - - - {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} - ICSharpCode.AvalonEdit - False - - - {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} - NRefactory - False - - - {2748AD25-9C63-4E12-877B-4DCE96FBED54} - ICSharpCode.SharpDevelop - False - - - {2748AD25-9C63-4E12-877B-4DCE96FBED54} - ICSharpCode.SharpDevelop - - - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} - ICSharpCode.Core - False - - - {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} - ICSharpCode.Core.Presentation - - - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3} - ICSharpCode.SharpDevelop.Dom - False - - - {8035765F-D51F-4A0C-A746-2FD100E19419} - ICSharpCode.SharpDevelop.Widgets - - - {1F261725-6318-4434-A1B1-6C70CE4CD324} - UnitTesting - False - - - {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} - FormsDesigner - False - - - {7048AE18-EB93-4A84-82D0-DD60EB58ADBD} - ICSharpCode.Scripting - False - - - - - - \ No newline at end of file diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/ApplicationSettingsPanel.xfrm b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/ApplicationSettingsPanel.xfrm deleted file mode 100644 index 25b9056d0e..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/ApplicationSettingsPanel.xfrm +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/CompilingOptionsPanel.xfrm b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/CompilingOptionsPanel.xfrm deleted file mode 100644 index c972ec65db..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/CompilingOptionsPanel.xfrm +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/Python.xshd b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/Python.xshd deleted file mode 100644 index 2f7076e5c4..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/Python.xshd +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - """ - """ - - - - ''' - ''' - - - - \# - - - - " - " - - - - - - - - ' - ' - - - - - - - - assert - del - exec - global - lambda - print - - - - class - - - - except - finally - raise - try - - - - def - - - - import - from - - - - for - in - while - - - - break - continue - yield - return - - - - and - as - is - not - or - - - - pass - - - - elif - else - if - - - - with - - - - None - - - \b[\d\w_]+(?=(\s*\()) - \b0[xX][0-9a-fA-F]+|(\b\d+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)? - - - [?,.;()\[\]{}+\-/%*<>^+~!|&]+ - - - diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/AddInOptions.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/AddInOptions.cs deleted file mode 100644 index e8f7cc724c..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/AddInOptions.cs +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.IO; -using ICSharpCode.Core; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Holds the options for the PythonBinding AddIn - /// - public class PythonAddInOptions - { - /// - /// The name of the options as read from the PropertyService. - /// - public static readonly string AddInOptionsName = "PythonBinding.Options"; - - /// - /// The default python console filename. - /// - public static readonly string DefaultPythonFileName = "ipy.exe"; - - #region Property names - public static readonly string PythonFileNameProperty = "PythonFileName"; - public static readonly string PythonLibraryPathProperty = "PythonLibraryPath"; - #endregion - - Properties properties; - - public PythonAddInOptions() - : this(PropertyService.Get(AddInOptionsName, new Properties())) - { - } - - /// - /// Creates the addin options class which will use - /// the options from the properties class specified. - /// - public PythonAddInOptions(Properties properties) - { - this.properties = properties; - } - - public string PythonLibraryPath { - get { return properties.Get(PythonLibraryPathProperty, String.Empty); } - set { properties.Set(PythonLibraryPathProperty, value); } - } - - public bool HasPythonLibraryPath { - get { return !String.IsNullOrEmpty(PythonLibraryPath); } - } - - /// - /// Gets or sets the python console filename. - /// - public string PythonFileName { - get { return properties.Get(PythonFileNameProperty, GetDefaultPythonFileName()); } - set { - if (String.IsNullOrEmpty(value)) { - properties.Set(PythonFileNameProperty, GetDefaultPythonFileName()); - } else { - properties.Set(PythonFileNameProperty, value); - } - } - } - - /// - /// Returns the full path to ipyw.exe which is installed in the - /// Python addin folder. - /// - string GetDefaultPythonFileName() - { - string path = GetPythonBindingAddInPath(); - return Path.Combine(path, DefaultPythonFileName); - } - - string GetPythonBindingAddInPath() - { - return StringParser.Parse("${addinpath:ICSharpCode.PythonBinding}"); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ApplicationSettingsPanel.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ApplicationSettingsPanel.cs deleted file mode 100644 index 11aabd8e21..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ApplicationSettingsPanel.cs +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.IO; -using System.Windows.Forms; -using ICSharpCode.SharpDevelop.Gui.OptionPanels; -using ICSharpCode.SharpDevelop.Project; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Python project's application settings panel. - /// - public class ApplicationSettingsPanel : AbstractXmlFormsProjectOptionPanel - { - const string AssemblyTextBoxName = "assemblyNameTextBox"; - const string RootNamespaceTextBoxName = "rootNamespaceTextBox"; - const string OutputTypeComboBoxName = "outputTypeComboBox"; - const string MainFileComboBoxName = "mainFileComboBox"; - - public override void LoadPanelContents() - { - SetupFromManifestResource("ICSharpCode.PythonBinding.Resources.ApplicationSettingsPanel.xfrm"); - InitializeHelper(); - - ConfigurationGuiBinding b = BindString(AssemblyTextBoxName, "AssemblyName", TextBoxEditMode.EditEvaluatedProperty); - CreateLocationButton(b, AssemblyTextBoxName); - AssemblyNameTextBox.TextChanged += AssemblyNameTextBoxTextChanged; - - b = BindString(RootNamespaceTextBoxName, "RootNamespace", TextBoxEditMode.EditEvaluatedProperty); - CreateLocationButton(b, RootNamespaceTextBoxName); - - b = BindEnum(OutputTypeComboBoxName, "OutputType"); - CreateLocationButton(b, OutputTypeComboBoxName); - OutputTypeComboBox.SelectedIndexChanged += OutputTypeComboBoxSelectedIndexChanged; - - b = BindString(MainFileComboBoxName, "MainFile", TextBoxEditMode.EditEvaluatedProperty); - CreateLocationButton(b, MainFileComboBoxName); - ConnectBrowseButtonControl("mainFileBrowseButton", "mainFileComboBox", - "${res:SharpDevelop.FileFilter.AllFiles}|*.*", - TextBoxEditMode.EditEvaluatedProperty); - - Get("projectFolder").Text = project.Directory; - Get("projectFile").Text = Path.GetFileName(project.FileName); - Get("projectFile").ReadOnly = true; - - RefreshOutputNameTextBox(); - AddConfigurationSelector(this); - } - - /// - /// Calls SetupFromXmlStream after creating a stream from the current - /// assembly using the specified manifest resource name. - /// - /// The manifest resource name used - /// to create the stream. - protected virtual void SetupFromManifestResource(string resource) - { - SetupFromXmlStream(typeof(ApplicationSettingsPanel).Assembly.GetManifestResourceStream(resource)); - } - - /// - /// Binds the string property to a text box control. - /// - protected virtual ConfigurationGuiBinding BindString(string control, string property, TextBoxEditMode textBoxEditMode) - { - return helper.BindString(control, property, textBoxEditMode); - } - - /// - /// Binds an enum property to a control. - /// - protected virtual ConfigurationGuiBinding BindEnum(string control, string property) where T : struct - { - return helper.BindEnum(control, property); - } - - /// - /// Associates a location button with a control. - /// - protected virtual ChooseStorageLocationButton CreateLocationButton(ConfigurationGuiBinding binding, string controlName) - { - return binding.CreateLocationButton(controlName); - } - - /// - /// Adds a configuration selector to the specified control. - /// - protected virtual void AddConfigurationSelector(Control control) - { - helper.AddConfigurationSelector(control); - } - - /// - /// Connects the browse button control to the target control. - /// - protected virtual void ConnectBrowseButtonControl(string browseButton, string target, string fileFilter, TextBoxEditMode textBoxEditMode) - { - ConnectBrowseButton(browseButton, target, fileFilter, textBoxEditMode); - } - - /// - /// Refreshes the output name text box after the assembly name - /// has changed. - /// - protected void AssemblyNameTextBoxTextChanged(object source, EventArgs e) - { - RefreshOutputNameTextBox(); - } - - /// - /// Refreshes the output name text box after the output type has changed. - /// - protected void OutputTypeComboBoxSelectedIndexChanged(object source, EventArgs e) - { - RefreshOutputNameTextBox(); - } - - /// - /// Updates the output name text box based on the assembly name and - /// output type. - /// - void RefreshOutputNameTextBox() - { - string assemblyName = AssemblyNameTextBox.Text; - string extension = CompilableProject.GetExtension((OutputType)OutputTypeComboBox.SelectedIndex); - Get("outputName").Text = String.Concat(assemblyName, extension); - } - - TextBox AssemblyNameTextBox { - get { return Get("assemblyName"); } - } - - ComboBox OutputTypeComboBox { - get { return Get("outputType"); } - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/CompilingOptionsPanel.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/CompilingOptionsPanel.cs deleted file mode 100644 index c187b0c694..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/CompilingOptionsPanel.cs +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Windows.Forms; -using ICSharpCode.SharpDevelop.Gui.OptionPanels; -using ICSharpCode.SharpDevelop.Project; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Python project's compiling options panel. - /// - public class CompilingOptionsPanel : AbstractBuildOptions - { - public override void LoadPanelContents() - { - SetupFromManifestResource("ICSharpCode.PythonBinding.Resources.CompilingOptionsPanel.xfrm"); - InitializeHelper(); - - ConfigurationGuiBinding b = BindString("outputPathTextBox", "OutputPath", TextBoxEditMode.EditRawProperty); - CreateLocationButton(b, "outputPathTextBox"); - ConnectBrowseFolderButtonControl("outputPathBrowseButton", "outputPathTextBox", "${res:Dialog.Options.PrjOptions.Configuration.FolderBrowserDescription}", TextBoxEditMode.EditRawProperty); - - b = BindBoolean("debugInfoCheckBox", "DebugInfo", false); - CreateLocationButton(b, "debugInfoCheckBox"); - - b = CreatePlatformTargetComboBox(); - CreateLocationButton(b, "targetCpuComboBox"); - - AddConfigurationSelector(this); - } - - /// - /// Calls SetupFromXmlStream after creating a stream from the current - /// assembly using the specified manifest resource name. - /// - /// The manifest resource name used - /// to create the stream. - protected virtual void SetupFromManifestResource(string resource) - { - SetupFromXmlStream(typeof(CompilingOptionsPanel).Assembly.GetManifestResourceStream(resource)); - } - - /// - /// Binds the string property to a text box control. - /// - protected virtual ConfigurationGuiBinding BindString(string control, string property, TextBoxEditMode textBoxEditMode) - { - return helper.BindString(control, property, textBoxEditMode); - } - - /// - /// Binds the boolean property to a check box control. - /// - protected virtual ConfigurationGuiBinding BindBoolean(string control, string property, bool defaultValue) - { - return helper.BindBoolean(control, property, defaultValue); - } - - /// - /// Associates a location button with a control. - /// - protected virtual ChooseStorageLocationButton CreateLocationButton(ConfigurationGuiBinding binding, string controlName) - { - return binding.CreateLocationButton(controlName); - } - - /// - /// Connects the browse folder button control to the target control. - /// - protected virtual void ConnectBrowseFolderButtonControl(string browseButton, string target, string description, TextBoxEditMode textBoxEditMode) - { - ConnectBrowseFolder(browseButton, target, description, textBoxEditMode); - } - - /// - /// Adds a configuration selector to the specified control. - /// - protected virtual void AddConfigurationSelector(Control control) - { - helper.AddConfigurationSelector(control); - } - - /// - /// Creates the platform target combo box. - /// - protected virtual ConfigurationGuiBinding CreatePlatformTargetComboBox() - { - return base.CreatePlatformTarget(); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ConstructorInfo.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ConstructorInfo.cs deleted file mode 100644 index a65c316461..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ConstructorInfo.cs +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using ICSharpCode.NRefactory.Ast; - -namespace ICSharpCode.PythonBinding -{ - public class PythonConstructorInfo - { - ConstructorDeclaration constructor; - List fields = new List(); - - PythonConstructorInfo(ConstructorDeclaration constructor, List fields) - { - this.constructor = constructor; - this.fields = fields; - } - - /// - /// Gets the constructor information from a type declaration. Returns null if there is no - /// constructor defined or if there are no fields defined. - /// - public static PythonConstructorInfo GetConstructorInfo(TypeDeclaration type) - { - List fields = new List(); - ConstructorDeclaration constructor = null; - foreach (INode node in type.Children) { - ConstructorDeclaration currentConstructor = node as ConstructorDeclaration; - FieldDeclaration field = node as FieldDeclaration; - if (currentConstructor != null) { - constructor = currentConstructor; - } else if (field != null) { - fields.Add(field); - } - } - - if ((fields.Count > 0) || (constructor != null)) { - return new PythonConstructorInfo(constructor, fields); - } - return null; - } - - public ConstructorDeclaration Constructor { - get { return constructor; } - } - - public List Fields { - get { return fields; } - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ConvertProjectToPythonProjectCommand.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ConvertProjectToPythonProjectCommand.cs deleted file mode 100644 index 18426bb05e..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ConvertProjectToPythonProjectCommand.cs +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.IO; -using System.Text; - -using ICSharpCode.Core; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Project; -using ICSharpCode.SharpDevelop.Project.Converter; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Converts a C# or VB.NET project to Python. - /// - public class ConvertProjectToPythonProjectCommand : LanguageConverter - { - public override string TargetLanguageName { - get { return PythonProjectBinding.LanguageName; } - } - - /// - /// Creates an PythonProject. - /// - protected override IProject CreateProject(string targetProjectDirectory, IProject sourceProject) - { - // Add IronPython reference. - PythonProject targetProject = (PythonProject)base.CreateProject(targetProjectDirectory, sourceProject); - IProjectItemListProvider targetProjectItems = targetProject as IProjectItemListProvider; - targetProjectItems.AddProjectItem(CreateIronPythonReference(targetProject)); - return targetProject; - } - - /// - /// Converts C# and VB.NET files to Python and saves the files. - /// - protected override void ConvertFile(FileProjectItem sourceItem, FileProjectItem targetItem) - { - NRefactoryToPythonConverter converter = NRefactoryToPythonConverter.Create(sourceItem.Include); - if (converter != null) { - targetItem.Include = ChangeFileExtensionToPythonFileExtension(sourceItem.Include); - - string code = GetParseableFileContent(sourceItem.FileName); - string pythonCode = converter.Convert(code); - - PythonProject pythonTargetProject = (PythonProject)targetItem.Project; - if ((converter.EntryPointMethods.Count > 0) && !pythonTargetProject.HasMainFile) { - pythonTargetProject.AddMainFile(targetItem.Include); - - // Add code to call main method at the end of the file. - pythonCode += "\r\n\r\n" + converter.GenerateMainMethodCall(converter.EntryPointMethods[0]); - } - - SaveFile(targetItem.FileName, pythonCode, GetDefaultFileEncoding()); - } else { - LanguageConverterConvertFile(sourceItem, targetItem); - } - } - - /// - /// Adds the MainFile property since adding it in the CreateProject method would mean - /// it gets removed via the base class CopyProperties method. - /// - protected override void CopyProperties(IProject sourceProject, IProject targetProject) - { - base.CopyProperties(sourceProject, targetProject); - AddMainFile(sourceProject, (PythonProject)targetProject); - } - - /// - /// Calls the LanguageConverter class method ConvertFile which copies the source file to the target - /// file without any modifications. - /// - protected virtual void LanguageConverterConvertFile(FileProjectItem sourceItem, FileProjectItem targetItem) - { - base.ConvertFile(sourceItem, targetItem); - } - - /// - /// Writes the specified file to disk. - /// - protected virtual void SaveFile(string fileName, string content, Encoding encoding) - { - File.WriteAllText(fileName, content, encoding); - } - - protected virtual Encoding GetDefaultFileEncoding() - { - return FileService.DefaultFileEncoding.GetEncoding(); - } - - /// - /// Gets the content of the file from the parser service. - /// - protected virtual string GetParseableFileContent(string fileName) - { - return ParserService.GetParseableFileContent(fileName).Text; - } - - /// - /// Gets the project content for the specified project. - /// - protected virtual IProjectContent GetProjectContent(IProject project) - { - return ParserService.GetProjectContent(project); - } - - ReferenceProjectItem CreateIronPythonReference(IProject project) - { - ReferenceProjectItem reference = new ReferenceProjectItem(project, "IronPython"); - reference.SetMetadata("HintPath", @"$(PythonBinPath)\IronPython.dll"); - return reference; - } - - /// - /// Adds a MainFile if the source project has a StartupObject. - /// - void AddMainFile(IProject sourceProject, PythonProject targetProject) - { - string startupObject = GetStartupObject(sourceProject); - if (startupObject != null) { - IClass c = FindClass(sourceProject, startupObject); - if (c != null) { - string fileName = FileUtility.GetRelativePath(sourceProject.Directory, c.CompilationUnit.FileName); - targetProject.AddMainFile(ChangeFileExtensionToPythonFileExtension(fileName)); - } - } - } - - string GetStartupObject(IProject project) - { - MSBuildBasedProject msbuildProject = project as MSBuildBasedProject; - if (msbuildProject != null) { - return msbuildProject.GetProperty(null, null, "StartupObject"); - } - return null; - } - - IClass FindClass(IProject project, string name) - { - return GetProjectContent(project).GetClass(name, 0); - } - - /// - /// Changes the extension to ".py" - /// - static string ChangeFileExtensionToPythonFileExtension(string fileName) - { - return Path.ChangeExtension(fileName, ".py"); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ConvertToPythonMenuCommand.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ConvertToPythonMenuCommand.cs deleted file mode 100644 index c269625507..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/ConvertToPythonMenuCommand.cs +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.Core; -using ICSharpCode.Scripting; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Gui; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Converts VB.NET or C# code to Python. - /// - public class ConvertToPythonMenuCommand : AbstractMenuCommand - { - ScriptingTextEditorViewContent view; - - public override void Run() - { - Run(new PythonWorkbench()); - } - - protected void Run(IScriptingWorkbench workbench) - { - view = new ScriptingTextEditorViewContent(workbench); - string code = GeneratePythonCode(); - ShowPythonCodeInNewWindow(code); - } - - string GeneratePythonCode() - { - NRefactoryToPythonConverter converter = NRefactoryToPythonConverter.Create(view.PrimaryFileName); - converter.IndentString = view.TextEditorOptions.IndentationString; - return converter.Convert(view.EditableView.Text); - } - - void ShowPythonCodeInNewWindow(string code) - { - NewFile("Generated.py", "Python", code); - } - - /// - /// Creates a new file using the FileService by default. - /// - protected virtual void NewFile(string defaultName, string language, string content) - { - FileService.NewFile(defaultName, content); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/IPythonResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/IPythonResolver.cs deleted file mode 100644 index 96e364fc04..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/IPythonResolver.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PythonBinding -{ - public interface IPythonResolver - { - ResolveResult Resolve(PythonResolverContext resolverContext); - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/MemberName.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/MemberName.cs deleted file mode 100644 index f3af28dfbd..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/MemberName.cs +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Split up an expression into a member name and a type name. - /// - /// - /// "myObject.Field" => "myObject" + "Field" - /// "System.Console.WriteLine" => "System.Console" + "Console.WriteLine" - /// - public class MemberName - { - string name = String.Empty; - string type = String.Empty; - - public MemberName(string expression) - { - Parse(expression); - } - - public MemberName(string typeName, string memberName) - { - this.type = typeName; - this.name = memberName; - } - - void Parse(string expression) - { - if (!String.IsNullOrEmpty(expression)) { - int index = expression.LastIndexOf('.'); - if (index > 0) { - type = expression.Substring(0, index); - name = expression.Substring(index + 1); - } else { - type = expression; - } - } - } - - public string Name { - get { return name; } - } - - public bool HasName { - get { return !String.IsNullOrEmpty(name); } - } - - public string Type { - get { return type; } - } - - public override string ToString() - { - return String.Format("Type: {0}, Member: {1}", type, name); - } - - public override bool Equals(object obj) - { - MemberName rhs = obj as MemberName; - if (rhs != null) { - return (name == rhs.name) && (type == rhs.type); - } - return false; - } - - public override int GetHashCode() - { - return name.GetHashCode() ^ type.GetHashCode(); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/NRefactoryToPythonConverter.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/NRefactoryToPythonConverter.cs deleted file mode 100644 index 7d97f031f6..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/NRefactoryToPythonConverter.cs +++ /dev/null @@ -1,2074 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.IO; -using System.Text; -using ICSharpCode.NRefactory; -using ICSharpCode.NRefactory.Ast; -using ICSharpCode.NRefactory.Parser; -using ICSharpCode.NRefactory.PrettyPrinter; -using ICSharpCode.NRefactory.Visitors; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Used to convert VB.NET and C# to Python. - /// - public class NRefactoryToPythonConverter : NodeTrackingAstVisitor, IOutputFormatter - { - string indentString = "\t"; - PythonCodeBuilder codeBuilder; - - // Holds the constructor for the class being converted. This is used to identify class fields. - PythonConstructorInfo constructorInfo; - - // Holds the parameters of the current method. This is used to identify - // references to fields or parameters. - List methodParameters = new List(); - MethodDeclaration currentMethod; - - // Holds the names of any parameters defined for this class. - List propertyNames = new List(); - - SupportedLanguage language; - List entryPointMethods; - - SpecialNodesInserter specialNodesInserter; - INode currentNode; - List xmlDocComments = new List(); - - static readonly string Docstring = "\"\"\""; - - public NRefactoryToPythonConverter(SupportedLanguage language) - { - this.language = language; - } - - public NRefactoryToPythonConverter() - { - } - - /// - /// Gets or sets the source language that will be converted to python. - /// - public SupportedLanguage SupportedLanguage { - get { return language; } - } - - /// - /// Creates either C# to Python or VB.NET to Python converter based on the filename extension that is to be converted. - /// - /// Null if the file cannot be converted. - public static NRefactoryToPythonConverter Create(string fileName) - { - if (CanConvert(fileName)) { - return new NRefactoryToPythonConverter(GetSupportedLanguage(fileName)); - } - return null; - } - - /// - /// Only C# (.cs) or VB.NET (.vb) files can be converted. - /// - public static bool CanConvert(string fileName) - { - string extension = Path.GetExtension(fileName); - if (!String.IsNullOrEmpty(extension)) { - extension = extension.ToLowerInvariant(); - return (extension == ".cs") || (extension == ".vb"); - } - return false; - } - - /// - /// Gets or sets the string that will be used to indent the generated Python code. - /// - public string IndentString { - get { return indentString; } - set { indentString = value; } - } - - /// - /// Generates compilation unit from the code. - /// - /// - /// Uses ISpecials so comments can be converted. - /// - /// - /// The code to convert to a compilation unit. - /// - public CompilationUnit GenerateCompilationUnit(string source, SupportedLanguage language) - { - using (IParser parser = ParserFactory.CreateParser(language, new StringReader(source))) { - parser.Parse(); - parser.CompilationUnit.UserData = parser.Lexer.SpecialTracker.RetrieveSpecials(); - return parser.CompilationUnit; - } - } - - /// - /// Converts the source code to Python. - /// - public string Convert(string source) - { - return Convert(source, language); - } - - /// - /// Converts the source code to Python. - /// - public string Convert(string source, SupportedLanguage language) - { - // Convert to NRefactory code DOM. - CompilationUnit unit = GenerateCompilationUnit(source, language); - - SpecialOutputVisitor specialOutputVisitor = new SpecialOutputVisitor(this); - specialNodesInserter = new SpecialNodesInserter(unit.UserData as List, specialOutputVisitor); - - // Convert to Python code. - entryPointMethods = new List(); - codeBuilder = new PythonCodeBuilder(); - codeBuilder.IndentString = indentString; - unit.AcceptVisitor(this, null); - - return codeBuilder.ToString().Trim(); - } - - /// - /// Gets a list of possible entry point methods found when converting the - /// python source code. - /// - public ReadOnlyCollection EntryPointMethods { - get { return entryPointMethods.AsReadOnly(); } - } - - /// - /// Generates code to call the main entry point. - /// - public string GenerateMainMethodCall(MethodDeclaration methodDeclaration) - { - StringBuilder code = new StringBuilder(); - code.Append(GetTypeName(methodDeclaration)); - code.Append('.'); - code.Append(methodDeclaration.Name); - code.Append('('); - if (methodDeclaration.Parameters.Count > 0) { - code.Append("None"); - } - code.Append(')'); - - return code.ToString(); - } - - /// - /// Converts from the NRefactory's binary operator type to a string. - /// - public static string GetBinaryOperator(BinaryOperatorType binaryOperatorType) - { - switch (binaryOperatorType) { - case BinaryOperatorType.Add: - return "+"; - case BinaryOperatorType.BitwiseAnd: - return "&"; - case BinaryOperatorType.BitwiseOr: - return "|"; - case BinaryOperatorType.Divide: - case BinaryOperatorType.DivideInteger: - return "/"; - case BinaryOperatorType.ShiftLeft: - return "<<"; - case BinaryOperatorType.ShiftRight: - return ">>"; - case BinaryOperatorType.GreaterThan: - return ">"; - case BinaryOperatorType.GreaterThanOrEqual: - return ">="; - case BinaryOperatorType.InEquality: - return "!="; - case BinaryOperatorType.LessThan: - return "<"; - case BinaryOperatorType.LessThanOrEqual: - return "<="; - case BinaryOperatorType.LogicalAnd: - return "and"; - case BinaryOperatorType.LogicalOr: - return "or"; - case BinaryOperatorType.ExclusiveOr: - return "^"; - case BinaryOperatorType.Modulus: - return "%"; - case BinaryOperatorType.Multiply: - return "*"; - case BinaryOperatorType.ReferenceEquality: - return "is"; - case BinaryOperatorType.Subtract: - return "-"; - case BinaryOperatorType.Concat: - return "+"; - default: - return "=="; - } - } - - public override object TrackedVisitAddHandlerStatement(AddHandlerStatement addHandlerStatement, object data) - { - Console.WriteLine("VisitAddHandlerStatement"); - return null; - } - - public override object TrackedVisitAddressOfExpression(AddressOfExpression addressOfExpression, object data) - { - Console.WriteLine("VisitAddressOfExpression"); - return null; - } - - public override object TrackedVisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression, object data) - { - Console.WriteLine("VisitAnonymousMethodExpression"); - return null; - } - - public override object TrackedVisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression, object data) - { - string arrayType = GetTypeName(arrayCreateExpression.CreateType); - if (arrayCreateExpression.ArrayInitializer.CreateExpressions.Count == 0) { - Append("Array.CreateInstance(" + arrayType); - if (arrayCreateExpression.Arguments.Count > 0) { - foreach (Expression expression in arrayCreateExpression.Arguments) { - Append(", "); - expression.AcceptVisitor(this, data); - } - Append(")"); - } else { - Append(", 0)"); - } - } else { - Append("Array[" + arrayType + "]"); - - // Add initializers. - Append("(("); - bool firstItem = true; - foreach (Expression expression in arrayCreateExpression.ArrayInitializer.CreateExpressions) { - if (firstItem) { - firstItem = false; - } else { - Append(", "); - } - expression.AcceptVisitor(this, data); - } - Append("))"); - } - return null; - } - - public override object TrackedVisitAssignmentExpression(AssignmentExpression assignmentExpression, object data) - { - switch (assignmentExpression.Op) { - case AssignmentOperatorType.Assign: - return CreateSimpleAssignment(assignmentExpression, "=", data); - case AssignmentOperatorType.Add: - if (IsAddEventHandler(assignmentExpression)) { - return CreateHandlerStatement(assignmentExpression.Left, "+=", assignmentExpression.Right); - } - return CreateSimpleAssignment(assignmentExpression, "+=", data); - case AssignmentOperatorType.Subtract: - if (IsRemoveEventHandler(assignmentExpression)) { - return CreateHandlerStatement(assignmentExpression.Left, "-=", assignmentExpression.Right); - } - return CreateSimpleAssignment(assignmentExpression, "-=", data); - case AssignmentOperatorType.Modulus: - return CreateSimpleAssignment(assignmentExpression, "%=", data); - case AssignmentOperatorType.Multiply: - return CreateSimpleAssignment(assignmentExpression, "*=", data); - case AssignmentOperatorType.Divide: - case AssignmentOperatorType.DivideInteger: - return CreateSimpleAssignment(assignmentExpression, "/=", data); - case AssignmentOperatorType.BitwiseAnd: - return CreateSimpleAssignment(assignmentExpression, "&=", data); - case AssignmentOperatorType.BitwiseOr: - return CreateSimpleAssignment(assignmentExpression, "|=", data); - case AssignmentOperatorType.ExclusiveOr: - return CreateSimpleAssignment(assignmentExpression, "^=", data); - case AssignmentOperatorType.ShiftLeft: - return CreateSimpleAssignment(assignmentExpression, "<<=", data); - case AssignmentOperatorType.ShiftRight: - return CreateSimpleAssignment(assignmentExpression, ">>=", data); - case AssignmentOperatorType.ConcatString: - return CreateSimpleAssignment(assignmentExpression, "+=", data); - case AssignmentOperatorType.Power: - return CreateSimpleAssignment(assignmentExpression, "**=", data); - } - - return null; - } - - public override object TrackedVisitAttribute(ICSharpCode.NRefactory.Ast.Attribute attribute, object data) - { - return null; - } - - public override object TrackedVisitAttributeSection(AttributeSection attributeSection, object data) - { - return null; - } - - /// - /// Converts a base class reference to a this reference. - /// Python has no concept of a direct base class reference so - /// "base" is converted to "self". - /// - public override object TrackedVisitBaseReferenceExpression(BaseReferenceExpression baseReferenceExpression, object data) - { - Append("self"); - return null; - } - - public override object TrackedVisitBinaryOperatorExpression(BinaryOperatorExpression binaryOperatorExpression, object data) - { - binaryOperatorExpression.Left.AcceptVisitor(this, data); - Append(" "); - Append(GetBinaryOperator(binaryOperatorExpression.Op)); - Append(" "); - binaryOperatorExpression.Right.AcceptVisitor(this, data); - return null; - } - - /// - /// Visits the statement's children. - /// - public override object TrackedVisitBlockStatement(BlockStatement blockStatement, object data) - { - return blockStatement.AcceptChildren(this, data); - } - - public override object TrackedVisitBreakStatement(BreakStatement breakStatement, object data) - { - AppendIndentedLine("break"); - return null; - } - - public override object TrackedVisitCaseLabel(CaseLabel caseLabel, object data) - { - return null; - } - - /// - /// Ignore the cast and just visit the expression inside the cast. - /// - public override object TrackedVisitCastExpression(CastExpression castExpression, object data) - { - return castExpression.Expression.AcceptVisitor(this, data); - } - - public override object TrackedVisitCatchClause(CatchClause catchClause, object data) - { - Console.WriteLine("VisitCatchClause"); - return null; - } - - public override object TrackedVisitCheckedExpression(CheckedExpression checkedExpression, object data) - { - Console.WriteLine("VisitCheckedExpression"); - return null; - } - - public override object TrackedVisitCheckedStatement(CheckedStatement checkedStatement, object data) - { - Console.WriteLine("VisitCheckedStatement"); - return null; - } - - public override object TrackedVisitClassReferenceExpression(ClassReferenceExpression classReferenceExpression, object data) - { - Console.WriteLine("VisitClassReferenceExpression"); - return null; - } - - public override object TrackedVisitCompilationUnit(CompilationUnit compilationUnit, object data) - { - // Visit the child items of the compilation unit. - compilationUnit.AcceptChildren(this, data); - return null; - } - - /// - /// An ternary operator expression: - /// - /// string a = test ? "Ape" : "Monkey"; - /// - /// In Python this gets converted to: - /// - /// a = "Ape" if test else "Monkey" - /// - public override object TrackedVisitConditionalExpression(ConditionalExpression conditionalExpression, object data) - { - // Add true part. - conditionalExpression.TrueExpression.AcceptVisitor(this, data); - - // Add condition. - Append(" if "); - conditionalExpression.Condition.AcceptVisitor(this, data); - - // Add false part. - Append(" else "); - conditionalExpression.FalseExpression.AcceptVisitor(this, data); - return null; - } - - public override object TrackedVisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration, object data) - { - CreateConstructor(constructorInfo); - return null; - } - - public override object TrackedVisitConstructorInitializer(ConstructorInitializer constructorInitializer, object data) - { - Console.WriteLine("VisitConstructorInitializer"); - return null; - } - - public override object TrackedVisitContinueStatement(ContinueStatement continueStatement, object data) - { - AppendIndentedLine("continue"); - return null; - } - - public override object TrackedVisitDeclareDeclaration(DeclareDeclaration declareDeclaration, object data) - { - Console.WriteLine("VisitDeclareDeclaration"); - return null; - } - - public override object TrackedVisitDefaultValueExpression(DefaultValueExpression defaultValueExpression, object data) - { - Console.WriteLine("VisitDefaultValueExpression"); - return null; - } - - public override object TrackedVisitDelegateDeclaration(DelegateDeclaration delegateDeclaration, object data) - { - Console.WriteLine("VisitDelegateDeclaration"); - return null; - } - - public override object TrackedVisitDestructorDeclaration(DestructorDeclaration destructorDeclaration, object data) - { - AppendIndentedLine("def __del__(self):"); - IncreaseIndent(); - destructorDeclaration.Body.AcceptVisitor(this, data); - DecreaseIndent(); - return null; - } - - public override object TrackedVisitDirectionExpression(DirectionExpression directionExpression, object data) - { - Console.WriteLine("VisitDirectionExpression"); - return null; - } - - public override object TrackedVisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) - { - AppendIndented("while "); - doLoopStatement.Condition.AcceptVisitor(this, data); - Append(":"); - AppendLine(); - - IncreaseIndent(); - doLoopStatement.EmbeddedStatement.AcceptVisitor(this, data); - DecreaseIndent(); - - return null; - } - - public override object TrackedVisitElseIfSection(ElseIfSection elseIfSection, object data) - { - // Convert condition. - AppendIndented("elif "); - elseIfSection.Condition.AcceptVisitor(this, data); - Append(":"); - AppendLine(); - - // Convert else if body statements. - IncreaseIndent(); - elseIfSection.EmbeddedStatement.AcceptVisitor(this, data); - DecreaseIndent(); - - return null; - } - - public override object TrackedVisitEmptyStatement(EmptyStatement emptyStatement, object data) - { - Console.WriteLine("VisitEmptyStatement"); - return null; - } - - public override object TrackedVisitEndStatement(EndStatement endStatement, object data) - { - Console.WriteLine("VistEndStatement"); - return null; - } - - public override object TrackedVisitEraseStatement(EraseStatement eraseStatement, object data) - { - Console.WriteLine("VisitEraseStatement"); - return null; - } - - public override object TrackedVisitErrorStatement(ErrorStatement errorStatement, object data) - { - Console.WriteLine("VisitErrorStatement"); - return null; - } - - public override object TrackedVisitEventAddRegion(EventAddRegion eventAddRegion, object data) - { - Console.WriteLine("VisitEventAddRegion"); - return null; - } - - public override object TrackedVisitEventDeclaration(EventDeclaration eventDeclaration, object data) - { - Console.WriteLine("VisitEventDeclaration"); - return null; - } - - public override object TrackedVisitEventRaiseRegion(EventRaiseRegion eventRaiseRegion, object data) - { - Console.WriteLine("VisitEventRaiseRegion"); - return null; - } - - public override object TrackedVisitEventRemoveRegion(EventRemoveRegion eventRemoveRegion, object data) - { - Console.WriteLine("VisitEventRemoveRegion"); - return null; - } - - public override object TrackedVisitExitStatement(ExitStatement exitStatement, object data) - { - AppendIndentedLine("break"); - return null; - } - - public override object TrackedVisitExpressionStatement(ExpressionStatement expressionStatement, object data) - { - // Convert the expression. - AppendIndented(String.Empty); - expressionStatement.Expression.AcceptVisitor(this, data); - AppendLine(); - return null; - } - - public override object TrackedVisitFieldDeclaration(FieldDeclaration fieldDeclaration, object data) - { - return null; - } - - public override object TrackedVisitFixedStatement(FixedStatement fixedStatement, object data) - { - Console.WriteLine("VisitFixedStatement"); - return null; - } - - public override object TrackedVisitForeachStatement(ForeachStatement foreachStatement, object data) - { - // Convert the for loop's initializers. - AppendIndented(String.Empty); - CreateInitStatement(foreachStatement); - AppendLine(); - - // Convert the for loop's test expression. - AppendIndentedLine("while enumerator.MoveNext():"); - - // Move the initializer in the foreach loop to the - // first line of the for loop's body. - IncreaseIndent(); - AppendIndentedLine(foreachStatement.VariableName + " = enumerator.Current"); - - // Visit the for loop's body. - foreachStatement.EmbeddedStatement.AcceptVisitor(this, data); - DecreaseIndent(); - - return null; - } - - /// - /// Converts from an NRefactory VB.NET for next loop: - /// - /// for i As Integer = 0 To 4 - /// Next - /// - /// to Python's: - /// - /// i = 0 - /// while i < 5: - /// - public override object TrackedVisitForNextStatement(ForNextStatement forNextStatement, object data) - { - // Convert the for loop's initializers. - string variableName = forNextStatement.VariableName; - AppendIndented(variableName); - Append(" = "); - forNextStatement.Start.AcceptVisitor(this, data); - AppendLine(); - - // Convert the for loop's test expression. - AppendIndented("while "); - Append(variableName); - Append(" <= "); - forNextStatement.End.AcceptVisitor(this, data); - Append(":"); - AppendLine(); - - // Visit the for loop's body. - IncreaseIndent(); - forNextStatement.EmbeddedStatement.AcceptVisitor(this, data); - - // Convert the for loop's increment statement. - AppendIndented(variableName); - Append(" = "); - Append(variableName); - Append(" + "); - if (forNextStatement.Step.IsNull) { - Append("1"); - } else { - forNextStatement.Step.AcceptVisitor(this, data); - } - AppendLine(); - DecreaseIndent(); - - return null; - } - - /// - /// Converts from an NRefactory for loop: - /// - /// for (int i = 0; i < 5; i = i + 1) - /// - /// to Python's: - /// - /// i = 0 - /// while i < 5: - /// - public override object TrackedVisitForStatement(ForStatement forStatement, object data) - { - // Convert the for loop's initializers. - foreach (Statement statement in forStatement.Initializers) { - statement.AcceptVisitor(this, data); - } - - // Convert the for loop's test expression. - AppendIndented("while "); - forStatement.Condition.AcceptVisitor(this, data); - Append(":"); - AppendLine(); - - // Visit the for loop's body. - IncreaseIndent(); - forStatement.EmbeddedStatement.AcceptVisitor(this, data); - - // Convert the for loop's increment statement. - foreach (Statement statement in forStatement.Iterator) { - statement.AcceptVisitor(this, data); - } - DecreaseIndent(); - - return null; - } - - public override object TrackedVisitGotoCaseStatement(GotoCaseStatement gotoCaseStatement, object data) - { - Console.WriteLine("VisitGotoCaseStatement"); - return null; - } - - public override object TrackedVisitGotoStatement(GotoStatement gotoStatement, object data) - { - Console.WriteLine("VisitGotoStatement"); - return null; - } - - public override object TrackedVisitIdentifierExpression(IdentifierExpression identifierExpression, object data) - { - string name = identifierExpression.Identifier; - if (IsField(name)) { - Append("self._" + name); - } else if (IsProperty(name) && !IsMethodParameter(name)) { - Append("self." + name); - } else { - Append(name); - } - return null; - } - - public override object TrackedVisitIfElseStatement(IfElseStatement ifElseStatement, object data) - { - // Convert condition. - AppendIndented("if "); - ifElseStatement.Condition.AcceptVisitor(this, data); - Append(":"); - AppendLine(); - - // Convert true statements. - IncreaseIndent(); - foreach (Statement statement in ifElseStatement.TrueStatement) { - statement.AcceptVisitor(this, data); - } - DecreaseIndent(); - - // Convert else if sections. - if (ifElseStatement.HasElseIfSections) { - foreach (ElseIfSection elseIfSection in ifElseStatement.ElseIfSections) { - elseIfSection.AcceptVisitor(this, data); - } - } - - // Convert false statements. - if (ifElseStatement.HasElseStatements) { - AppendIndentedLine("else:"); - IncreaseIndent(); - foreach (Statement statement in ifElseStatement.FalseStatement) { - statement.AcceptVisitor(this, data); - } - DecreaseIndent(); - } - - return null; - } - - public override object TrackedVisitIndexerExpression(IndexerExpression indexerExpression, object data) - { - indexerExpression.TargetObject.AcceptVisitor(this, data); - - // Add indices. - foreach (Expression expression in indexerExpression.Indexes) { - Append("["); - expression.AcceptVisitor(this, data); - Append("]"); - } - - return null; - } - - public override object TrackedVisitInnerClassTypeReference(InnerClassTypeReference innerClassTypeReference, object data) - { - Console.WriteLine("VisitInnerClassTypeReference"); - return null; - } - - public override object TrackedVisitInterfaceImplementation(InterfaceImplementation interfaceImplementation, object data) - { - Console.WriteLine("VisitInterfaceImplementation"); - return null; - } - - public override object TrackedVisitInvocationExpression(InvocationExpression invocationExpression, object data) - { - MemberReferenceExpression memberRefExpression = invocationExpression.TargetObject as MemberReferenceExpression; - IdentifierExpression identifierExpression = invocationExpression.TargetObject as IdentifierExpression; - if (memberRefExpression != null) { - memberRefExpression.TargetObject.AcceptVisitor(this, data); - Append("." + memberRefExpression.MemberName); - } else if (identifierExpression != null) { - if ((currentMethod != null) && IsStatic(currentMethod)) { - Append(GetTypeName(currentMethod) + "."); - } else { - Append("self."); - } - Append(identifierExpression.Identifier); - } - - // Create method parameters - Append("("); - bool firstParam = true; - foreach (Expression param in invocationExpression.Arguments) { - if (firstParam) { - firstParam = false; - } else { - Append(", "); - } - param.AcceptVisitor(this, data); - } - Append(")"); - return null; - } - - public override object TrackedVisitLabelStatement(LabelStatement labelStatement, object data) - { - Console.WriteLine("VisitLabelStatement"); - return null; - } - - /// - /// The variable declaration is not created if the variable has no initializer. - /// - public override object TrackedVisitLocalVariableDeclaration(LocalVariableDeclaration localVariableDeclaration, object data) - { - foreach (VariableDeclaration variableDeclaration in localVariableDeclaration.Variables) { - if (!variableDeclaration.Initializer.IsNull) { - - AddTypeToArrayInitializerIfMissing(variableDeclaration); - - // Create variable declaration. - AppendIndented(variableDeclaration.Name + " = "); - - // Generate the variable initializer. - variableDeclaration.Initializer.AcceptVisitor(this, data); - AppendLine(); - } - } - return null; - } - - public override object TrackedVisitLockStatement(LockStatement lockStatement, object data) - { - Console.WriteLine("VisitLockStatement"); - return null; - } - - public override object TrackedVisitMemberInitializerExpression(MemberInitializerExpression memberInitializerExpression, object data) - { - Append(memberInitializerExpression.Name); - Append(" = "); - memberInitializerExpression.Expression.AcceptVisitor(this, data); - return null; - } - - /// - /// Adds a CodeMemberMethod to the current class being visited. - /// - public override object TrackedVisitMethodDeclaration(MethodDeclaration methodDeclaration, object data) - { - // Add method name. - currentMethod = methodDeclaration; - string methodName = methodDeclaration.Name; - AppendIndented("def " + methodName); - - // Add the parameters. - AddParameters(methodDeclaration); - methodParameters = methodDeclaration.Parameters; - AppendLine(); - - IncreaseIndent(); - AppendDocstring(xmlDocComments); - if (methodDeclaration.Body.Children.Count > 0) { - methodDeclaration.Body.AcceptVisitor(this, data); - } else { - AppendIndentedPassStatement(); - } - - DecreaseIndent(); - AppendLine(); - - if (IsStatic(methodDeclaration)) { - AppendIndentedLine(methodDeclaration.Name + " = staticmethod(" + methodDeclaration.Name + ")"); - AppendLine(); - - // Save Main entry point method. - SaveMethodIfMainEntryPoint(methodDeclaration); - } - - currentMethod = null; - - return null; - } - - public override object TrackedVisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression, object data) - { - Append(namedArgumentExpression.Name); - Append(" = "); - namedArgumentExpression.Expression.AcceptVisitor(this, data); - return null; - } - - /// - /// Visits the namespace declaration and all child nodes. - /// - public override object TrackedVisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration, object data) - { - return namespaceDeclaration.AcceptChildren(this, data); - } - - /// - /// Converts an NRefactory's ObjectCreateExpression to a code dom's - /// CodeObjectCreateExpression. - /// - public override object TrackedVisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, object data) - { - Append(objectCreateExpression.CreateType.Type); - if (IsGenericType(objectCreateExpression)) { - AppendGenericTypes(objectCreateExpression); - } - Append("("); - - // Add parameters. - bool firstParameter = true; - foreach (Expression expression in objectCreateExpression.Parameters) { - if (!firstParameter) { - Append(", "); - } - expression.AcceptVisitor(this, data); - firstParameter = false; - } - - // Add object initializers. - bool firstInitializer = true; - foreach (Expression expression in objectCreateExpression.ObjectInitializer.CreateExpressions) { - if (!firstInitializer) { - Append(", "); - } - expression.AcceptVisitor(this, data); - firstInitializer = false; - } - - Append(")"); - return null; - } - - public override object TrackedVisitOnErrorStatement(OnErrorStatement onErrorStatement, object data) - { - return null; - } - - public override object TrackedVisitOperatorDeclaration(OperatorDeclaration operatorDeclaration, object data) - { - Console.WriteLine("VisitOperatorDeclaration"); - return null; - } - - public override object TrackedVisitOptionDeclaration(OptionDeclaration optionDeclaration, object data) - { - Console.WriteLine("VisitOptionDeclaration"); - return null; - } - - public override object TrackedVisitExternAliasDirective(ExternAliasDirective externAliasDirective, object data) - { - Console.WriteLine("ExternAliasDirective"); - return null; - } - - public override object TrackedVisitParameterDeclarationExpression(ParameterDeclarationExpression parameterDeclarationExpression, object data) - { - Console.WriteLine("VisitParameterDeclarationExpression"); - return null; - } - - public override object TrackedVisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression, object data) - { - Append("(" ); - parenthesizedExpression.Expression.AcceptVisitor(this, data); - Append(")"); - return null; - } - - public override object TrackedVisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression, object data) - { - Console.WriteLine("VisitPointerReferenceExpression"); - return null; - } - - public override object TrackedVisitPrimitiveExpression(PrimitiveExpression primitiveExpression, object data) - { - if (primitiveExpression.Value == null) { - Append("None"); - } else if (primitiveExpression.Value is Boolean) { - Append(primitiveExpression.Value.ToString()); - } else { - Append(primitiveExpression.StringValue); - } - return null; - } - - public override object TrackedVisitPropertyDeclaration(PropertyDeclaration propertyDeclaration, object data) - { - string propertyName = propertyDeclaration.Name; - propertyNames.Add(propertyName); - - // Add get statements. - if (propertyDeclaration.HasGetRegion) { - AppendIndentedLine("def get_" + propertyName + "(self):"); - IncreaseIndent(); - propertyDeclaration.GetRegion.Block.AcceptVisitor(this, data); - DecreaseIndent(); - AppendLine(); - } - - // Add set statements. - if (propertyDeclaration.HasSetRegion) { - AppendIndentedLine("def set_" + propertyName + "(self, value):"); - IncreaseIndent(); - propertyDeclaration.SetRegion.Block.AcceptVisitor(this, data); - DecreaseIndent(); - AppendLine(); - } - - AppendPropertyDecorator(propertyDeclaration); - AppendLine(); - - return null; - } - - public override object TrackedVisitPropertyGetRegion(PropertyGetRegion propertyGetRegion, object data) - { - Console.WriteLine("VisitPropertyGetRegion"); - return null; - } - - public override object TrackedVisitPropertySetRegion(PropertySetRegion propertySetRegion, object data) - { - Console.WriteLine("VisitPropertySetRegion"); - return null; - } - - public override object TrackedVisitRaiseEventStatement(RaiseEventStatement raiseEventStatement, object data) - { - Console.WriteLine("VisitRaiseEventStatement"); - return null; - } - - public override object TrackedVisitReDimStatement(ReDimStatement reDimStatement, object data) - { - Console.WriteLine("VisitReDimStatement"); - return null; - } - - public override object TrackedVisitRemoveHandlerStatement(RemoveHandlerStatement removeHandlerStatement, object data) - { - Console.WriteLine("VisitRemoveHandlerStatement"); - return null; - } - - public override object TrackedVisitResumeStatement(ResumeStatement resumeStatement, object data) - { - Console.WriteLine("VisitResumeStatement"); - return null; - } - - /// - /// Converts a NRefactory ReturnStatement to a code dom's - /// CodeMethodReturnStatement. - /// - public override object TrackedVisitReturnStatement(ReturnStatement returnStatement, object data) - { - AppendIndented("return "); - returnStatement.Expression.AcceptVisitor(this, data); - AppendLine(); - return null; - } - - public override object TrackedVisitSizeOfExpression(SizeOfExpression sizeOfExpression, object data) - { - Console.WriteLine("VisitSizeOfExpression"); - return null; - } - - public override object TrackedVisitStackAllocExpression(StackAllocExpression stackAllocExpression, object data) - { - return null; - } - - public override object TrackedVisitStopStatement(StopStatement stopStatement, object data) - { - return null; - } - - public override object TrackedVisitSwitchSection(SwitchSection switchSection, object data) - { - return null; - } - - public override object TrackedVisitSwitchStatement(SwitchStatement switchStatement, object data) - { - bool firstSection = true; - foreach (SwitchSection section in switchStatement.SwitchSections) { - // Create if/elif/else condition. - CreateSwitchCaseCondition(switchStatement.SwitchExpression, section, firstSection); - - // Create if/elif/else body. - IncreaseIndent(); - CreateSwitchCaseBody(section); - DecreaseIndent(); - - firstSection = false; - } - return null; - } - - public override object TrackedVisitTemplateDefinition(TemplateDefinition templateDefinition, object data) - { - return null; - } - - public override object TrackedVisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression, object data) - { - Append("self"); - return null; - } - - /// - /// Converts an NRefactory throw statement to a code dom's throw exception statement. - /// - public override object TrackedVisitThrowStatement(ThrowStatement throwStatement, object data) - { - AppendIndented("raise "); - throwStatement.Expression.AcceptVisitor(this, data); - AppendLine(); - return null; - } - - /// - /// Converts an NRefactory try-catch statement to a code dom - /// try-catch statement. - /// - public override object TrackedVisitTryCatchStatement(TryCatchStatement tryCatchStatement, object data) - { - // Convert try-catch body. - AppendIndentedLine("try:"); - IncreaseIndent(); - tryCatchStatement.StatementBlock.AcceptVisitor(this, data); - DecreaseIndent(); - - // Convert catches. - foreach (CatchClause catchClause in tryCatchStatement.CatchClauses) { - AppendIndented("except "); - Append(catchClause.TypeReference.Type); - Append(", " + catchClause.VariableName + ":"); - AppendLine(); - - // Convert catch child statements. - IncreaseIndent(); - catchClause.StatementBlock.AcceptVisitor(this, data); - DecreaseIndent(); - } - - // Convert finally block. - AppendIndentedLine("finally:"); - IncreaseIndent(); - tryCatchStatement.FinallyBlock.AcceptVisitor(this, data); - DecreaseIndent(); - - return null; - } - - /// - /// Visits a class. - /// - public override object TrackedVisitTypeDeclaration(TypeDeclaration typeDeclaration, object data) - { - codeBuilder.AppendLineIfPreviousLineIsCode(); - AppendIndented("class " + typeDeclaration.Name); - AppendBaseTypes(typeDeclaration.BaseTypes); - AppendLine(); - IncreaseIndent(); - AppendDocstring(xmlDocComments); - if (typeDeclaration.Children.Count > 0) { - // Look for fields or a constructor for the type. - constructorInfo = PythonConstructorInfo.GetConstructorInfo(typeDeclaration); - if (constructorInfo != null) { - if (constructorInfo.Constructor != null) { - // Generate constructor later when VisitConstructorDeclaration method is called. - // This allows the constructor comments to be converted in the right place. - } else { - CreateConstructor(constructorInfo); - } - } - - // Visit the rest of the class. - typeDeclaration.AcceptChildren(this, data); - } else { - AppendIndentedPassStatement(); - } - DecreaseIndent(); - - return null; - } - - public override object TrackedVisitTypeOfExpression(TypeOfExpression typeOfExpression, object data) - { - codeBuilder.InsertIndentedLine("import clr\r\n"); - Append("clr.GetClrType("); - Append(GetTypeName(typeOfExpression.TypeReference)); - Append(")"); - return null; - } - - public override object TrackedVisitTypeOfIsExpression(TypeOfIsExpression typeOfIsExpression, object data) - { - Console.WriteLine("VisitTypeOfIsExpression"); - return null; - } - - public override object TrackedVisitTypeReference(TypeReference typeReference, object data) - { - Console.WriteLine("VisitTypeReference"); - return null; - } - - public override object TrackedVisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression, object data) - { - Append(GetTypeName(typeReferenceExpression.TypeReference)); - return null; - } - - public override object TrackedVisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression, object data) - { - switch (unaryOperatorExpression.Op) { - case UnaryOperatorType.PostIncrement: - case UnaryOperatorType.Increment: - // Change i++ or ++i to i += 1 - return CreateIncrementStatement(unaryOperatorExpression); - case UnaryOperatorType.Decrement: - case UnaryOperatorType.PostDecrement: - // Change --i or i-- to i -= 1. - return CreateDecrementStatement(unaryOperatorExpression); - case UnaryOperatorType.Minus: - return CreateUnaryOperatorStatement(GetBinaryOperator(BinaryOperatorType.Subtract), unaryOperatorExpression.Expression); - case UnaryOperatorType.Plus: - return CreateUnaryOperatorStatement(GetBinaryOperator(BinaryOperatorType.Add), unaryOperatorExpression.Expression); - case UnaryOperatorType.Not: - return CreateUnaryOperatorStatement("not ", unaryOperatorExpression.Expression); - case UnaryOperatorType.BitNot: - return CreateUnaryOperatorStatement("~", unaryOperatorExpression.Expression); - } - return null; - } - - public override object TrackedVisitUncheckedExpression(UncheckedExpression uncheckedExpression, object data) - { - return null; - } - - public override object TrackedVisitUncheckedStatement(UncheckedStatement uncheckedStatement, object data) - { - return null; - } - - public override object TrackedVisitUnsafeStatement(UnsafeStatement unsafeStatement, object data) - { - return null; - } - - public override object TrackedVisitUsing(Using @using, object data) - { - return null; - } - - /// - /// Converts using declarations into Python import statements. - /// - public override object TrackedVisitUsingDeclaration(UsingDeclaration usingDeclaration, object data) - { - // Add import statements for each using. - foreach (Using @using in usingDeclaration.Usings) { - AppendIndentedLine("from " + @using.Name + " import *"); - } - return null; - } - - public override object TrackedVisitUsingStatement(UsingStatement usingStatement, object data) - { - return null; - } - - public override object TrackedVisitVariableDeclaration(VariableDeclaration variableDeclaration, object data) - { - AppendIndented(variableDeclaration.Name + " = "); - variableDeclaration.Initializer.AcceptVisitor(this, data); - AppendLine(); - return null; - } - - public override object TrackedVisitWithStatement(WithStatement withStatement, object data) - { - return null; - } - - public override object TrackedVisitYieldStatement(YieldStatement yieldStatement, object data) - { - return null; - } - - public override object TrackedVisitCollectionInitializerExpression(CollectionInitializerExpression collectionInitializerExpression, object data) - { - return null; - } - - public override object TrackedVisitLambdaExpression(LambdaExpression lambdaExpression, object data) - { - return null; - } - - public override object TrackedVisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, object data) - { - memberReferenceExpression.TargetObject.AcceptVisitor(this, data); - if ((memberReferenceExpression.TargetObject is ThisReferenceExpression) && !IsProperty(memberReferenceExpression.MemberName)) { - Append("._"); - } else { - Append("."); - } - Append(memberReferenceExpression.MemberName); - return null; - } - - public override object TrackedVisitQueryExpression(QueryExpression queryExpression, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionFromClause(QueryExpressionFromClause queryExpressionFromClause, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionGroupClause(QueryExpressionGroupClause queryExpressionGroupClause, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionJoinClause(QueryExpressionJoinClause queryExpressionJoinClause, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionLetClause(QueryExpressionLetClause queryExpressionLetClause, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionOrderClause(QueryExpressionOrderClause queryExpressionOrderClause, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionOrdering(QueryExpressionOrdering queryExpressionOrdering, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionSelectClause(QueryExpressionSelectClause queryExpressionSelectClause, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionWhereClause(QueryExpressionWhereClause queryExpressionWhereClause, object data) - { - return null; - } - - public override object TrackedVisitExpressionRangeVariable(ExpressionRangeVariable expressionRangeVariable, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionAggregateClause(QueryExpressionAggregateClause queryExpressionAggregateClause, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionDistinctClause(QueryExpressionDistinctClause queryExpressionDistinctClause, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionGroupJoinVBClause(QueryExpressionGroupJoinVBClause queryExpressionGroupJoinVBClause, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionGroupVBClause(QueryExpressionGroupVBClause queryExpressionGroupVBClause, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionJoinConditionVB(QueryExpressionJoinConditionVB queryExpressionJoinConditionVB, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionJoinVBClause(QueryExpressionJoinVBClause queryExpressionJoinVBClause, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionLetVBClause(QueryExpressionLetVBClause queryExpressionLetVBClause, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionPartitionVBClause(QueryExpressionPartitionVBClause queryExpressionPartitionVBClause, object data) - { - return null; - } - - public override object TrackedVisitQueryExpressionSelectVBClause(QueryExpressionSelectVBClause queryExpressionSelectVBClause, object data) - { - return null; - } - - /// - /// Appends any comments that appear before this node. - /// - protected override void BeginVisit(INode node) - { - xmlDocComments.Clear(); - currentNode = node; - specialNodesInserter.AcceptNodeStart(node); - } - - #region IOutputFormatter - - int IOutputFormatter.IndentationLevel { - get { return codeBuilder.Indent; } - set { ; } - } - - string IOutputFormatter.Text { - get { return String.Empty; } - } - - bool IOutputFormatter.IsInMemberBody { - get { return false; } - set { ; } - } - - void IOutputFormatter.NewLine() - { - } - - void IOutputFormatter.Indent() - { - - } - - void IOutputFormatter.PrintComment(Comment comment, bool forceWriteInPreviousBlock) - { - if (comment.CommentType == CommentType.SingleLine) { - AppendSingleLineComment(comment); - } else if (comment.CommentType == CommentType.Block) { - AppendMultilineComment(comment); - } else if (comment.CommentType == CommentType.Documentation) { - if (SupportsDocstring(currentNode)) { - xmlDocComments.Add(comment); - } else { - AppendSingleLineComment(comment); - } - } - } - - void IOutputFormatter.PrintPreprocessingDirective(PreprocessingDirective directive, bool forceWriteInPreviousBlock) - { - } - - void IOutputFormatter.PrintBlankLine(bool forceWriteInPreviousBlock) - { - } - - #endregion - - /// - /// Checks that the field declaration has an initializer that - /// sets an initial value. - /// - static bool FieldHasInitialValue(VariableDeclaration variableDeclaration) - { - Expression initializer = variableDeclaration.Initializer; - return !initializer.IsNull; - } - - /// - /// Converts a post or pre increment expression to an assign statement. - /// This converts "i++" and "++i" to "i = i + 1" since python - /// does not support post increment expressions. - /// - object CreateIncrementStatement(UnaryOperatorExpression unaryOperatorExpression) - { - return CreateIncrementStatement(unaryOperatorExpression, 1, GetBinaryOperator(BinaryOperatorType.Add)); - } - - /// - /// Converts a post or pre decrement expression to an assign statement. - /// This converts "i--" and "--i" to "i -= 1" since python - /// does not support post increment expressions. - /// - object CreateDecrementStatement(UnaryOperatorExpression unaryOperatorExpression) - { - return CreateIncrementStatement(unaryOperatorExpression, 1, GetBinaryOperator(BinaryOperatorType.Subtract)); - } - - /// - /// Converts a post or pre increment expression to an assign statement. - /// This converts "i++" and "++i" to "i += 1" since python - /// does not support post increment expressions. - /// - object CreateIncrementStatement(UnaryOperatorExpression unaryOperatorExpression, int increment, string binaryOperator) - { - unaryOperatorExpression.Expression.AcceptVisitor(this, null); - Append(" " + binaryOperator + "= "); - Append(increment.ToString()); - - return null; - } - - /// - /// Creates the statement used to initialize the for loop. The - /// initialize statement will be "enumerator = variableName.GetEnumerator()" - /// which simulates what happens in a foreach loop. - /// - object CreateInitStatement(ForeachStatement foreachStatement) - { - Append("enumerator = "); - AppendForeachVariableName(foreachStatement); - Append(".GetEnumerator()"); - - return null; - } - - /// - /// Gets the name of the variable that is used in the - /// foreach loop as the item being iterated and appends the code. - /// - void AppendForeachVariableName(ForeachStatement foreachStatement) - { - IdentifierExpression identifierExpression = foreachStatement.Expression as IdentifierExpression; - InvocationExpression invocationExpression = foreachStatement.Expression as InvocationExpression; - MemberReferenceExpression memberRefExpression = foreachStatement.Expression as MemberReferenceExpression; - if (identifierExpression != null) { - Append(identifierExpression.Identifier); - } else if (invocationExpression != null) { - invocationExpression.AcceptVisitor(this, null); - } else if (memberRefExpression != null) { - memberRefExpression.AcceptVisitor(this, null); - } - } - - /// - /// Determines whether the identifier refers to a field in the - /// current class. - /// - bool IsField(string name) - { - // Check the current method's parameters. - if (IsMethodParameter(name)) { - return false; - } - - // Check the current class's fields. - if (constructorInfo != null) { - foreach (FieldDeclaration field in constructorInfo.Fields) { - foreach (VariableDeclaration variable in field.Fields) { - if (variable.Name == name) { - return true; - } - } - } - } - return false; - } - - bool IsMethodParameter(string name) - { - foreach (ParameterDeclarationExpression param in methodParameters) { - if (param.ParameterName == name) { - return true; - } - } - return false; - } - - bool IsProperty(string name) - { - return propertyNames.Contains(name); - } - - /// - /// Creates an attach statement (i.e. button.Click += ButtonClick) - /// or remove statement (i.e. button.Click -= ButtonClick) - /// - object CreateHandlerStatement(Expression eventExpression, string addRemoveOperator, Expression eventHandlerExpression) - { - CreateEventReferenceExpression(eventExpression); - Append(" " + addRemoveOperator + " "); - CreateDelegateCreateExpression(eventHandlerExpression); - return null; - } - - /// - /// Converts an expression to a CodeEventReferenceExpression - /// (i.e. the "button.Click" part of "button.Click += ButtonClick". - /// - object CreateEventReferenceExpression(Expression eventExpression) - { - // Create event reference. - MemberReferenceExpression memberRef = eventExpression as MemberReferenceExpression; - memberRef.AcceptVisitor(this, null); - return null; - } - - /// - /// Creates an event handler expression - /// (i.e. the "ButtonClick" part of "button.Click += ButtonClick") - /// - object CreateDelegateCreateExpression(Expression eventHandlerExpression) - { - // Create event handler expression. - IdentifierExpression identifierExpression = eventHandlerExpression as IdentifierExpression; - ObjectCreateExpression objectCreateExpression = eventHandlerExpression as ObjectCreateExpression; - MemberReferenceExpression memberRefExpression = eventHandlerExpression as MemberReferenceExpression; - if (identifierExpression != null) { - Append("self." + identifierExpression.Identifier); - } else if (memberRefExpression != null) { - memberRefExpression.AcceptVisitor(this, null); - } else if (objectCreateExpression != null) { - CreateDelegateCreateExpression(objectCreateExpression.Parameters[0]); - } - return null; - } - - /// - /// Determines whether the assignment expression is actually an - /// event handler attach statement. - /// - static bool IsAddEventHandler(AssignmentExpression assignmentExpression) - { - return (assignmentExpression.Op == AssignmentOperatorType.Add) && - (assignmentExpression.Left is MemberReferenceExpression); - } - - /// - /// Determines whether the assignment expression is actually an - /// event handler remove statement. - /// - static bool IsRemoveEventHandler(AssignmentExpression assignmentExpression) - { - return (assignmentExpression.Op == AssignmentOperatorType.Subtract) && - (assignmentExpression.Left is MemberReferenceExpression); - } - - void Append(string code) - { - codeBuilder.Append(code); - } - - void AppendIndented(string code) - { - codeBuilder.AppendIndented(code); - } - - void AppendIndentedPassStatement() - { - AppendIndentedLine("pass"); - } - - void AppendIndentedLine(string code) - { - codeBuilder.AppendIndentedLine(code); - } - - void AppendLine() - { - codeBuilder.AppendLine(); - } - - void IncreaseIndent() - { - codeBuilder.IncreaseIndent(); - } - - void DecreaseIndent() - { - codeBuilder.DecreaseIndent(); - } - - void CreateConstructor(PythonConstructorInfo constructorInfo) - { - if (constructorInfo.Constructor != null) { - AppendIndented("def __init__"); - AddParameters(constructorInfo.Constructor); - methodParameters = constructorInfo.Constructor.Parameters; - } else { - AppendIndented("def __init__(self):"); - } - AppendLine(); - - // Add fields at start of constructor. - IncreaseIndent(); - AppendDocstring(xmlDocComments); - if (constructorInfo.Fields.Count > 0) { - foreach (FieldDeclaration field in constructorInfo.Fields) { - CreateFieldInitialization(field); - } - } - - if (!IsEmptyConstructor(constructorInfo.Constructor)) { - constructorInfo.Constructor.Body.AcceptVisitor(this, null); - AppendLine(); - } else if (constructorInfo.Fields.Count == 0) { - AppendIndentedPassStatement(); - } else { - AppendLine(); - } - - DecreaseIndent(); - } - - /// - /// Returns true if the constructor has no statements in its body. - /// - static bool IsEmptyConstructor(ConstructorDeclaration constructor) - { - if (constructor != null) { - return constructor.Body.Children.Count == 0; - } - return true; - } - - /// - /// Creates a field initialization statement. - /// - void CreateFieldInitialization(FieldDeclaration field) - { - foreach (VariableDeclaration variable in field.Fields) { - // Ignore field if it has no initializer. - if (FieldHasInitialValue(variable)) { - AddTypeToArrayInitializerIfMissing(variable); - - string oldVariableName = variable.Name; - variable.Name = "self._" + variable.Name; - VisitVariableDeclaration(variable, null); - variable.Name = oldVariableName; - } - } - } - - void AddTypeToArrayInitializerIfMissing(VariableDeclaration variable) - { - ArrayCreateExpression arrayCreate = variable.Initializer as ArrayCreateExpression; - if (IsArrayMissingTypeToCreate(arrayCreate)) { - arrayCreate.CreateType = variable.TypeReference; - } - } - - bool IsArrayMissingTypeToCreate(ArrayCreateExpression arrayCreate) - { - if (arrayCreate != null) { - return String.IsNullOrEmpty(arrayCreate.CreateType.Type); - } - return false; - } - - /// - /// Adds the method or constructor parameters. - /// - void AddParameters(ParametrizedNode method) - { - Append("("); - List parameters = method.Parameters; - if (parameters.Count > 0) { - if (!IsStatic(method)) { - Append("self, "); - } - for (int i = 0; i < parameters.Count; ++i) { - if (i > 0) { - Append(", "); - } - Append(parameters[i].ParameterName); - } - } else { - if (!IsStatic(method)) { - Append("self"); - } - } - Append("):"); - } - - bool IsStatic(ParametrizedNode method) - { - return (method.Modifier & Modifiers.Static) == Modifiers.Static; - } - - /// - /// Creates assignments of the form: - /// i = 1 - /// - object CreateSimpleAssignment(AssignmentExpression assignmentExpression, string op, object data) - { - assignmentExpression.Left.AcceptVisitor(this, data); - Append(" " + op + " "); - assignmentExpression.Right.AcceptVisitor(this, data); - return null; - } - - /// - /// Creates the rhs of expressions such as: - /// i = -1 - /// i = +1 - /// - object CreateUnaryOperatorStatement(string op, Expression expression) - { - Append(op); - expression.AcceptVisitor(this, null); - return null; - } - - /// - /// Converts a switch case statement to an if/elif/else in Python. - /// - /// This contains the item being tested in the switch. - /// This contains the switch section currently being converted. - /// True if the section is the first in the switch. If true then - /// an if statement will be generated, otherwise an elif will be generated. - void CreateSwitchCaseCondition(Expression switchExpression, SwitchSection section, bool firstSection) - { - bool firstLabel = true; - foreach (CaseLabel label in section.SwitchLabels) { - if (firstLabel) { - if (label.IsDefault) { - // Create else condition. - AppendIndented("else"); - } else if (firstSection) { - // Create if condition. - AppendIndented(String.Empty); - CreateSwitchCaseCondition("if ", switchExpression, label); - } else { - // Create elif condition. - AppendIndented(String.Empty); - CreateSwitchCaseCondition("elif ", switchExpression, label); - } - } else { - CreateSwitchCaseCondition(" or ", switchExpression, label); - } - firstLabel = false; - } - - Append(":"); - AppendLine(); - } - - /// - /// Creates the switch test condition - /// - /// This is a string which is either "if ", "elif ", "else " or " or ". - void CreateSwitchCaseCondition(string prefix, Expression switchExpression, CaseLabel label) - { - Append(prefix); - switchExpression.AcceptVisitor(this, null); - Append(" == "); - label.Label.AcceptVisitor(this, null); - } - - /// - /// Creates the statements inside a switch case statement. - /// - void CreateSwitchCaseBody(SwitchSection section) - { - int statementsAdded = 0; - foreach (INode node in section.Children) { - if (node is BreakStatement) { - // ignore. - } else { - statementsAdded++; - node.AcceptVisitor(this, null); - } - } - - // Check for empty body. - if (statementsAdded == 0) { - AppendIndentedLine("pass"); - } - } - - /// - /// Gets the supported language either C# or VB.NET - /// - static SupportedLanguage GetSupportedLanguage(string fileName) - { - string extension = Path.GetExtension(fileName.ToLowerInvariant()); - if (extension == ".vb") { - return SupportedLanguage.VBNet; - } - return SupportedLanguage.CSharp; - } - - /// - /// Saves the method declaration if it is a main entry point. - /// - void SaveMethodIfMainEntryPoint(MethodDeclaration method) - { - if (method.Name == "Main") { - entryPointMethods.Add(method); - } - } - - /// - /// Returns true if the object being created is a generic. - /// - static bool IsGenericType(ObjectCreateExpression expression) - { - return expression.CreateType.GenericTypes.Count > 0; - } - - /// - /// Appends the types used when creating a generic surrounded by square brackets. - /// - void AppendGenericTypes(ObjectCreateExpression expression) - { - Append("["); - List typeRefs = expression.CreateType.GenericTypes; - for (int i = 0; i < typeRefs.Count; ++i) { - if (i != 0) { - Append(", "); - } - TypeReference typeRef = typeRefs[i]; - if (typeRef.IsArrayType) { - Append("Array[" + GetTypeName(typeRef) + "]"); - } else { - Append(GetTypeName(typeRef)); - } - } - Append("]"); - } - - /// - /// If the type is String or Int32 then it returns "str" and "int". - /// - /// If the type is a keyword (e.g. uint) then the TypeRef.Type returns - /// the full type name. It returns the short type name if the type is not a keyword. So - /// this method will strip the namespace from the name. - /// - string GetTypeName(TypeReference typeRef) - { - string name = typeRef.Type; - if (name == typeof(String).FullName) { - return "str"; - } else if ((name == typeof(int).FullName) || ((name == typeof(int).Name))) { - return "int"; - } else if (typeRef.IsKeyword) { - // Remove namespace from type name. - int index = name.LastIndexOf('.'); - if (index > 0) { - return name.Substring(index + 1); - } - } - return name; - } - - /// - /// Gets the type name that defines the method. - /// - static string GetTypeName(MethodDeclaration methodDeclaration) - { - TypeDeclaration type = methodDeclaration.Parent as TypeDeclaration; - return type.Name; - } - - void AppendMultilineComment(Comment comment) - { - string[] lines = comment.CommentText.Split(new char[] {'\n'}); - for (int i = 0; i < lines.Length; ++i) { - string line = "# " + lines[i].Trim(); - if ((i == 0) && !comment.CommentStartsLine) { - codeBuilder.AppendToPreviousLine(" " + line); - } else { - AppendIndentedLine(line); - } - } - } - - void AppendSingleLineComment(Comment comment) - { - if (comment.CommentStartsLine) { - codeBuilder.AppendIndentedLine("#" + comment.CommentText); - } else { - codeBuilder.AppendToPreviousLine(" #" + comment.CommentText); - } - } - - void AppendDocstring(List xmlDocComments) - { - if (xmlDocComments.Count > 1) { - // Multiline docstring. - for (int i = 0; i < xmlDocComments.Count; ++i) { - string line = xmlDocComments[i].CommentText; - if (i == 0) { - AppendIndented(Docstring); - } else { - AppendIndented(String.Empty); - } - Append(line); - AppendLine(); - } - AppendIndentedLine(Docstring); - } else if (xmlDocComments.Count == 1) { - // Single line docstring. - AppendIndentedLine(Docstring + xmlDocComments[0].CommentText + Docstring); - } - } - - /// - /// Returns true if the node is a type declaration or a method since these can have - /// python docstrings. - /// - bool SupportsDocstring(INode node) - { - return (node is TypeDeclaration) || (node is MethodDeclaration) || (node is ConstructorDeclaration); - } - - void AppendPropertyDecorator(PropertyDeclaration propertyDeclaration) - { - string propertyName = propertyDeclaration.Name; - AppendIndented(propertyName); - Append(" = property("); - - bool addedParameter = false; - if (propertyDeclaration.HasGetRegion) { - Append("fget=get_" + propertyName); - addedParameter = true; - } - - if (propertyDeclaration.HasSetRegion) { - if (addedParameter) { - Append(", "); - } - Append("fset=set_" + propertyName); - } - Append(")"); - AppendLine(); - } - - void AppendBaseTypes(List baseTypes) - { - Append("("); - if (baseTypes.Count == 0) { - Append("object"); - } else { - for (int i = 0; i < baseTypes.Count; ++i) { - TypeReference typeRef = baseTypes[i]; - if (i > 0) { - Append(", "); - } - Append(GetTypeName(typeRef)); - } - } - Append("):"); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonAstWalker.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonAstWalker.cs deleted file mode 100644 index b2b27952a9..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonAstWalker.cs +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using Microsoft.Scripting; -using System; -using System.Collections.Generic; -using System.IO; - -using ICSharpCode.SharpDevelop.Dom; -using IronPython.Compiler; -using IronPython.Compiler.Ast; -using IronPython.Runtime; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Walks the python parse tree. - /// - public class PythonAstWalker : PythonWalker - { - PythonCompilationUnit compilationUnit; - IClass currentClass; - PythonModule module; - - /// - /// All classes in a file take the namespace of the filename. - /// - public PythonAstWalker(IProjectContent projectContent, string fileName) - { - compilationUnit = new PythonCompilationUnit(projectContent, fileName); - } - - /// - /// Returns the compilation unit created after the Walk method - /// has been called. - /// - public ICompilationUnit CompilationUnit { - get { return compilationUnit; } - } - - /// - /// Walks the python statement returned from the parser. - /// - public void Walk(Statement statement) - { - statement.Walk(this); - } - - public override bool Walk(ClassDefinition classDefinition) - { - if (classDefinition.Parent != null) { - PythonClass c = new PythonClass(compilationUnit, classDefinition); - WalkClassBody(c, classDefinition.Body); - } - return false; - } - - void WalkClassBody(IClass c, Statement classBody) - { - currentClass = c; - classBody.Walk(this); - currentClass = null; - } - - public override bool Walk(FunctionDefinition functionDefinition) - { - if (functionDefinition.Body == null) { - return false; - } - - IClass c = GetClassBeingWalked(); - - PythonMethodDefinition methodDefinition = new PythonMethodDefinition(functionDefinition); - PythonMethod method = methodDefinition.CreateMethod(c); - if (method is PythonConstructor) { - FindFields(c, functionDefinition); - } - return false; - } - - /// - /// If the current class is null then create a module so a method outside of a class can be - /// parsed. - /// - IClass GetClassBeingWalked() - { - if (currentClass == null) { - // Walking a method outside a class. - CreateModule(); - return module; - } - return currentClass; - } - - /// - /// Creates the module which will act as a class so it can hold any methods defined in the module. - /// - void CreateModule() - { - if (module == null) { - module = new PythonModule(compilationUnit); - } - } - - void FindFields(IClass c, FunctionDefinition functionDefinition) - { - PythonClassFields fields = new PythonClassFields(functionDefinition); - fields.AddFields(c); - } - - /// - /// Walks an import statement and adds it to the compilation unit's - /// Usings. - /// - public override bool Walk(ImportStatement node) - { - PythonImport import = new PythonImport(compilationUnit.ProjectContent, node); - compilationUnit.UsingScope.Usings.Add(import); - return false; - } - - public override bool Walk(FromImportStatement node) - { - PythonFromImport import = new PythonFromImport(compilationUnit.ProjectContent, node); - compilationUnit.UsingScope.Usings.Add(import); - return false; - } - - public override bool Walk(AssignmentStatement node) - { - if (currentClass != null) { - FindProperty(node); - return false; - } - return base.Walk(node); - } - - void FindProperty(AssignmentStatement node) - { - PythonPropertyAssignment propertyAssignment = new PythonPropertyAssignment(node); - propertyAssignment.CreateProperty(currentClass); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonBuiltInModuleMemberName.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonBuiltInModuleMemberName.cs deleted file mode 100644 index 93ef685e7e..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonBuiltInModuleMemberName.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; - -namespace ICSharpCode.PythonBinding -{ - public class PythonBuiltInModuleMemberName : MemberName - { - public const string PythonBuiltInModuleName = "__builtin__"; - - public PythonBuiltInModuleMemberName(string memberName) - : base(PythonBuiltInModuleName, memberName) - { - } - - public static bool IsBuiltInModule(string name) - { - return name == PythonBuiltInModuleName; - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClass.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClass.cs deleted file mode 100644 index a9ca0aa284..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClass.cs +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using ICSharpCode.SharpDevelop.Dom; -using IronPython.Compiler.Ast; - -namespace ICSharpCode.PythonBinding -{ - public class PythonClass : DefaultClass - { - public PythonClass(ICompilationUnit compilationUnit, ClassDefinition classDefinition) - : base(compilationUnit, String.Empty) - { - GetFullyQualifiedName(classDefinition); - GetClassRegions(classDefinition); - AddBaseTypes(classDefinition.Bases); - - compilationUnit.Classes.Add(this); - } - - /// - /// Adds the namespace to the class name taken from the class definition. - /// - void GetFullyQualifiedName(ClassDefinition classDefinition) - { - string ns = CompilationUnit.UsingScope.NamespaceName; - FullyQualifiedName = String.Format("{0}.{1}", ns, classDefinition.Name); - } - - void GetClassRegions(ClassDefinition classDefinition) - { - GetRegion(classDefinition); - BodyRegion = PythonMethodOrClassBodyRegion.GetBodyRegion(classDefinition); - } - - /// - /// Gets the region of the scope statement (ClassDefinition). - /// - /// - /// A class region includes the body. - /// - void GetRegion(ScopeStatement statement) - { - Region = new DomRegion(statement.Start.Line, statement.Start.Column, statement.End.Line, statement.End.Column); - } - - /// - /// Looks for any base types for the class defined in the - /// list of expressions and adds them to the class. - /// - void AddBaseTypes(IList baseTypes) - { - foreach (Expression baseTypeExpression in baseTypes) { - AddBaseType(baseTypeExpression); - } - } - - void AddBaseType(Expression baseTypeExpression) - { - NameExpression nameExpression = baseTypeExpression as NameExpression; - MemberExpression memberExpression = baseTypeExpression as MemberExpression; - if (nameExpression != null) { - AddBaseType(nameExpression.Name); - } else if (memberExpression != null) { - AddBaseType(memberExpression); - } - } - - /// - /// Adds the named base type to the class. - /// - void AddBaseType(string name) - { - IReturnType returnType = CreateSearchClassReturnType(name); - BaseTypes.Add(returnType); - } - - void AddBaseType(MemberExpression memberExpression) - { - string name = PythonControlFieldExpression.GetMemberName(memberExpression); - AddBaseType(name); - } - - SearchClassReturnType CreateSearchClassReturnType(string name) - { - return new SearchClassReturnType(ProjectContent, this, 0, 0, name, 0); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassFields.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassFields.cs deleted file mode 100644 index 7570e35740..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassFields.cs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using ICSharpCode.SharpDevelop.Dom; -using IronPython.Compiler.Ast; - -namespace ICSharpCode.PythonBinding -{ - public class PythonClassFields : PythonWalker - { - FunctionDefinition functionDefinition; - IClass declaringType; - List fieldNamesAdded; - - public PythonClassFields(FunctionDefinition functionDefinition) - { - this.functionDefinition = functionDefinition; - } - - public void AddFields(IClass declaringType) - { - this.declaringType = declaringType; - fieldNamesAdded = new List(); - - functionDefinition.Body.Walk(this); - } - - public override bool Walk(AssignmentStatement node) - { - string fieldName = GetFieldName(node); - AddFieldToDeclaringType(fieldName); - return false; - } - - string GetFieldName(AssignmentStatement node) - { - string[] memberNames = PythonControlFieldExpression.GetMemberNames(node.Left[0] as MemberExpression); - return GetFieldName(memberNames); - } - - string GetFieldName(string[] memberNames) - { - if (memberNames.Length > 1) { - if (PythonSelfResolver.IsSelfExpression(memberNames[0])) { - return memberNames[1]; - } - } - return null; - } - - void AddFieldToDeclaringType(string fieldName) - { - if (fieldName != null) { - if (!fieldNamesAdded.Contains(fieldName)) { - DefaultField field = new DefaultField(declaringType, fieldName); - declaringType.Fields.Add(field); - fieldNamesAdded.Add(fieldName); - } - } - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassMembers.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassMembers.cs deleted file mode 100644 index d75d4bc47a..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassMembers.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PythonBinding -{ - public class PythonClassMembers - { - List members; - - public PythonClassMembers(IClass declaringType) - { - members = GetMembers(declaringType); - } - - public IMember FindMember(string memberName) - { - foreach (IMember member in members) { - if (member.Name == memberName) { - return member; - } - } - return null; - } - - List GetMembers(IClass declaringType) - { - List members = new List(); - members.AddRange(declaringType.Events); - members.AddRange(declaringType.Fields); - members.AddRange(declaringType.Properties); - members.AddRange(declaringType.Methods); - return members; - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassResolver.cs deleted file mode 100644 index 69e0fc0109..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassResolver.cs +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PythonBinding -{ - public class PythonClassResolver : IPythonResolver - { - PythonResolverContext resolverContext; - - public ResolveResult Resolve(PythonResolverContext resolverContext) - { - IClass matchingClass = GetClass(resolverContext); - if (matchingClass != null) { - return CreateTypeResolveResult(matchingClass); - } - return null; - } - - public IClass GetClass(PythonResolverContext resolverContext) - { - string name = resolverContext.Expression; - return GetClass(resolverContext, name); - } - - public IClass GetClass(PythonResolverContext resolverContext, string name) - { - this.resolverContext = resolverContext; - - if (String.IsNullOrEmpty(name)) { - return null; - } - - IClass matchedClass = resolverContext.GetClass(name); - if (matchedClass != null) { - return matchedClass; - } - - matchedClass = GetClassFromImportedNames(name); - if (matchedClass != null) { - return matchedClass; - } - - matchedClass = GetClassFromNamespaceThatImportsEverything(name); - if (matchedClass != null) { - return matchedClass; - } - - return GetClassFromDottedImport(name); - } - - TypeResolveResult CreateTypeResolveResult(IClass c) - { - return new TypeResolveResult(null, null, c); - } - - IClass GetClassFromImportedNames(string name) - { - string moduleName = resolverContext.GetModuleForImportedName(name); - if (moduleName != null) { - name = resolverContext.UnaliasImportedName(name); - string fullyQualifiedName = GetQualifiedClassName(moduleName, name); - return resolverContext.GetClass(fullyQualifiedName); - } - return null; - } - - string GetQualifiedClassName(string namespacePrefix, string className) - { - return namespacePrefix + "." + className; - } - - IClass GetClassFromNamespaceThatImportsEverything(string name) - { - foreach (string moduleName in resolverContext.GetModulesThatImportEverything()) { - string fullyQualifiedName = GetQualifiedClassName(moduleName, name); - IClass matchedClass = resolverContext.GetClass(fullyQualifiedName); - if (matchedClass != null) { - return matchedClass; - } - } - return null; - } - - IClass GetClassFromDottedImport(string name) - { - string moduleName = resolverContext.FindStartOfDottedModuleNameInImports(name); - if (moduleName != null) { - string fullyQualifiedName = UnaliasClassName(moduleName, name); - return resolverContext.GetClass(fullyQualifiedName); - } - return null; - } - - string UnaliasClassName(string moduleName, string fullClassName) - { - string actualModuleName = resolverContext.UnaliasImportedModuleName(moduleName); - string lastPartOfClassName = fullClassName.Substring(moduleName.Length + 1); - return GetQualifiedClassName(actualModuleName, lastPartOfClassName); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeBuilder.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeBuilder.cs deleted file mode 100644 index e239882f3c..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeBuilder.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel; -using System.Text; -using ICSharpCode.Scripting; - -namespace ICSharpCode.PythonBinding -{ - public class PythonCodeBuilder : ScriptingCodeBuilder - { - bool insertedCreateComponentsContainer; - - public PythonCodeBuilder() - { - } - - public PythonCodeBuilder(int initialIndent) - : base(initialIndent) - { - } - - /// - /// Inserts the following line of code before all the other lines of code: - /// - /// "self._components = System.ComponentModel.Container()" - /// - /// This line will only be inserted once. Multiple calls to this method will only result in one - /// line of code being inserted. - /// - public void InsertCreateComponentsContainer() - { - if (!insertedCreateComponentsContainer) { - string text = String.Format("self._components = {0}()", typeof(Container).FullName); - InsertIndentedLine(text); - insertedCreateComponentsContainer = true; - } - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeCompletionBinding.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeCompletionBinding.cs deleted file mode 100644 index f8f5fd46df..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeCompletionBinding.cs +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Editor; -using ICSharpCode.SharpDevelop.Editor.CodeCompletion; -using System.Collections.Generic; - -namespace ICSharpCode.PythonBinding -{ - public class PythonCodeCompletionBinding : DefaultCodeCompletionBinding - { - public PythonCodeCompletionBinding() - { - base.insightHandler = new PythonInsightWindowHandler(); - } - - /// - /// Shows the code completion window if the keyword is handled. - /// - /// The keyword string. - /// true if the keyword is handled; otherwise false. - public override bool HandleKeyword(ITextEditor editor, string word) - { - if (word != null) { - switch (word.ToLowerInvariant()) { - case "import": - case "from": - return HandleImportKeyword(editor); - } - } - return false; - } - - bool HandleImportKeyword(ITextEditor editor) - { - AbstractCompletionItemProvider provider = CreateKeywordCompletionItemProvider(); - ShowCodeCompletionWindow(provider, editor); - return true; - } - - protected virtual AbstractCompletionItemProvider CreateKeywordCompletionItemProvider() - { - return new PythonCodeCompletionItemProvider(); - } - - protected virtual void ShowCodeCompletionWindow(AbstractCompletionItemProvider completionItemProvider, ITextEditor editor) - { - completionItemProvider.ShowCompletion(editor); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeCompletionItemProvider.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeCompletionItemProvider.cs deleted file mode 100644 index 5c282abe2e..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeCompletionItemProvider.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Editor.CodeCompletion; - -namespace ICSharpCode.PythonBinding -{ - public class PythonCodeCompletionItemProvider : CodeCompletionItemProvider - { - protected override DefaultCompletionItemList CreateCompletionItemList() - { - return new PythonCompletionItemList(); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDeserializer.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDeserializer.cs deleted file mode 100644 index 8ac4ad8b33..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDeserializer.cs +++ /dev/null @@ -1,253 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel.Design; -using System.Drawing; -using System.Reflection; - -using ICSharpCode.Scripting; -using IronPython.Compiler; -using IronPython.Compiler.Ast; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Creates objects from python code. - /// - public class PythonCodeDeserializer - { - IComponentCreator componentCreator; - - public PythonCodeDeserializer(IComponentCreator componentCreator) - { - this.componentCreator = componentCreator; - } - - /// - /// Gets the arguments passed to the call expression. - /// - public List GetArguments(CallExpression expression) - { - List args = new List(); - foreach (Arg a in expression.Args) { - args.Add(Deserialize(a.Expression)); - } - return args; - } - - /// - /// Creates or gets the object specified in the python AST. - /// - /// - /// Null if the node cannot be deserialized. - /// - public object Deserialize(Node node) - { - if (node == null) { - throw new ArgumentNullException("node"); - } - - if (node is CallExpression) { - return Deserialize((CallExpression)node); - } else if (node is BinaryExpression) { - return Deserialize((BinaryExpression)node); - } else if (node is MemberExpression) { - return Deserialize((MemberExpression)node); - } else if (node is UnaryExpression) { - return Deserialize((UnaryExpression)node); - } else if (node is ConstantExpression) { - return Deserialize((ConstantExpression)node); - } else if (node is NameExpression) { - return Deserialize((NameExpression)node); - } - return null; - } - - /// - /// Deserializes expressions of the form: - /// - /// System.Windows.Form.AnchorStyles.Top | System.Windows.Form.AnchorStyles.Bottom - /// - public object Deserialize(BinaryExpression binaryExpression) - { - object lhs = Deserialize(binaryExpression.Left); - object rhs = Deserialize(binaryExpression.Right); - - int value = Convert.ToInt32(lhs) | Convert.ToInt32(rhs); - return Enum.ToObject(lhs.GetType(), value); - } - - /// - /// Deserializes expressions of the form: - /// - /// 1) System.Drawing.Color.FromArgb(0, 192, 0) - /// 2) System.Array[String](["a", "b"]) - /// - object Deserialize(CallExpression callExpression) - { - MemberExpression memberExpression = callExpression.Target as MemberExpression; - IndexExpression indexExpression = callExpression.Target as IndexExpression; - if (memberExpression != null) { - return DeserializeMethodCallExpression(callExpression, memberExpression); - } else if (indexExpression != null) { - return DeserializeCreateArrayExpression(callExpression, indexExpression); - } - return null; - } - - /// - /// Deserializes expressions of the form: - /// - /// 1) System.Windows.Forms.Cursors.AppStarting - /// - object Deserialize(MemberExpression memberExpression) - { - PythonControlFieldExpression field = PythonControlFieldExpression.Create(memberExpression); - Type type = GetType(field); - if (type != null) { - if (type.IsEnum) { - return Enum.Parse(type, field.MemberName); - } else { - BindingFlags propertyBindingFlags = BindingFlags.Public | BindingFlags.GetField | BindingFlags.Static | BindingFlags.Instance; - PropertyInfo propertyInfo = type.GetProperty(field.MemberName, propertyBindingFlags); - if (propertyInfo != null) { - return propertyInfo.GetValue(type, null); - } - } - } - return componentCreator.GetInstance(PythonControlFieldExpression.GetVariableName(field.MemberName)); - } - - /// - /// Deserializes expressions of the form: - /// - /// 1) self - /// - object Deserialize(NameExpression nameExpression) - { - string name = nameExpression.Name; - if ("self" == name.ToLowerInvariant()) { - return componentCreator.RootComponent; - } else { - bool result; - if (Boolean.TryParse(name, out result)) { - return result; - } - } - return componentCreator.GetInstance(name); - } - - Type GetType(PythonControlFieldExpression field) - { - string typeName = PythonControlFieldExpression.GetPrefix(field.FullMemberName); - return componentCreator.GetType(typeName); - } - - /// - /// Deserializes a call expression where the target is an array expression. - /// - /// System.Array[String](["a", "b"]) - /// - object DeserializeCreateArrayExpression(CallExpression callExpression, IndexExpression target) - { - ListExpression list = callExpression.Args[0].Expression as ListExpression; - Type arrayType = GetType(target.Index as MemberExpression); - Array array = Array.CreateInstance(arrayType, list.Items.Count); - for (int i = 0; i < list.Items.Count; ++i) { - Expression listItemExpression = list.Items[i]; - ConstantExpression constantExpression = listItemExpression as ConstantExpression; - MemberExpression memberExpression = listItemExpression as MemberExpression; - NameExpression nameExpression = listItemExpression as NameExpression; - CallExpression listItemCallExpression = listItemExpression as CallExpression; - if (constantExpression != null) { - array.SetValue(constantExpression.Value, i); - } else if (memberExpression != null) { - string name = PythonControlFieldExpression.GetVariableName(memberExpression.Name); - array.SetValue(componentCreator.GetComponent(name), i); - } else if (nameExpression != null) { - array.SetValue(componentCreator.GetInstance(nameExpression.Name), i); - } else if (listItemCallExpression != null) { - Type arrayInstanceType = GetType(listItemCallExpression.Target as MemberExpression); - object instance = componentCreator.CreateInstance(arrayInstanceType, GetArguments(listItemCallExpression), null, false); - array.SetValue(instance, i); - } - } - return array; - } - - Type GetType(MemberExpression memberExpression) - { - string typeName = PythonControlFieldExpression.GetMemberName(memberExpression); - return componentCreator.GetType(typeName); - } - - /// - /// Deserializes an expression of the form: - /// - /// System.Drawing.Color.FromArgb(0, 192, 0) - /// - object DeserializeMethodCallExpression(CallExpression callExpression, MemberExpression memberExpression) - { - PythonControlFieldExpression field = PythonControlFieldExpression.Create(memberExpression); - Type type = GetType(field); - if (type != null) { - foreach (MethodInfo method in type.GetMethods(BindingFlags.Public | BindingFlags.Static)) { - if (method.Name == field.MemberName) { - if (method.GetParameters().Length == callExpression.Args.Count) { - return method.Invoke(null, GetArguments(callExpression).ToArray()); - } - } - } - } else { - // Maybe it is a call to a constructor? - type = componentCreator.GetType(field.FullMemberName); - if (type != null) { - return componentCreator.CreateInstance(type, GetArguments(callExpression), null, false); - } - } - return null; - } - - object Deserialize(UnaryExpression expression) - { - object rhs = Deserialize(expression.Expression); - switch (expression.Op) { - case PythonOperator.Negate: - return Negate(rhs); - } - return rhs; - } - - object Negate(object value) - { - if (value is int) { - return -1 * (int)value; - } else if (value is double) { - return -1 * (double)value; - } - return value; - } - - object Deserialize(ConstantExpression expression) - { - return expression.Value; - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDomSerializer.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDomSerializer.cs deleted file mode 100644 index e740ca3f00..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDomSerializer.cs +++ /dev/null @@ -1,388 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; - -using ICSharpCode.Scripting; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Used to generate Python code after the form has been changed in the designer. - /// - public class PythonCodeDomSerializer : IScriptingCodeDomSerializer - { - PythonCodeBuilder codeBuilder; - string indentString = String.Empty; - string rootResourceName = String.Empty; - IDesignerSerializationManager serializationManager; - - public PythonCodeDomSerializer() - : this("\t") - { - } - - public PythonCodeDomSerializer(string indentString) - { - this.indentString = indentString; - } - - public string GenerateInitializeComponentMethodBody(IDesignerHost host, IDesignerSerializationManager serializationManager) - { - return GenerateInitializeComponentMethodBody(host, serializationManager, String.Empty, 0); - } - - public string GenerateInitializeComponentMethodBody(IDesignerHost host, IDesignerSerializationManager serializationManager, string rootNamespace, int initialIndent) - { - codeBuilder = new PythonCodeBuilder(initialIndent); - codeBuilder.IndentString = indentString; - - CodeMemberMethod method = FindInitializeComponentMethod(host, serializationManager); - GetResourceRootName(rootNamespace, host.RootComponent); - AppendStatements(method.Statements); - - return codeBuilder.ToString(); - } - - CodeMemberMethod FindInitializeComponentMethod(IDesignerHost host, IDesignerSerializationManager serializationManager) - { - this.serializationManager = serializationManager; - object rootComponent = host.RootComponent; - TypeCodeDomSerializer serializer = serializationManager.GetSerializer(rootComponent.GetType(), typeof(TypeCodeDomSerializer)) as TypeCodeDomSerializer; - CodeTypeDeclaration typeDec = serializer.Serialize(serializationManager, rootComponent, host.Container.Components) as CodeTypeDeclaration; - foreach (CodeTypeMember member in typeDec.Members) { - CodeMemberMethod method = member as CodeMemberMethod; - if (method != null) { - if (method.Name == "InitializeComponent") { - return method; - } - } - } - return null; - } - - void AppendStatements(CodeStatementCollection statements) - { - foreach (CodeStatement statement in statements) { - AppendStatement(statement); - } - } - - void AppendStatement(CodeStatement statement) - { - if (statement is CodeExpressionStatement) { - AppendExpressionStatement((CodeExpressionStatement)statement); - } else if (statement is CodeCommentStatement) { - AppendCommentStatement((CodeCommentStatement)statement); - } else if (statement is CodeAssignStatement) { - AppendAssignStatement((CodeAssignStatement)statement); - } else if (statement is CodeVariableDeclarationStatement) { - AppendVariableDeclarationStatement((CodeVariableDeclarationStatement)statement); - } else if (statement is CodeAttachEventStatement) { - AppendAttachEventStatement((CodeAttachEventStatement)statement); - } else { - Console.WriteLine("AppendStatement: " + statement.GetType().Name); - } - } - - void AppendExpressionStatement(CodeExpressionStatement statement) - { - codeBuilder.AppendIndented(String.Empty); - AppendExpression(statement.Expression); - codeBuilder.AppendLine(); - } - - void AppendCommentStatement(CodeCommentStatement statement) - { - codeBuilder.AppendIndented(String.Empty); - codeBuilder.Append("# "); - codeBuilder.Append(statement.Comment.Text); - codeBuilder.AppendLine(); - } - - void AppendExpression(CodeExpression expression) - { - if (expression is CodeMethodInvokeExpression) { - AppendMethodInvokeExpression((CodeMethodInvokeExpression)expression); - } else if (expression is CodePropertyReferenceExpression) { - AppendPropertyReferenceExpression((CodePropertyReferenceExpression)expression); - } else if (expression is CodeObjectCreateExpression) { - AppendObjectCreateExpression((CodeObjectCreateExpression)expression); - } else if (expression is CodePrimitiveExpression) { - AppendPrimitiveExpression((CodePrimitiveExpression)expression); - } else if (expression is CodeFieldReferenceExpression) { - AppendFieldReferenceExpression((CodeFieldReferenceExpression)expression); - } else if (expression is CodeThisReferenceExpression) { - AppendThisReferenceExpression(); - } else if (expression is CodeTypeReferenceExpression) { - AppendTypeReferenceExpression((CodeTypeReferenceExpression)expression); - } else if (expression is CodeArrayCreateExpression) { - AppendArrayCreateExpression((CodeArrayCreateExpression)expression); - } else if (expression is CodeVariableReferenceExpression) { - AppendVariableReferenceExpression((CodeVariableReferenceExpression)expression); - } else if (expression is CodeDelegateCreateExpression) { - AppendDelegateCreateExpression((CodeDelegateCreateExpression)expression); - } else if (expression is CodeCastExpression) { - AppendCastExpression((CodeCastExpression)expression); - } else if (expression is CodeBinaryOperatorExpression) { - AppendBinaryOperatorExpression((CodeBinaryOperatorExpression)expression); - } else { - Console.WriteLine("AppendExpression: " + expression.GetType().Name); - } - } - - /// - /// Appends a method call (e.g. "self.SuspendLayout()"); - /// - void AppendMethodInvokeExpression(CodeMethodInvokeExpression expression) - { - AppendMethodReferenceExpression(expression.Method); - AppendParameters(expression.Parameters); - } - - void AppendMethodReferenceExpression(CodeMethodReferenceExpression expression) - { - AppendExpression(expression.TargetObject); - codeBuilder.Append("."); - codeBuilder.Append(expression.MethodName); - } - - void AppendParameters(CodeExpressionCollection parameters) - { - codeBuilder.Append("("); - bool firstParameter = true; - foreach (CodeExpression expression in parameters) { - if (firstParameter) { - firstParameter = false; - } else { - codeBuilder.Append(", "); - } - AppendExpression(expression); - } - codeBuilder.Append(")"); - } - - void AppendAssignStatement(CodeAssignStatement statement) - { - codeBuilder.AppendIndented(String.Empty); - AppendExpression(statement.Left); - codeBuilder.Append(" = "); - AppendExpression(statement.Right); - codeBuilder.AppendLine(); - } - - void AppendPropertyReferenceExpression(CodePropertyReferenceExpression expression) - { - AppendExpression(expression.TargetObject); - codeBuilder.Append("."); - codeBuilder.Append(expression.PropertyName); - } - - void AppendObjectCreateExpression(CodeObjectCreateExpression expression) - { - AppendTypeReference(expression.CreateType); - AppendParameters(expression.Parameters); - } - - /// - /// Appends a constant (e.g. string or int). - /// - void AppendPrimitiveExpression(CodePrimitiveExpression expression) - { - codeBuilder.Append(PythonPropertyValueAssignment.ToString(expression.Value)); - } - - void AppendFieldReferenceExpression(CodeFieldReferenceExpression expression) - { - AppendExpression(expression.TargetObject); - codeBuilder.Append("."); - if (expression.FieldName != null) { - if (expression.TargetObject is CodeThisReferenceExpression) { - if (!IsInherited(expression.FieldName)) { - codeBuilder.Append("_"); - } - } - codeBuilder.Append(expression.FieldName); - } - } - - void AppendThisReferenceExpression() - { - codeBuilder.Append("self"); - } - - void AppendTypeReferenceExpression(CodeTypeReferenceExpression expression) - { - AppendTypeReference(expression.Type); - } - - void AppendTypeReference(CodeTypeReference typeRef) - { - string typeRefText = typeRef.BaseType.Replace('+', '.'); - codeBuilder.Append(typeRefText); - } - - /// - /// Creates an array expression: - /// - /// (System.Array[System.Object](\r\n" + - /// ["aaa", - /// "bbb", - /// "ccc\"])) - /// - void AppendArrayCreateExpression(CodeArrayCreateExpression expression) - { - codeBuilder.Append("System.Array["); - AppendTypeReference(expression.CreateType); - codeBuilder.Append("]"); - - AppendInitializers(expression.Initializers); - } - - /// - /// Appends initializers for an array. - /// - void AppendInitializers(CodeExpressionCollection initalizers) - { - codeBuilder.Append("("); - codeBuilder.AppendLine(); - codeBuilder.IncreaseIndent(); - codeBuilder.AppendIndented("["); - - bool firstInitializer = true; - foreach (CodeExpression expression in initalizers) { - if (firstInitializer) { - firstInitializer = false; - } else { - codeBuilder.Append(","); - codeBuilder.AppendLine(); - codeBuilder.AppendIndented(String.Empty); - } - AppendExpression(expression); - } - - codeBuilder.Append("])"); - codeBuilder.DecreaseIndent(); - } - - /// - /// Appends a local variable declaration. - /// - void AppendVariableDeclarationStatement(CodeVariableDeclarationStatement statement) - { - if (statement.Name == "resources") { - codeBuilder.AppendIndented("resources = System.Resources.ResourceManager(\""); - codeBuilder.Append(rootResourceName); - codeBuilder.Append("\", System.Reflection.Assembly.GetEntryAssembly())"); - codeBuilder.AppendLine(); - } else { - codeBuilder.AppendIndented(statement.Name); - codeBuilder.Append(" = "); - AppendExpression(statement.InitExpression); - codeBuilder.AppendLine(); - } - } - - void AppendVariableReferenceExpression(CodeVariableReferenceExpression expression) - { - codeBuilder.Append(expression.VariableName); - } - - void AppendAttachEventStatement(CodeAttachEventStatement statement) - { - codeBuilder.AppendIndented(String.Empty); - AppendExpression(statement.Event.TargetObject); - codeBuilder.Append("."); - codeBuilder.Append(statement.Event.EventName); - - codeBuilder.Append(" += "); - - AppendExpression(statement.Listener); - - codeBuilder.AppendLine(); - } - - void AppendDelegateCreateExpression(CodeDelegateCreateExpression expression) - { - AppendExpression(expression.TargetObject); - codeBuilder.Append("."); - codeBuilder.Append(expression.MethodName); - } - - void GetResourceRootName(string rootNamespace, IComponent component) - { - rootResourceName = component.Site.Name; - if (!String.IsNullOrEmpty(rootNamespace)) { - rootResourceName = rootNamespace + "." + rootResourceName; - } - } - - void AppendCastExpression(CodeCastExpression expression) - { - AppendExpression(expression.Expression); - } - - bool IsInherited(string componentName) - { - return IsInherited(serializationManager.GetInstance(componentName)); - } - - static bool IsInherited(object component) - { - InheritanceAttribute attribute = GetInheritanceAttribute(component); - if (attribute != null) { - return attribute.InheritanceLevel != InheritanceLevel.NotInherited; - } - return false; - } - - static InheritanceAttribute GetInheritanceAttribute(object component) - { - if (component != null) { - AttributeCollection attributes = TypeDescriptor.GetAttributes(component); - return attributes[typeof(InheritanceAttribute)] as InheritanceAttribute; - } - return null; - } - - /// - /// Appends expressions like "AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top" - /// - void AppendBinaryOperatorExpression(CodeBinaryOperatorExpression expression) - { - AppendExpression(expression.Left); - AppendBinaryOperator(expression.Operator); - AppendExpression(expression.Right); - } - - void AppendBinaryOperator(CodeBinaryOperatorType operatorType) - { - codeBuilder.Append(" "); - switch (operatorType) { - case CodeBinaryOperatorType.BitwiseOr: - codeBuilder.Append("|"); - break; - } - codeBuilder.Append(" "); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompilationUnit.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompilationUnit.cs deleted file mode 100644 index ab8a9fc7c4..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompilationUnit.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PythonBinding -{ - public class PythonCompilationUnit : DefaultCompilationUnit - { - public PythonCompilationUnit(IProjectContent projectContent, string fileName) - : base(projectContent) - { - this.FileName = fileName; - this.UsingScope = new PythonUsingScope(fileName); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompilerError.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompilerError.cs deleted file mode 100644 index e06447f203..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompilerError.cs +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using Microsoft.Scripting; -using System; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Saves information about a parser error reported by the - /// PythonCompilerSink. - /// - public class PythonCompilerError - { - string path = String.Empty; - string message = String.Empty; - string lineText = String.Empty; - SourceSpan location; - int errorCode; - Severity severity; - - public PythonCompilerError(string path, string message, string lineText, SourceSpan location, int errorCode, Severity severity) - { - this.path = path; - this.message = message; - this.lineText = lineText; - this.location = location; - this.errorCode = errorCode; - this.severity = severity; - } - - public override string ToString() - { - return String.Concat("[", errorCode, "][Sev:", severity.ToString(), "]", message, "\r\nLine: ", location.Start.Line, lineText, "\r\n", path, "\r\n"); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompilerSink.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompilerSink.cs deleted file mode 100644 index f78a14b034..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompilerSink.cs +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using Microsoft.Scripting; -using System; -using System.Collections.Generic; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Supresses exceptions thrown by the PythonParser when it - /// finds a parsing error. By default the simple compiler sink - /// throws an exception on a parsing error. - /// - public class PythonCompilerSink : ErrorSink - { - List errors = new List(); - - public PythonCompilerSink() - { - } - - public override void Add(SourceUnit source, string message, SourceSpan span, int errorCode, Severity severity) - { - int line = GetLine(span.Start.Line); - errors.Add(new PythonCompilerError(source.Path, message, source.GetCodeLine(line), span, errorCode, severity)); - } - - public List Errors { - get { return errors; } - } - - /// - /// Ensure the line number is valid. - /// - static int GetLine(int line) - { - if (line > 0) { - return line; - } - return 1; - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompletionItemList.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompletionItemList.cs deleted file mode 100644 index ba8fecc104..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCompletionItemList.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Editor.CodeCompletion; - -namespace ICSharpCode.PythonBinding -{ - public class PythonCompletionItemList : DefaultCompletionItemList - { - public override CompletionItemListKeyResult ProcessInput(char key) - { - if (IsNormalKey(key)) { - return CompletionItemListKeyResult.NormalKey; - } - return base.ProcessInput(key); - } - - bool IsNormalKey(char key) - { - return (key == '*') || (key == '('); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalker.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalker.cs deleted file mode 100644 index 348febff58..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalker.cs +++ /dev/null @@ -1,417 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Globalization; -using System.Reflection; -using System.Resources; -using System.Text; -using System.Windows.Forms; - -using ICSharpCode.Core; -using ICSharpCode.Scripting; -using ICSharpCode.SharpDevelop; -using IronPython.Compiler.Ast; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Visits the code's Python AST and creates a Windows Form. - /// - public class PythonComponentWalker : PythonWalker, IComponentWalker - { - IComponent component; - PythonControlFieldExpression fieldExpression; - IComponentCreator componentCreator; - bool walkingAssignment; - string componentName = String.Empty; - PythonCodeDeserializer deserializer; - ClassDefinition classDefinition; - bool walkingInitializeComponentMethod; - - public PythonComponentWalker(IComponentCreator componentCreator) - { - this.componentCreator = componentCreator; - deserializer = new PythonCodeDeserializer(componentCreator); - } - - /// - /// Creates a control either a UserControl or Form from the python code. - /// - public IComponent CreateComponent(string pythonCode) - { - PythonParser parser = new PythonParser(); - PythonAst ast = parser.CreateAst(@"Control.py", new StringTextBuffer(pythonCode)); - ast.Walk(this); - - // Did we find the InitializeComponent method? - if (component == null) { - throw new PythonComponentWalkerException("Unable to find InitializeComponents method."); - } - return component; - } - - /// - /// Gets the fully qualified name of the base class. - /// - public static string GetBaseClassName(ClassDefinition classDefinition) - { - if (classDefinition.Bases.Count > 0) { - Expression baseClassExpression = classDefinition.Bases[0]; - NameExpression nameExpression = baseClassExpression as NameExpression; - MemberExpression memberExpression = baseClassExpression as MemberExpression; - if (nameExpression != null) { - return nameExpression.Name; - } - return PythonControlFieldExpression.GetMemberName(memberExpression); - } - return String.Empty; - } - - public override bool Walk(ClassDefinition node) - { - classDefinition = node; - componentName = node.Name; - node.Body.Walk(this); - return false; - } - - public override bool Walk(FunctionDefinition node) - { - if (IsInitializeComponentMethod(node)) { - Type type = GetComponentType(); - component = componentCreator.CreateComponent(type, componentName); - IResourceReader reader = componentCreator.GetResourceReader(CultureInfo.InvariantCulture); - if (reader != null) { - reader.Dispose(); - } - walkingInitializeComponentMethod = true; - node.Body.Walk(this); - walkingInitializeComponentMethod = false; - } - return false; - } - - public override bool Walk(AssignmentStatement node) - { - if (!walkingInitializeComponentMethod) { - return false; - } - - if (node.Left.Count > 0) { - MemberExpression lhsMemberExpression = node.Left[0] as MemberExpression; - NameExpression lhsNameExpression = node.Left[0] as NameExpression; - if (lhsMemberExpression != null) { - fieldExpression = PythonControlFieldExpression.Create(lhsMemberExpression); - WalkMemberExpressionAssignmentRhs(node.Right); - } else if (lhsNameExpression != null) { - CallExpression callExpression = node.Right as CallExpression; - if (callExpression != null) { - object instance = CreateInstance(lhsNameExpression.Name.ToString(), callExpression); - if (instance == null) { - ThrowCouldNotFindTypeException(callExpression.Target as MemberExpression); - } - } - } - } - return false; - } - - public override bool Walk(ConstantExpression node) - { - if (!walkingInitializeComponentMethod) { - return false; - } - - fieldExpression.SetPropertyValue(componentCreator, node.Value); - return false; - } - - public override bool Walk(CallExpression node) - { - if (!walkingInitializeComponentMethod) { - return false; - } - - if (walkingAssignment) { - WalkAssignmentRhs(node); - } else { - WalkMethodCall(node); - } - return false; - } - - public override bool Walk(NameExpression node) - { - if (!walkingInitializeComponentMethod) { - return false; - } - - fieldExpression.SetPropertyValue(componentCreator, node); - return false; - } - - /// - /// Walks a statement of the form: - /// - /// self.a += self.b - /// - public override bool Walk(AugmentedAssignStatement node) - { - if (!walkingInitializeComponentMethod) { - return false; - } - - MemberExpression eventExpression = node.Left as MemberExpression; - string eventName = eventExpression.Name.ToString(); - fieldExpression = PythonControlFieldExpression.Create(eventExpression); - - MemberExpression eventHandlerExpression = node.Right as MemberExpression; - string eventHandlerName = eventHandlerExpression.Name.ToString(); - - IComponent currentComponent = fieldExpression.GetObject(componentCreator) as IComponent; - - EventDescriptor eventDescriptor = TypeDescriptor.GetEvents(currentComponent).Find(eventName, false); - PropertyDescriptor propertyDescriptor = componentCreator.GetEventProperty(eventDescriptor); - propertyDescriptor.SetValue(currentComponent, eventHandlerName); - return false; - } - - /// - /// Walks the binary expression which is the right hand side of an assignment statement. - /// - void WalkAssignment(BinaryExpression binaryExpression) - { - object value = deserializer.Deserialize(binaryExpression); - fieldExpression.SetPropertyValue(componentCreator, value); - } - - /// - /// Walks the right hand side of an assignment to a member expression. - /// - void WalkMemberExpressionAssignmentRhs(Expression rhs) - { - MemberExpression rhsMemberExpression = rhs as MemberExpression; - if (rhsMemberExpression != null) { - object propertyValue = GetPropertyValueFromAssignmentRhs(rhsMemberExpression); - fieldExpression.SetPropertyValue(componentCreator, propertyValue); - } else { - walkingAssignment = true; - BinaryExpression binaryExpression = rhs as BinaryExpression; - if (binaryExpression != null) { - WalkAssignment(binaryExpression); - } else { - rhs.Walk(this); - } - walkingAssignment = false; - } - } - - static bool IsInitializeComponentMethod(FunctionDefinition node) - { - string name = node.Name.ToString().ToLowerInvariant(); - return name == "initializecomponent" || name == "initializecomponents"; - } - - /// - /// Adds a component to the list of created objects. - /// - void AddComponent(string name, object obj) - { - IComponent component = obj as IComponent; - if (component != null) { - string variableName = PythonControlFieldExpression.GetVariableName(name); - componentCreator.Add(component, variableName); - } - } - - /// - /// Gets the type for the control being walked. - /// - Type GetComponentType() - { - string baseClass = GetBaseClassName(classDefinition); - Type type = componentCreator.GetType(baseClass); - if (type != null) { - return type; - } - - if (baseClass.Contains("UserControl")) { - return typeof(UserControl); - } - return typeof(Form); - } - - /// - /// Gets the property value from the member expression. The member expression is taken from the - /// right hand side of an assignment. - /// - object GetPropertyValueFromAssignmentRhs(MemberExpression memberExpression) - { - return deserializer.Deserialize(memberExpression); - } - - /// - /// Walks the right hand side of an assignment where the assignment expression is a call expression. - /// Typically the call expression will be a constructor call. - /// - /// Constructor call: System.Windows.Forms.Form() - /// - void WalkAssignmentRhs(CallExpression node) - { - MemberExpression memberExpression = node.Target as MemberExpression; - if (memberExpression != null) { - string name = fieldExpression.GetInstanceName(componentCreator); - object instance = CreateInstance(name, node); - if (instance != null) { - if (!fieldExpression.SetPropertyValue(componentCreator, instance)) { - AddComponent(fieldExpression.MemberName, instance); - } - } else { - object obj = deserializer.Deserialize(node); - if (obj != null) { - fieldExpression.SetPropertyValue(componentCreator, obj); - } else if (IsResource(memberExpression)) { - fieldExpression.SetPropertyValue(componentCreator, GetResource(node)); - } else { - ThrowCouldNotFindTypeException(memberExpression); - } - } - } else if (node.Target is IndexExpression) { - WalkArrayAssignmentRhs(node); - } - } - - /// - /// Walks a method call. Typical method calls are: - /// - /// self._menuItem1.Items.AddRange(...) - /// - /// This method will execute the method call. - /// - void WalkMethodCall(CallExpression node) - { - // Try to get the object being called. Try the form first then - // look for other controls. - object member = PythonControlFieldExpression.GetMember(component, node); - PythonControlFieldExpression field = PythonControlFieldExpression.Create(node); - if (member == null) { - member = field.GetMember(componentCreator); - } - - // Execute the method on the object. - if (member != null) { - object[] args = deserializer.GetArguments(node).ToArray(); - InvokeMethod(member, field.MethodName, args); - } - } - - void InvokeMethod(object obj, string name, object[] args) - { - Type type = obj.GetType(); - try { - type.InvokeMember(name, BindingFlags.InvokeMethod, Type.DefaultBinder, obj, args); - } catch (MissingMethodException ex) { - // Look for an explicitly implemented interface. - MethodInfo method = FindInterfaceMethod(type, name); - if (method != null) { - method.Invoke(obj, args); - } else { - throw ex; - } - } - } - - /// - /// Looks for an explicitly implemented interface. - /// - MethodInfo FindInterfaceMethod(Type type, string name) - { - string nameMatch = "." + name; - foreach (MethodInfo method in type.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance)) { - if (method.Name.EndsWith(nameMatch)) { - return method; - } - } - return null; - } - - /// - /// Creates a new instance with the specified name. - /// - object CreateInstance(string name, CallExpression node) - { - MemberExpression memberExpression = node.Target as MemberExpression; - if (memberExpression != null) { - string typeName = PythonControlFieldExpression.GetMemberName(memberExpression); - Type type = componentCreator.GetType(typeName); - if (type != null) { - if (type.IsAssignableFrom(typeof(ComponentResourceManager))) { - return componentCreator.CreateInstance(type, new object[0], name, false); - } - List args = deserializer.GetArguments(node); - return componentCreator.CreateInstance(type, args, name, false); - } - } - return null; - } - - /// - /// Returns true if the expression is of the form: - /// - /// resources.GetObject(...) or - /// resources.GetString(...) - /// - bool IsResource(MemberExpression memberExpression) - { - string fullName = PythonControlFieldExpression.GetMemberName(memberExpression); - return fullName.StartsWith("resources.", StringComparison.InvariantCultureIgnoreCase); - } - - object GetResource(CallExpression callExpression) - { - IResourceReader reader = componentCreator.GetResourceReader(CultureInfo.InvariantCulture); - if (reader != null) { - using (ResourceSet resources = new ResourceSet(reader)) { - List args = deserializer.GetArguments(callExpression); - return resources.GetObject(args[0] as String); - } - } - return null; - } - - /// - /// Walks the right hand side of an assignment when the assignment is an array creation. - /// - void WalkArrayAssignmentRhs(CallExpression callExpression) - { - object array = deserializer.Deserialize(callExpression); - fieldExpression.SetPropertyValue(componentCreator, array); - } - - void ThrowCouldNotFindTypeException(MemberExpression memberExpression) - { - string typeName = PythonControlFieldExpression.GetMemberName(memberExpression); - throw new PythonComponentWalkerException(String.Format(StringParser.Parse("${res:ICSharpCode.PythonBinding.UnknownTypeName}"), typeName)); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalkerException.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalkerException.cs deleted file mode 100644 index 1ef014daaf..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalkerException.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Exception thrown by the PythonComponentWalker class. - /// - public class PythonComponentWalkerException : Exception - { - public PythonComponentWalkerException(string message) : base(message) - { - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsole.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsole.cs deleted file mode 100644 index e5c66068f2..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsole.cs +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.IO; - -using ICSharpCode.Scripting; -using Microsoft.Scripting.Hosting.Shell; - -namespace ICSharpCode.PythonBinding -{ - public class PythonConsole : ThreadSafeScriptingConsole, IConsole, IMemberProvider - { - IScriptingConsoleTextEditor textEditor; - IControlDispatcher dispatcher; - - public PythonConsole(IScriptingConsoleTextEditor textEditor, IControlDispatcher dispatcher) - : this(new ScriptingConsole(textEditor), dispatcher) - { - this.textEditor = textEditor; - } - - PythonConsole(ScriptingConsole console, IControlDispatcher dispatcher) - : base(console, dispatcher) - { - this.dispatcher = dispatcher; - console.MemberProvider = this; - } - - public ScriptingConsoleOutputStream CreateOutputStream() - { - return new ScriptingConsoleOutputStream(textEditor, dispatcher); - } - - public CommandLine CommandLine { get; set; } - - public TextWriter Output { - get { return null; } - set { } - } - - public TextWriter ErrorOutput { - get { return null; } - set { } - } - - /// - /// Gets the member names of the specified item. - /// - public IList GetMemberNames(string name) - { - return CommandLine.GetMemberNames(name); - } - - public IList GetGlobals(string name) - { - return CommandLine.GetGlobals(name); - } - - public void Write(string text, Style style) - { - base.Write(text, (ScriptingStyle)style); - } - - public void WriteLine(string text, Style style) - { - base.WriteLine(text, (ScriptingStyle)style); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsoleApplication.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsoleApplication.cs deleted file mode 100644 index 2f2e8499f1..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsoleApplication.cs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Diagnostics; -using System.Text; -using ICSharpCode.Scripting; - -namespace ICSharpCode.PythonBinding -{ - public class PythonConsoleApplication : ScriptingConsoleApplication - { - PythonAddInOptions options; - - public PythonConsoleApplication(PythonAddInOptions options) - { - this.options = options; - } - - public override string FileName { - get { return options.PythonFileName; } - } - - protected override void AddArguments(ScriptingCommandLineBuilder commandLine) - { - commandLine.AppendBooleanOptionIfTrue("-X:Debug", Debug); - commandLine.AppendQuotedStringIfNotEmpty(ScriptFileName); - commandLine.AppendStringIfNotEmpty(ScriptCommandLineArguments); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsoleHost.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsoleHost.cs deleted file mode 100644 index 60bebbca9d..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsoleHost.cs +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Text; -using System.Threading; - -using ICSharpCode.Scripting; -using IronPython.Hosting; -using IronPython.Runtime; -using Microsoft.Scripting.Hosting; -using Microsoft.Scripting.Hosting.Shell; - -namespace ICSharpCode.PythonBinding -{ - public class PythonConsoleHost : ConsoleHost, IScriptingConsoleHost - { - Thread thread; - PythonConsole pythonConsole; - - public PythonConsoleHost(IScriptingConsoleTextEditor textEditor, IControlDispatcher dispatcher) - { - pythonConsole = new PythonConsole(textEditor, dispatcher); - } - - public IScriptingConsole ScriptingConsole { - get { return pythonConsole; } - } - - protected override Type Provider { - get { return typeof(PythonContext); } - } - - /// - /// Runs the console host in its own thread. - /// - public void Run() - { - thread = new Thread(RunConsole); - thread.Start(); - } - - public void Dispose() - { - if (pythonConsole != null) { - pythonConsole.Dispose(); - } - - if (thread != null) { - thread.Join(); - } - } - - protected override CommandLine CreateCommandLine() - { - return new PythonCommandLine(); - } - - protected override OptionsParser CreateOptionsParser() - { - return new PythonOptionsParser(); - } - - /// - /// After the engine is created the standard output is replaced with our custom Stream class so we - /// can redirect the stdout to the text editor window. - /// This can be done in this method since the Runtime object will have been created before this method - /// is called. - /// - protected override IConsole CreateConsole(ScriptEngine engine, CommandLine commandLine, ConsoleOptions options) - { - ScriptingConsoleOutputStream stream = pythonConsole.CreateOutputStream(); - SetOutput(stream); - pythonConsole.CommandLine = commandLine; - return pythonConsole; - } - - protected virtual void SetOutput(ScriptingConsoleOutputStream stream) - { - Runtime.IO.SetOutput(stream, Encoding.UTF8); - } - - void RunConsole() - { - Run(new string[0]); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsolePad.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsolePad.cs deleted file mode 100644 index 8c2a5a353f..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsolePad.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.Scripting; - -namespace ICSharpCode.PythonBinding -{ - public class PythonConsolePad : ScriptingConsolePad - { - protected override IScriptingConsoleHost CreateConsoleHost(IScriptingConsoleTextEditor consoleTextEditor, - IControlDispatcher dispatcher) - { - return new PythonConsoleHost(consoleTextEditor, dispatcher); - } - - protected override string SyntaxHighlightingName { - get { return "Python"; } - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConstructor.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConstructor.cs deleted file mode 100644 index 2a3e8261bd..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConstructor.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; -using IronPython.Compiler.Ast; - -namespace ICSharpCode.PythonBinding -{ - public class PythonConstructor : PythonMethod - { - public PythonConstructor(IClass declaringType, FunctionDefinition methodDefinition) - : base(declaringType, methodDefinition, "#ctor") - { - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonControlFieldExpression.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonControlFieldExpression.cs deleted file mode 100644 index e135ff8b1a..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonControlFieldExpression.cs +++ /dev/null @@ -1,533 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Reflection; -using System.Text; -using System.Windows.Forms; - -using ICSharpCode.Scripting; -using IronPython.Compiler.Ast; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Represents a member field expression in a Control or Form: - /// - /// self._textBox1 - /// self._textBox1.Name - /// - public class PythonControlFieldExpression - { - string memberName = String.Empty; - string fullMemberName = String.Empty; - string variableName = String.Empty; - string methodName = String.Empty; - bool selfReference; - - public PythonControlFieldExpression(string memberName, string variableName, string methodName, string fullMemberName) - { - this.memberName = memberName; - this.variableName = variableName; - this.methodName = methodName; - this.fullMemberName = fullMemberName; - selfReference = ContainsSelfReference(fullMemberName); - } - - /// - /// From a member expression of the form: self._textBox1.Name this property will return "Name". - /// - public string MemberName { - get { return memberName; } - } - - /// - /// From a member expression of the form: self._textBox1.Name this property will return "self._textBox1.Name". - /// - public string FullMemberName { - get { return fullMemberName; } - } - - /// - /// From a member expression of the form: self._textBox1.Name this property will return "textBox1". - /// - public string VariableName { - get { return variableName; } - } - - /// - /// Returns the method being called by the field reference. - /// - public string MethodName { - get { return methodName; } - } - - /// - /// Returns whether the variable is for a field or not. - /// - public bool IsSelfReference { - get { return selfReference; } - } - - public override string ToString() - { - return "[VariableName: " + variableName + " FullMemberName: " + fullMemberName + "]"; - } - - public override bool Equals(object obj) - { - PythonControlFieldExpression rhs = obj as PythonControlFieldExpression; - if (rhs != null) { - return rhs.fullMemberName == fullMemberName && rhs.variableName == variableName; - } - return false; - } - - public override int GetHashCode() - { - return fullMemberName.GetHashCode(); - } - - /// - /// Creates a PythonControlField from a member expression: - /// - /// self._textBox1 - /// self._textBox1.Name - /// - public static PythonControlFieldExpression Create(MemberExpression expression) - { - return Create(GetMemberNames(expression)); - } - - /// - /// Creates a PythonControlField from a call expression: - /// - /// self._menuItem1.Items.AddRange(...) - /// - public static PythonControlFieldExpression Create(CallExpression expression) - { - string[] allNames = GetMemberNames(expression.Target as MemberExpression); - - // Remove last member since it is the method name. - int lastItemIndex = allNames.Length - 1; - string[] memberNames = new string[lastItemIndex]; - Array.Copy(allNames, memberNames, lastItemIndex); - - PythonControlFieldExpression field = Create(memberNames); - field.methodName = allNames[lastItemIndex]; - return field; - } - - /// - /// From a name such as "System.Windows.Forms.Cursors.AppStarting" this method returns: - /// "System.Windows.Forms.Cursors" - /// - public static string GetPrefix(string name) - { - int index = name.LastIndexOf('.'); - if (index > 0) { - return name.Substring(0, index); - } - return name; - } - - /// - /// Removes the underscore from the variable name. - /// - public static string GetVariableName(string name) - { - if (!String.IsNullOrEmpty(name)) { - if (name.Length > 0) { - if (name[0] == '_') { - return name.Substring(1); - } - } - } - return name; - } - - /// - /// Gets the fully qualified name being referenced in the MemberExpression. - /// - public static string GetMemberName(MemberExpression expression) - { - return GetMemberName(GetMemberNames(expression)); - } - - /// - /// Gets the member names that make up the MemberExpression in order. - /// - public static string[] GetMemberNames(MemberExpression expression) - { - List names = new List(); - while (expression != null) { - names.Insert(0, expression.Name); - - NameExpression nameExpression = expression.Target as NameExpression; - expression = expression.Target as MemberExpression; - if (expression == null) { - if (nameExpression != null) { - names.Insert(0, nameExpression.Name); - } - } - } - return names.ToArray(); - } - - /// - /// Returns true if the variable has a property with the specified name. - /// - public bool HasPropertyValue(IComponentCreator componentCreator, string name) - { - object component = GetObject(componentCreator); - if (component != null) { - return TypeDescriptor.GetProperties(component).Find(name, true) != null; - } - return false; - } - - /// - /// Gets the name of the instance. If the name matches a property of the current component being created - /// then this method returns null. - /// - public string GetInstanceName(IComponentCreator componentCreator) - { - if (IsSelfReference) { - if (!HasPropertyValue(componentCreator, memberName)) { - return variableName; - } - } - return null; - } - - /// - /// Looks for a field in the component with the given name. - /// - public static object GetInheritedObject(string name, object component) - { - if (component != null) { - FieldInfo[] fields = component.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); - foreach (FieldInfo field in fields) { - if (String.Equals(name, field.Name, StringComparison.InvariantCultureIgnoreCase)) { - return field.GetValue(component); - } - } - } - return null; - } - - /// - /// Gets the object that the field expression variable refers to. - /// - /// - /// This method will also check form's base class for any inherited objects that match - /// the object being referenced. - /// - public object GetObject(IComponentCreator componentCreator) - { - if (variableName.Length > 0) { - object component = componentCreator.GetComponent(variableName); - if (component != null) { - return component; - } - return GetInheritedObject(variableName, componentCreator.RootComponent); - } - return componentCreator.RootComponent; - } - - /// - /// Returns the object that the property is defined on. This method may just return the object - /// passed to it if the property is defined on that object. - /// - /// The object parameter must be equivalent to the object referred to - /// by the variable name in this PythonControlFieldExpression - /// (e.g. button1 in self._button1.FlatAppearance.BorderSize). - public object GetObjectForMemberName(object component) - { - string[] members = fullMemberName.Split('.'); - int startIndex = GetMembersStartIndex(members); - - object currentComponent = component; - for (int i = startIndex; i < members.Length - 1; ++i) { - PropertyDescriptor propertyDescriptor = TypeDescriptor.GetProperties(currentComponent).Find(members[i], true); - if (propertyDescriptor == null) { - return null; - } - currentComponent = propertyDescriptor.GetValue(currentComponent); - } - return currentComponent; - } - - /// - /// Sets the property value that is referenced by this field expression. - /// - /// - /// This method checks that the name expression matches a created instance before - /// converting the name expression as a string and setting the property value. - /// - public bool SetPropertyValue(IComponentCreator componentCreator, NameExpression nameExpression) - { - object component = GetComponent(componentCreator); - PropertyDescriptor property = GetProperty(component, memberName); - if (property != null) { - string name = nameExpression.Name; - if (property.PropertyType != typeof(bool)) { - if ("self" == name) { - return SetPropertyValue(component, memberName, componentCreator.RootComponent); - } else { - object instance = componentCreator.GetInstance(name); - if (instance != null) { - return SetPropertyValue(component, memberName, instance); - } - } - } - return SetPropertyValue(component, memberName, name); - } - return false; - } - - /// - /// Sets the property value that is referenced by this field expression. - /// - /// - /// Checks the field expression to see if it references an class instance variable (e.g. self._treeView1) - /// or a variable that is local to the InitializeComponent method (e.g. treeNode1.BackColor) - /// - public bool SetPropertyValue(IComponentCreator componentCreator, object propertyValue) - { - object component = GetComponent(componentCreator); - return SetPropertyValue(component, memberName, propertyValue); - } - - /// - /// Converts the value to the property's type if required. - /// - public static object ConvertPropertyValue(PropertyDescriptor propertyDescriptor, object propertyValue) - { - if (propertyValue != null) { - Type propertyValueType = propertyValue.GetType(); - if (!propertyDescriptor.PropertyType.IsAssignableFrom(propertyValueType)) { - if (propertyDescriptor.Converter.CanConvertFrom(propertyValueType)) { - return propertyDescriptor.Converter.ConvertFrom(propertyValue); - } - TypeConverter converter = TypeDescriptor.GetConverter(propertyValue); - return converter.ConvertTo(propertyValue, propertyDescriptor.PropertyType); - } - } - return propertyValue; - } - - /// - /// Gets the member object that matches the field member. - /// - /// For a field: - /// - /// self._menuStrip.Items.AddRange() - /// - /// This method returns: - /// - /// Items - /// - public object GetMember(IComponentCreator componentCreator) - { - object obj = componentCreator.GetComponent(variableName); - if (obj == null) { - obj = componentCreator.GetInstance(variableName); - if (obj == null) { - obj = GetInheritedObject(memberName, componentCreator.RootComponent); - if ((obj == null) && !IsSelfReference) { - obj = componentCreator.GetInstance(fullMemberName); - } - } - } - - if (obj != null) { - string[] memberNames = fullMemberName.Split('.'); - int startIndex = GetMembersStartIndex(memberNames); - return GetMember(obj, memberNames, startIndex, memberNames.Length - 1); - } - return null; - } - - /// - /// Gets the member object that matches the field member. - /// - /// - /// The member names array should contain all items including self, for example: - /// - /// self - /// Controls - /// - public static object GetMember(object obj, CallExpression expression) - { - string[] memberNames = GetMemberNames(expression.Target as MemberExpression); - if (ContainsSelfReference(memberNames)) { - return GetMember(obj, memberNames, 1, memberNames.Length - 2); - } - return null; - } - - /// - /// Gets the member that matches the last item in the memberNames array. - /// - /// The point at which to start looking in the memberNames. - /// The last memberNames item to look at. - static object GetMember(object obj, string[] memberNames, int startIndex, int endIndex) - { - for (int i = startIndex; i <= endIndex; ++i) { - Type type = obj.GetType(); - string name = memberNames[i]; - - // Try class members excluding inherited members first. - BindingFlags propertyBindingFlags = BindingFlags.Public | BindingFlags.GetField | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly; - PropertyInfo property = type.GetProperty(name, propertyBindingFlags); - if (property == null) { - // Try inherited members. - propertyBindingFlags = propertyBindingFlags & ~BindingFlags.DeclaredOnly; - property = type.GetProperty(name, propertyBindingFlags); - } - - if (property != null) { - obj = property.GetValue(obj, null); - } else { - return null; - } - } - return obj; - } - - static string GetMemberName(string[] names) - { - return String.Join(".", names); - } - - /// - /// Gets the variable name from an expression of the form: - /// - /// self._textBox1.Name - /// - /// Returns "textBox1" - /// - /// - /// If there is no self part then the variable name is the first part of the name. - /// - static string GetVariableNameFromSelfReference(string name) - { - if (ContainsSelfReference(name)) { - name = name.Substring(5); - } - - int endIndex = name.IndexOf('.'); - if (endIndex > 0) { - return GetVariableName(name.Substring(0, endIndex)); - } else if (name.StartsWith("_")) { - return GetVariableName(name); - } - return String.Empty; - } - - static PythonControlFieldExpression Create(string[] memberNames) - { - string memberName = String.Empty; - if (memberNames.Length > 1) { - memberName = memberNames[memberNames.Length - 1]; - } - string fullMemberName = PythonControlFieldExpression.GetMemberName(memberNames); - return new PythonControlFieldExpression(memberName, GetVariableNameFromSelfReference(fullMemberName), String.Empty, fullMemberName); - } - - static bool ContainsSelfReference(string name) - { - return name.StartsWith("self.", StringComparison.InvariantCultureIgnoreCase); - } - - static bool ContainsSelfReference(string[] members) - { - if (members.Length > 0) { - return "self".Equals(members[0], StringComparison.InvariantCultureIgnoreCase); - } - return false; - } - - /// - /// Returns the index into the members array where the members actually start. - /// The "self" and variable name are skipped. - /// - int GetMembersStartIndex(string[] members) - { - if (ContainsSelfReference(members)) { - // Skip self over when searching for member. - return 2; - } - return 1; - } - - /// - /// Sets the value of a property on the component. - /// - bool SetPropertyValue(object component, string name, object propertyValue) - { - PropertyDescriptor property = GetProperty(component, name); - if (property != null) { - if (OverrideNameProperty(component, name)) { - propertyValue = variableName; - } else { - propertyValue = ConvertPropertyValue(property, propertyValue); - } - property.SetValue(component, propertyValue); - return true; - } - return false; - } - - /// - /// Override the name property with the instance variable name when the component is a - /// ToolStripSeparator to support BindingNavigator separators using the same value for the - /// name property. - /// - bool OverrideNameProperty(object component, string property) - { - if (property == "Name") { - return component is ToolStripSeparator; - } - return false; - } - - /// - /// Gets the component that this field refers to. - /// - object GetComponent(IComponentCreator componentCreator) - { - object component = null; - if (IsSelfReference) { - component = GetObject(componentCreator); - component = GetObjectForMemberName(component); - } else { - component = componentCreator.GetInstance(variableName); - } - return component; - } - - static PropertyDescriptor GetProperty(object component, string name) - { - return TypeDescriptor.GetProperties(component).Find(name, true); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerGenerator.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerGenerator.cs deleted file mode 100644 index 95c9323f2a..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerGenerator.cs +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Text; - -using ICSharpCode.FormsDesigner; -using ICSharpCode.Scripting; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Editor; -using ICSharpCode.SharpDevelop.Project; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Form's designer generator for the Python language. - /// - public class PythonDesignerGenerator : ScriptingDesignerGenerator - { - public PythonDesignerGenerator(ITextEditorOptions textEditorOptions) - : base(textEditorOptions) - { - } - - public override IScriptingCodeDomSerializer CreateCodeDomSerializer(ITextEditorOptions options) - { - return new PythonCodeDomSerializer(options.IndentationString); - } - - /// - /// Returns the generated event handler. - /// - public override string CreateEventHandler(string eventMethodName, string body, string indentation) - { - if (String.IsNullOrEmpty(body)) { - body = "pass"; - } - - StringBuilder eventHandler = new StringBuilder(); - - eventHandler.Append(indentation); - eventHandler.Append("def "); - eventHandler.Append(eventMethodName); - eventHandler.Append("(self, sender, e):"); - eventHandler.AppendLine(); - eventHandler.Append(indentation); - eventHandler.Append(TextEditorOptions.IndentationString); - eventHandler.Append(body); - - return eventHandler.ToString(); - } - - /// - /// Converts from the DOM region to a document region. - /// - public override DomRegion GetBodyRegionInDocument(IMethod method) - { - DomRegion bodyRegion = method.BodyRegion; - return new DomRegion(bodyRegion.BeginLine + 1, 1, bodyRegion.EndLine + 1, 1); - } - - public override int InsertEventHandler(IDocument document, string eventHandler) - { - int line = document.TotalNumberOfLines; - IDocumentLine lastLineSegment = document.GetLine(line); - int offset = lastLineSegment.Offset + lastLineSegment.Length; - - string newContent = "\r\n" + eventHandler; - if (lastLineSegment.Length > 0) { - // Add an extra new line between the last line and the event handler. - newContent = "\r\n" + newContent; - } - document.Insert(offset, newContent); - - // Set position so it points to the line - // where the event handler was inserted. - return line + 1; - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerLoader.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerLoader.cs deleted file mode 100644 index e3809947de..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerLoader.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Security.Permissions; -using ICSharpCode.Scripting; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Loads the form or control's code so the forms designer can - /// display it. - /// - [PermissionSet(SecurityAction.InheritanceDemand, Name="FullTrust")] - [PermissionSet(SecurityAction.LinkDemand, Name="FullTrust")] - public class PythonDesignerLoader : ScriptingDesignerLoader - { - public PythonDesignerLoader(IScriptingDesignerGenerator generator) - : base(generator) - { - } - - protected override IComponentWalker CreateComponentWalker(IComponentCreator componentCreator) - { - return new PythonComponentWalker(componentCreator); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerLoaderProvider.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerLoaderProvider.cs deleted file mode 100644 index 11605962ff..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerLoaderProvider.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel.Design.Serialization; -using ICSharpCode.FormsDesigner; -using ICSharpCode.Scripting; - -namespace ICSharpCode.PythonBinding -{ - public class PythonDesignerLoaderProvider : IDesignerLoaderProvider - { - public PythonDesignerLoaderProvider() - { - } - - public DesignerLoader CreateLoader(IDesignerGenerator generator) - { - return new PythonDesignerLoader(generator as IScriptingDesignerGenerator); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonExpression.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonExpression.cs deleted file mode 100644 index 72b6183fec..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonExpression.cs +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using Microsoft.Scripting; -using Microsoft.Scripting.Hosting; -using Microsoft.Scripting.Hosting.Providers; -using Microsoft.Scripting.Runtime; -using IronPython.Compiler; -using IronPython.Runtime; - -namespace ICSharpCode.PythonBinding -{ - public class PythonExpression - { - Tokenizer tokenizer; - Token currentToken; - - public PythonExpression(ScriptEngine engine, string expression) - { - Init(engine, expression); - } - - void Init(ScriptEngine engine, string expression) - { - PythonContext context = HostingHelpers.GetLanguageContext(engine) as PythonContext; - SourceUnit source = CreateSourceUnit(context, expression); - CreateTokenizer(source); - } - - SourceUnit CreateSourceUnit(PythonContext context, string expression) - { - StringTextContentProvider textProvider = new StringTextContentProvider(expression); - return context.CreateSourceUnit(textProvider, String.Empty, SourceCodeKind.SingleStatement); - } - - void CreateTokenizer(SourceUnit source) - { - PythonCompilerSink sink = new PythonCompilerSink(); - PythonCompilerOptions options = new PythonCompilerOptions(); - - tokenizer = new Tokenizer(sink, options); - tokenizer.Initialize(source); - } - - public Token GetNextToken() - { - currentToken = tokenizer.GetNextToken(); - return currentToken; - } - - public Token CurrentToken { - get { return currentToken; } - } - - public bool IsImportToken(Token token) - { - return token.Kind == IronPython.Compiler.TokenKind.KeywordImport; - } - - public bool IsFromToken(Token token) - { - return token.Kind == IronPython.Compiler.TokenKind.KeywordFrom; - } - - public bool IsDotToken(Token token) - { - return token.Kind == IronPython.Compiler.TokenKind.Dot; - } - - public bool IsNameToken(Token token) - { - return token.Kind == IronPython.Compiler.TokenKind.Name; - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonExpressionFinder.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonExpressionFinder.cs deleted file mode 100644 index de4e58a080..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonExpressionFinder.cs +++ /dev/null @@ -1,208 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Finds python expressions for code completion. - /// - public class PythonExpressionFinder : IExpressionFinder - { - class ExpressionRange - { - public int Start; - public int End; - - public int Length { - get { return End - Start + 1; } - } - } - - ExpressionRange expressionRange = new ExpressionRange(); - - public PythonExpressionFinder() - { - } - - /// - /// Finds an expression around the current offset. - /// - /// - /// Currently not implemented. This method is used heavily - /// in refactoring. - /// - public ExpressionResult FindFullExpression(string text, int offset) - { - return new ExpressionResult(null); - } - - /// - /// Removes the last part of the expression. - /// - /// - /// "array[i]" => "array" - /// "myObject.Field" => "myObject" - /// "myObject.Method(arg1, arg2)" => "myObject.Method" - /// - public string RemoveLastPart(string expression) - { - MemberName memberName = new MemberName(expression); - return memberName.Type; - } - - /// - /// Finds an expression before the current offset. - /// - /// - /// The expression is found before the specified offset. The - /// offset is just before the current cursor position. For example, - /// if the user presses the dot character then the offset - /// will be just before the dot. All characters before the offset and - /// at the offset are considered when looking for - /// the expression. All characters afterwards are ignored. - /// - public ExpressionResult FindExpression(string text, int offset) - { - if (!IsValidFindExpressionParameters(text, offset)) { - return new ExpressionResult(null); - } - - expressionRange.End = offset - 1; - expressionRange.Start = FindExpressionStart(text, expressionRange.End); - - if (IsImportExpression(text)) { - ExtendRangeToStartOfLine(text); - return CreatePythonImportExpressionResult(text, expressionRange); - } - return CreateDefaultExpressionResult(text, expressionRange); - } - - bool IsValidFindExpressionParameters(string text, int offset) - { - return (text != null) && IsValidOffset(text, offset); - } - - /// - /// This checks that the offset passed to the FindExpression method is valid. Usually the offset is - /// just after the last character in the text. - /// - /// The offset must be: - /// - /// 1) Greater than zero. - /// 2) Be inside the string. - /// 3) Be just after the end of the text. - /// - bool IsValidOffset(string text, int offset) - { - return (offset > 0) && (offset <= text.Length); - } - - int FindExpressionStart(string text, int offset) - { - while (offset >= 0) { - char currentChar = text[offset]; - switch (currentChar) { - case '\n': - case '\r': - case '\t': - case ' ': - return offset + 1; - } - offset--; - } - return 0; - } - - bool IsImportExpression(string text) - { - if (PythonImportExpression.IsImportExpression(text, expressionRange.End)) { - return true; - } - - if (IsSpaceCharacterBeforeExpression(text, expressionRange)) { - if (PythonImportExpression.IsImportExpression(text, expressionRange.Start)) { - return true; - } - } - return false; - } - - bool IsSpaceCharacterBeforeExpression(string text, ExpressionRange range) - { - int characterBeforeExpressionOffset = range.Start - 1; - if (characterBeforeExpressionOffset >= 0) { - return text[characterBeforeExpressionOffset] == ' '; - } - return false; - } - - void ExtendRangeToStartOfLine(string text) - { - if (expressionRange.Start > expressionRange.End) { - expressionRange.Start = expressionRange.End; - } - expressionRange.Start = FindLineStart(text, expressionRange.Start); - } - - /// - /// Finds the start of the line in the text starting from the - /// offset and working backwards. - /// - int FindLineStart(string text, int offset) - { - while (offset >= 0) { - char currentChar = text[offset]; - switch (currentChar) { - case '\n': - return offset + 1; - } - --offset; - } - return 0; - } - - ExpressionResult CreatePythonImportExpressionResult(string text, ExpressionRange range) - { - return CreateExpressionResult(text, range, new PythonImportExpressionContext()); - } - - ExpressionResult CreateDefaultExpressionResult(string text, ExpressionRange range) - { - return CreateExpressionResult(text, range, ExpressionContext.Default); - } - - ExpressionResult CreateExpressionResult(string text, ExpressionRange range, ExpressionContext context) - { - string expression = Substring(text, range); - return new ExpressionResult(expression, context); - } - - /// - /// Gets the substring starting from the specified index and - /// finishing at the specified end index. The character at the - /// end index is included in the string. - /// - string Substring(string text, ExpressionRange range) - { - return text.Substring(range.Start, range.Length); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonFormattingStrategy.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonFormattingStrategy.cs deleted file mode 100644 index 91c30b42eb..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonFormattingStrategy.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.Scripting; -using ICSharpCode.SharpDevelop.Editor; - -namespace ICSharpCode.PythonBinding -{ - public class PythonFormattingStrategy : ScriptingFormattingStrategy - { - public override string LineComment { - get { return "#"; } - } - - protected override LineIndenter CreateLineIndenter(ITextEditor editor, IDocumentLine line) - { - return new PythonLineIndenter(editor, line); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonFormsDesignerDisplayBinding.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonFormsDesignerDisplayBinding.cs deleted file mode 100644 index 174f2bb21b..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonFormsDesignerDisplayBinding.cs +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.FormsDesigner; -using ICSharpCode.Scripting; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Editor; -using ICSharpCode.SharpDevelop.Gui; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Forms designer display binding for Python files. - /// - public class PythonFormsDesignerDisplayBinding : ISecondaryDisplayBinding - { - public PythonFormsDesignerDisplayBinding() - { - } - - /// - /// Returns true so that the CreateSecondaryViewContent method - /// is called after the LoadSolutionProjects thread has finished. - /// - public bool ReattachWhenParserServiceIsReady { - get { return true; } - } - - public bool CanAttachTo(IViewContent content) - { - ITextEditorProvider textEditorProvider = content as ITextEditorProvider; - if (textEditorProvider != null) { - if (IsPythonFile(content.PrimaryFileName)) { - ParseInformation parseInfo = GetParseInfo(content.PrimaryFileName, textEditorProvider.TextEditor.Document); - return IsDesignable(parseInfo); - } - } - return false; - } - - public IViewContent[] CreateSecondaryViewContent(IViewContent viewContent) - { - ScriptingTextEditorViewContent textEditorView = new ScriptingTextEditorViewContent(viewContent); - return CreateSecondaryViewContent(viewContent, textEditorView.TextEditorOptions); - } - - public IViewContent[] CreateSecondaryViewContent(IViewContent viewContent, ITextEditorOptions textEditorOptions) - { - foreach (IViewContent existingView in viewContent.SecondaryViewContents) { - if (existingView.GetType() == typeof(FormsDesignerViewContent)) { - return new IViewContent[0]; - } - } - - IDesignerLoaderProvider loader = new PythonDesignerLoaderProvider(); - IDesignerGenerator generator = new PythonDesignerGenerator(textEditorOptions); - return new IViewContent[] { new FormsDesignerViewContent(viewContent, loader, generator) }; - } - - /// - /// Gets the parse information from the parser service - /// for the specified file. - /// - protected virtual ParseInformation GetParseInfo(string fileName, ITextBuffer textContent) - { - return ParserService.ParseFile(fileName, textContent); - } - - /// - /// Determines whether the specified parse information contains - /// a class which is designable. - /// - protected virtual bool IsDesignable(ParseInformation parseInfo) - { - return FormsDesignerSecondaryDisplayBinding.IsDesignable(parseInfo); - } - - /// - /// Checks the file's extension represents a python file. - /// - static bool IsPythonFile(string fileName) - { - PythonParser parser = new PythonParser(); - return parser.CanParse(fileName); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonFromImport.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonFromImport.cs deleted file mode 100644 index 874a6703e7..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonFromImport.cs +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; -using IronPython.Compiler.Ast; - -namespace ICSharpCode.PythonBinding -{ - public class PythonFromImport : DefaultUsing - { - FromImportStatement fromImport; - - public PythonFromImport(IProjectContent projectContent, FromImportStatement fromImport) - : base(projectContent) - { - this.fromImport = fromImport; - } - - public bool IsImportedName(string name) - { - if (String.IsNullOrEmpty(name)) { - return false; - } - - for (int i = 0; i < fromImport.Names.Count; ++i) { - string importedName = GetImportedAsNameIfExists(i); - if (importedName == name) { - return true; - } - } - return false; - } - - string GetImportedAsNameIfExists(int index) - { - if (fromImport.AsNames != null) { - string importedAsName = fromImport.AsNames[index]; - if (importedAsName != null) { - return importedAsName; - } - } - return fromImport.Names[index]; - } - - public string Module { - get { return fromImport.Root.MakeString(); } - } - - public string GetOriginalNameForAlias(string alias) - { - if (fromImport.AsNames == null) { - return null; - } - - int index = fromImport.AsNames.IndexOf(alias); - if (index >= 0) { - return fromImport.Names[index]; - } - return null; - } - - public bool ImportsEverything { - get { - return fromImport.Names[0] == "*"; - } - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImport.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImport.cs deleted file mode 100644 index e5b0011047..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImport.cs +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; -using IronPython.Compiler.Ast; - -namespace ICSharpCode.PythonBinding -{ - public class PythonImport : DefaultUsing - { - ImportStatement importStatement; - - public PythonImport(IProjectContent projectContent, ImportStatement importStatement) - : base(projectContent) - { - this.importStatement = importStatement; - AddUsings(); - } - - void AddUsings() - { - for (int i = 0; i < importStatement.Names.Count; ++i) { - string name = GetImportedAsNameIfExists(i); - Usings.Add(name); - } - } - - string GetImportedAsNameIfExists(int index) - { - string name = importStatement.AsNames[index]; - if (name != null) { - return name; - } - return importStatement.Names[index].MakeString(); - } - - public string Module { - get { return importStatement.Names[0].MakeString(); } - } - - public string GetOriginalNameForAlias(string alias) - { - int index = importStatement.AsNames.IndexOf(alias); - if (index >= 0) { - return importStatement.Names[index].MakeString(); - } - return null; - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportCompletion.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportCompletion.cs deleted file mode 100644 index ba14cbd2fe..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportCompletion.cs +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Reflection; -using ICSharpCode.SharpDevelop.Dom; -using IronPython.Modules; -using IronPython.Runtime; - -namespace ICSharpCode.PythonBinding -{ - public class PythonImportCompletion - { - public static readonly NamespaceEntry ImportAll = new NamespaceEntry("*"); - - IProjectContent projectContent; - static readonly PythonStandardModules standardPythonModules = new PythonStandardModules(); - - public PythonImportCompletion(IProjectContent projectContent) - { - this.projectContent = projectContent; - } - - public List GetCompletionItems() - { - return GetCompletionItems(String.Empty); - } - - public List GetCompletionItems(string subNamespace) - { - List items = projectContent.GetNamespaceContents(subNamespace); - - if (String.IsNullOrEmpty(subNamespace)) { - AddStandardPythonModules(items); - } - return items; - } - - void AddStandardPythonModules(List items) - { - items.AddRange(standardPythonModules); - } - - public List GetCompletionItemsFromModule(string module) - { - List items = GetCompletionItemsFromStandardPythonModules(module); - if (items == null) { - items = projectContent.GetNamespaceContents(module); - } - items.Add(ImportAll); - return items; - } - - List GetCompletionItemsFromStandardPythonModules(string module) - { - PythonStandardModuleType type = standardPythonModules.GetModuleType(module); - if (type != null) { - return GetCompletionItemsFromModule(type); - } - return null; - } - - List GetCompletionItemsFromModule(PythonStandardModuleType type) - { - PythonModuleCompletionItems moduleItems = PythonModuleCompletionItemsFactory.Create(type); - List items = new List(moduleItems); - return items; - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportExpression.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportExpression.cs deleted file mode 100644 index c330f2670b..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportExpression.cs +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Text; -using IronPython.Compiler; -using IronPython.Hosting; -using Microsoft.Scripting.Hosting; - -namespace ICSharpCode.PythonBinding -{ - public class PythonImportExpression : PythonExpression - { - string module = String.Empty; - string identifier = String.Empty; - bool hasFromAndImport; - - public PythonImportExpression(string expression) - : this(Python.CreateEngine(), expression) - { - } - - public PythonImportExpression(ScriptEngine engine, string expression) - : base(engine, expression) - { - Parse(engine, expression); - } - - void Parse(ScriptEngine engine, string expression) - { - Token token = GetNextToken(); - if (IsImportToken(token)) { - ParseImportExpression(); - } else if (IsFromToken(token)) { - ParseFromExpression(); - } - } - - void ParseImportExpression() - { - GetModuleName(); - } - - void ParseFromExpression() - { - GetModuleName(); - - if (IsImportToken(CurrentToken)) { - hasFromAndImport = true; - GetIdentifierName(); - } - } - - void GetModuleName() - { - module = GetName(); - } - - string GetName() - { - StringBuilder name = new StringBuilder(); - Token token = GetNextToken(); - while (IsNameToken(token)) { - name.Append((string)token.Value); - token = GetNextToken(); - if (IsDotToken(token)) { - name.Append('.'); - token = GetNextToken(); - } - } - return name.ToString(); - } - - void GetIdentifierName() - { - identifier = GetName(); - } - - public bool HasFromAndImport { - get { return hasFromAndImport; } - } - - public string Module { - get { return module; } - } - - public string Identifier { - get { return identifier; } - } - - public bool HasIdentifier { - get { return !String.IsNullOrEmpty(identifier); } - } - - /// - /// Returns true if the expression is of the form: - /// - /// "import " - /// "from " - /// "import System" - /// "from System" - /// "from System import Console" - /// - public static bool IsImportExpression(string text, int offset) - { - if (!ValidIsImportExpressionParameters(text, offset)) { - return false; - } - - string previousWord = FindPreviousWord(text, offset); - if (IsImportOrFromString(previousWord)) { - return true; - } - - int previousWordOffset = offset - previousWord.Length + 1; - previousWord = FindPreviousWord(text, previousWordOffset); - return IsImportOrFromString(previousWord); - } - - static bool ValidIsImportExpressionParameters(string text, int offset) - { - if (String.IsNullOrEmpty(text) || (offset <= 0) || (offset >= text.Length)) { - return false; - } - return true; - } - - static string FindPreviousWord(string text, int offset) - { - int previousWordOffset = FindPreviousWordOffset(text, offset); - int length = offset - previousWordOffset + 1; - return text.Substring(previousWordOffset, length); - } - - static int FindPreviousWordOffset(string text, int offset) - { - bool ignoreWhitespace = true; - while (offset > 0) { - char ch = text[offset]; - if (Char.IsWhiteSpace(ch)) { - if (IsNewLineOrCarriageReturn(ch)) { - return offset; - } - if (!ignoreWhitespace) { - return offset; - } - } else { - ignoreWhitespace = false; - } - --offset; - } - return offset; - } - - static bool IsNewLineOrCarriageReturn(char ch) - { - return (ch == '\r') || (ch == '\n'); - } - - static bool IsImportOrFromString(string text) - { - return IsImportString(text) || IsFromString(text); - } - - static bool IsImportString(string text) - { - return text.Trim() == "import"; - } - - static bool IsFromString(string text) - { - return text.Trim() == "from"; - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportExpressionContext.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportExpressionContext.cs deleted file mode 100644 index 9c4d8e9351..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportExpressionContext.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PythonBinding -{ - public class PythonImportExpressionContext : ExpressionContext - { - public bool HasFromAndImport { get; set; } - - public override bool ShowEntry(ICompletionEntry entry) - { - if (HasFromAndImport) { - return ShowEntryForImportIdentifier(entry); - } - return ShowEntryForImportModule(entry); - } - - bool ShowEntryForImportModule(ICompletionEntry entry) - { - return entry is NamespaceEntry; - } - - bool ShowEntryForImportIdentifier(ICompletionEntry entry) - { - if (entry is IMethod) { - return true; - } else if (entry is IField) { - return true; - } else if (entry is IClass) { - return true; - } else if (entry is NamespaceEntry) { - return IsImportAll(entry); - } - return false; - } - - bool IsImportAll(ICompletionEntry entry) - { - return PythonImportCompletion.ImportAll.Equals(entry); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportModuleResolveResult.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportModuleResolveResult.cs deleted file mode 100644 index f0769de4b3..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportModuleResolveResult.cs +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections; -using System.Collections.Generic; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PythonBinding -{ - public class PythonImportModuleResolveResult : ResolveResult - { - PythonImportExpression expression; - - public PythonImportModuleResolveResult(PythonImportExpression expression) - : base(null, null, null) - { - this.expression = expression; - } - - public string Name { - get { return expression.Module; } - } - - public override List GetCompletionData(IProjectContent projectContent) - { - PythonImportCompletion completion = new PythonImportCompletion(projectContent); - if (expression.HasFromAndImport) { - if (expression.HasIdentifier) { - return new List(); - } else { - return completion.GetCompletionItemsFromModule(expression.Module); - } - } - return completion.GetCompletionItems(expression.Module); - } - - public override ResolveResult Clone() - { - return new PythonImportModuleResolveResult(expression); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportResolver.cs deleted file mode 100644 index 8ae01c6cfe..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonImportResolver.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PythonBinding -{ - public class PythonImportResolver : IPythonResolver - { - public ResolveResult Resolve(PythonResolverContext resolverContext) - { - if (IsNamespace(resolverContext.ExpressionResult)) { - PythonImportExpression importExpression = new PythonImportExpression(resolverContext.Expression); - PythonImportExpressionContext context = resolverContext.ExpressionContext as PythonImportExpressionContext; - context.HasFromAndImport = importExpression.HasFromAndImport; - - return new PythonImportModuleResolveResult(importExpression); - } - return null; - } - - bool IsNamespace(ExpressionResult expressionResult) - { - return expressionResult.Context is PythonImportExpressionContext; - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonInsightWindowHandler.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonInsightWindowHandler.cs deleted file mode 100644 index cde219a54b..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonInsightWindowHandler.cs +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Editor; -using ICSharpCode.SharpDevelop.Editor.CodeCompletion; - -namespace ICSharpCode.PythonBinding -{ - public class PythonInsightWindowHandler : IInsightWindowHandler - { - ITextEditor editor; - IInsightWindow insightWindow; - - public void InitializeOpenedInsightWindow(ITextEditor editor, IInsightWindow insightWindow) - { - this.editor = editor; - this.insightWindow = insightWindow; - int offset = insightWindow.StartOffset; - insightWindow.DocumentChanged += DocumentChanged; - } - - void DocumentChanged(object sender, TextChangeEventArgs e) - { - if (IsOutsideMethodCall()) { - insightWindow.Close(); - } - } - - bool IsOutsideMethodCall() - { - string text = GetTextInsideMethodCallUpToCursor(); - return TextContainsClosingBracketForMethod(text); - } - - string GetTextInsideMethodCallUpToCursor() - { - int insightStartOffset = insightWindow.StartOffset; - int currentOffset = editor.Caret.Offset; - int length = currentOffset - insightStartOffset; - if (length < 0) { - // Force completion window to close by returning the close bracket. - return ")"; - } - return editor.Document.GetText(insightStartOffset, length); - } - - bool TextContainsClosingBracketForMethod(string text) - { - int bracketCount = 1; - foreach (char ch in text) { - switch (ch) { - case '(': - bracketCount++; - break; - case ')': - bracketCount--; - if (bracketCount == 0) { - return true; - } - break; - } - } - return false; - } - - public bool InsightRefreshOnComma(ITextEditor editor, char ch, out IInsightWindow insightWindow) - { - insightWindow = null; - return false; - } - - public void HighlightParameter(IInsightWindow window, int index) - { - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLanguageBinding.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLanguageBinding.cs deleted file mode 100644 index 74b190915c..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLanguageBinding.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Editor; - -namespace ICSharpCode.PythonBinding -{ - public class PythonLanguageBinding : DefaultLanguageBinding - { - public override IFormattingStrategy FormattingStrategy { - get { return new PythonFormattingStrategy(); } - } - - public override LanguageProperties Properties { - get { return PythonLanguageProperties.Default; } - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLanguageProperties.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLanguageProperties.cs deleted file mode 100644 index b8737351c9..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLanguageProperties.cs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.CodeDom.Compiler; -using ICSharpCode.SharpDevelop.Dom; -using Microsoft.CSharp; - -namespace ICSharpCode.PythonBinding -{ - public class PythonLanguageProperties : LanguageProperties - { - static readonly PythonLanguageProperties defaultProperties = new PythonLanguageProperties(); - - public PythonLanguageProperties() : base(StringComparer.Ordinal) - { - } - - public static PythonLanguageProperties Default { - get { return defaultProperties; } - } - - public override CodeDomProvider CodeDomProvider { - get { return new CSharpCodeProvider(); } - } - - public override bool AllowObjectConstructionOutsideContext { - get { return true; } - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLineIndenter.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLineIndenter.cs deleted file mode 100644 index 98b7a442fd..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLineIndenter.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.Scripting; -using ICSharpCode.SharpDevelop.Editor; - -namespace ICSharpCode.PythonBinding -{ - public class PythonLineIndenter : LineIndenter - { - public PythonLineIndenter(ITextEditor editor, IDocumentLine line) - : base(editor, line) - { - } - - protected override bool ShouldIncreaseLineIndent() - { - return PreviousLine.EndsWith(":"); - } - - protected override bool ShouldDecreaseLineIndent() - { - if (PreviousLine == "pass") { - return true; - } else if (PreviousLineIsReturnStatement()) { - return true; - } else if (PreviousLineIsRaiseStatement()) { - return true; - } else if (PreviousLine == "break") { - return true; - } - return false; - } - - bool PreviousLineIsReturnStatement() - { - return (PreviousLine == "return") || PreviousLine.StartsWith("return "); - } - - bool PreviousLineIsRaiseStatement() - { - return (PreviousLine == "raise") || PreviousLine.StartsWith("raise "); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableAssignment.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableAssignment.cs deleted file mode 100644 index ab0f58ac83..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableAssignment.cs +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using IronPython.Compiler.Ast; - -namespace ICSharpCode.PythonBinding -{ - public class PythonLocalVariableAssignment - { - AssignmentStatement assignment; - string variableName = String.Empty; - string typeName = String.Empty; - - public PythonLocalVariableAssignment(AssignmentStatement assignment) - { - this.assignment = assignment; - ParseAssignment(); - } - - public string TypeName { - get { return typeName; } - } - - public string VariableName { - get { return variableName; } - } - - public bool IsLocalVariableAssignment() - { - return !String.IsNullOrEmpty(variableName); - } - - void ParseAssignment() - { - NameExpression nameExpression = assignment.Left[0] as NameExpression; - CallExpression callExpression = assignment.Right as CallExpression; - if ((nameExpression != null) && (callExpression != null)) { - variableName = nameExpression.Name; - typeName = GetTypeName(callExpression.Target); - } - } - - /// - /// Gets the fully qualified name of the type from the expression. - /// - /// - /// The expression is the first target of a call expression. - /// - /// A call expression is a method or constructor call (right hand side of expression below): - /// - /// a = Root.Test.Class1() - /// - /// So the expression passed to this method will be a field expression in the - /// above example which refers to Class1. The next target will be a field - /// expression referring to Test. The The last target will be a name expression - /// referring to Root. - /// - /// If we have - /// - /// a = Class1() - /// - /// then the expression will be a name expression referring to Class1. - /// - string GetTypeName(Expression expression) - { - NameExpression nameExpression = expression as NameExpression; - if (nameExpression != null) { - return nameExpression.Name; - } - return PythonControlFieldExpression.GetMemberName(expression as MemberExpression); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableResolver.cs deleted file mode 100644 index 73c74eba0f..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableResolver.cs +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Text; - -using ICSharpCode.Scripting; -using ICSharpCode.SharpDevelop.Dom; -using IronPython; -using IronPython.Compiler; -using IronPython.Compiler.Ast; -using IronPython.Hosting; -using IronPython.Runtime; -using IronPython.Runtime.Exceptions; -using Microsoft.Scripting; -using Microsoft.Scripting.Hosting; -using Microsoft.Scripting.Runtime; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Determines the type of a variable. - /// - public class PythonLocalVariableResolver : PythonWalker, IPythonResolver - { - PythonClassResolver classResolver; - string variableName = String.Empty; - string typeName; - - public PythonLocalVariableResolver(PythonClassResolver classResolver) - { - this.classResolver = classResolver; - } - - /// - /// Resolves the type of the variable name specified. - /// - /// Name of the variable. - /// The python code containing the variable. - public string Resolve(string variableName, string code) - { - if (code != null) { - PythonParser parser = new PythonParser(); - PythonAst ast = parser.CreateAst("resolver.py", code); - return Resolve(variableName, ast); - } - return null; - } - - string Resolve(string variableName, PythonAst ast) - { - typeName = null; - this.variableName = variableName; - ast.Walk(this); - return typeName; - } - - public override bool Walk(AssignmentStatement node) - { - PythonLocalVariableAssignment localVariableAssignment = new PythonLocalVariableAssignment(node); - if (localVariableAssignment.IsLocalVariableAssignment()) { - if (localVariableAssignment.VariableName == variableName) { - typeName = localVariableAssignment.TypeName; - } - } - return base.Walk(node); - } - - public ResolveResult Resolve(PythonResolverContext resolverContext) - { - return GetLocalVariable(resolverContext); - } - - /// - /// Tries to find the type that matches the local variable name. - /// - LocalResolveResult GetLocalVariable(PythonResolverContext resolverContext) - { - string code = GetLocalMethodCode(resolverContext); - string typeName = Resolve(resolverContext.Expression, code); - if (typeName != null) { - return CreateLocalResolveResult(typeName, resolverContext); - } - return null; - } - - string GetLocalMethodCode(PythonResolverContext resolverContext) - { - ScriptingLocalMethod localMethod = new ScriptingLocalMethod(resolverContext.FileContent); - int beginLine = resolverContext.ExpressionRegion.BeginLine; - return localMethod.GetCode(beginLine); - } - - LocalResolveResult CreateLocalResolveResult(string typeName, PythonResolverContext resolverContext) - { - IClass resolvedClass = classResolver.GetClass(resolverContext, typeName); - if (resolvedClass != null) { - string identifier = resolverContext.Expression; - return CreateLocalResolveResult(identifier, resolvedClass); - } - return null; - } - - LocalResolveResult CreateLocalResolveResult(string identifier, IClass resolvedClass) - { - DefaultMethod dummyMethod = CreateDummyMethod(); - DefaultField.LocalVariableField field = CreateLocalVariableField(identifier, resolvedClass, dummyMethod.DeclaringType); - return new LocalResolveResult(dummyMethod, field); - } - - DefaultField.LocalVariableField CreateLocalVariableField(string identifier, IClass resolvedClass, IClass callingClass) - { - return new DefaultField.LocalVariableField(resolvedClass.DefaultReturnType, - identifier, - DomRegion.Empty, - callingClass); - } - - DefaultMethod CreateDummyMethod() - { - DefaultClass dummyClass = new DefaultClass(DefaultCompilationUnit.DummyCompilationUnit, "Global"); - return new DefaultMethod(dummyClass, String.Empty); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMemberResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMemberResolver.cs deleted file mode 100644 index 29dfa8ccb6..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMemberResolver.cs +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PythonBinding -{ - /// - /// Resolves properties, events and fields. - /// - public class PythonMemberResolver : IPythonResolver - { - PythonClassResolver classResolver; - PythonLocalVariableResolver localVariableResolver; - PythonResolverContext resolverContext; - PythonSelfResolver selfResolver = new PythonSelfResolver(); - - public PythonMemberResolver(PythonClassResolver classResolver, PythonLocalVariableResolver localVariableResolver) - { - this.classResolver = classResolver; - this.localVariableResolver = localVariableResolver; - } - - public ResolveResult Resolve(PythonResolverContext resolverContext) - { - IMember member = FindMember(resolverContext); - return CreateResolveResult(member); - } - - public IMember FindMember(PythonResolverContext resolverContext) - { - this.resolverContext = resolverContext; - return FindMember(); - } - - IMember FindMember() - { - return FindMember(resolverContext.Expression); - } - - IMember FindMember(string expression) - { - MemberName memberName = new MemberName(expression); - if (memberName.HasName) { - IClass c = FindClass(memberName.Type); - if (c != null) { - return FindMemberInClass(c, memberName.Name); - } else { - return FindMemberInParent(memberName); - } - } - return null; - } - - IClass FindClass(string className) - { - IClass c = FindClassFromClassResolver(className); - if (c != null) { - return c; - } - if (PythonSelfResolver.IsSelfExpression(className)) { - return FindClassFromSelfResolver(); - } - return FindClassFromLocalVariableResolver(className); - } - - IClass FindClassFromClassResolver(string className) - { - return classResolver.GetClass(resolverContext, className); - } - - IClass FindClassFromLocalVariableResolver(string localVariableName) - { - MemberName memberName = new MemberName(localVariableName); - if (!memberName.HasName) { - string typeName = localVariableResolver.Resolve(localVariableName, resolverContext.FileContent); - return FindClassFromClassResolver(typeName); - } - return null; - } - - IClass FindClassFromSelfResolver() - { - PythonResolverContext newContext = resolverContext.Clone("self"); - ResolveResult result = selfResolver.Resolve(newContext); - if (result != null) { - return result.ResolvedType.GetUnderlyingClass(); - } - return null; - } - - ResolveResult CreateResolveResult(IMember member) - { - if (member != null) { - if (member is IMethod) { - return new PythonMethodGroupResolveResult(member.DeclaringType, member.Name); - } - return new MemberResolveResult(null, null, member); - } - return null; - } - - IMember FindMemberInClass(IClass matchingClass, string memberName) - { - PythonClassMembers classMembers = new PythonClassMembers(matchingClass); - return classMembers.FindMember(memberName); - } - - IMember FindMemberInParent(MemberName memberName) - { - IMember parentMember = FindMember(memberName.Type); - if (parentMember != null) { - return FindMemberInParent(parentMember, memberName.Name); - } - return null; - } - - IMember FindMemberInParent(IMember parentMember, string memberName) - { - IReturnType returnType = parentMember.ReturnType; - if (returnType != null) { - IClass parentMemberClass = returnType.GetUnderlyingClass(); - return FindMemberInClass(parentMemberClass, memberName); - } - return null; - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethod.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethod.cs deleted file mode 100644 index 2945794bb7..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethod.cs +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using ICSharpCode.SharpDevelop.Dom; -using IronPython.Compiler.Ast; -using Microsoft.Scripting; - -namespace ICSharpCode.PythonBinding -{ - public class PythonMethod : DefaultMethod - { - public PythonMethod(IClass declaringType, FunctionDefinition methodDefinition) - : this(declaringType, methodDefinition, methodDefinition.Name) - { - } - - public PythonMethod(IClass declaringType, FunctionDefinition methodDefinition, string name) - : base(declaringType, name) - { - ReturnType = new DefaultReturnType(declaringType); - Modifiers = ModifierEnum.Public; - - GetMethodRegions(methodDefinition); - AddParameters(methodDefinition); - - declaringType.Methods.Add(this); - } - - void GetMethodRegions(FunctionDefinition methodDefinition) - { - GetBodyRegion(methodDefinition); - GetMethodRegion(methodDefinition); - } - - void GetBodyRegion(FunctionDefinition methodDefinition) - { - BodyRegion = PythonMethodOrClassBodyRegion.GetBodyRegion(methodDefinition); - } - - /// - /// Gets the region of a method. This does not include the body. - /// - void GetMethodRegion(FunctionDefinition methodDefinition) - { - SourceLocation start = methodDefinition.Start; - SourceLocation end = methodDefinition.Header; - Region = new DomRegion(start.Line, start.Column, end.Line, end.Column + 1); - } - - void AddParameters(FunctionDefinition methodDefinition) - { - bool ignoreFirstMethodParameter = !DeclaringTypeIsPythonModule; - AddParameters(methodDefinition, ignoreFirstMethodParameter); - } - - bool DeclaringTypeIsPythonModule { - get { return DeclaringType is PythonModule; } - } - - void AddParameters(FunctionDefinition methodDefinition, bool ignoreFirstMethodParameter) - { - foreach (IParameter parameter in ConvertParameters(methodDefinition.Parameters, ignoreFirstMethodParameter)) { - Parameters.Add(parameter); - } - } - - /// - /// Converts from Python AST expressions to parameters. - /// - /// If the parameters belong to a class method then the first - /// "self" parameter can be ignored. - IParameter[] ConvertParameters(IList parameters, bool ignoreFirstParameter) - { - int startingIndex = GetStartingIndex(ignoreFirstParameter); - return ConvertParameters(parameters, startingIndex); - } - - int GetStartingIndex(bool ignoreFirstParameter) - { - if (ignoreFirstParameter) { - return 1; - } - return 0; - } - - IParameter[] ConvertParameters(IList parameters, int startingIndex) - { - List convertedParameters = new List(); - for (int i = startingIndex; i < parameters.Count; ++i) { - DefaultParameter parameter = new DefaultParameter(parameters[i].Name, null, new DomRegion()); - convertedParameters.Add(parameter); - } - return convertedParameters.ToArray(); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodDefinition.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodDefinition.cs deleted file mode 100644 index 20bac6c043..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodDefinition.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using ICSharpCode.SharpDevelop.Dom; -using IronPython.Compiler.Ast; -using Microsoft.Scripting; - -namespace ICSharpCode.PythonBinding -{ - public class PythonMethodDefinition - { - FunctionDefinition methodDefinition; - - public PythonMethodDefinition(FunctionDefinition methodDefinition) - { - this.methodDefinition = methodDefinition; - } - - public PythonMethod CreateMethod(IClass c) - { - if (IsConstructor) { - return new PythonConstructor(c, methodDefinition); - } - return new PythonMethod(c, methodDefinition); - } - - bool IsConstructor { - get { return methodDefinition.Name == "__init__"; } - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodGroupResolveResult.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodGroupResolveResult.cs deleted file mode 100644 index 8c1e8b2f80..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodGroupResolveResult.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PythonBinding -{ - public class PythonMethodGroupResolveResult : MethodGroupResolveResult - { - public PythonMethodGroupResolveResult(IClass containingClass, string methodName) - : base(null, null, containingClass.DefaultReturnType, methodName) - { - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodOrClassBodyRegion.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodOrClassBodyRegion.cs deleted file mode 100644 index 9500d900eb..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodOrClassBodyRegion.cs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; -using IronPython.Compiler.Ast; -using Microsoft.Scripting; - -namespace ICSharpCode.PythonBinding -{ - public static class PythonMethodOrClassBodyRegion - { - /// - /// Gets the body region for a class or a method. - /// - /// - /// Note that SharpDevelop line numbers are zero based but the - /// DomRegion values are one based. IronPython columns and lines are one based. - /// - /// The body statement. - /// The location of the header. This gives the end location for the - /// method or class definition up to the colon. - public static DomRegion GetBodyRegion(Statement body, SourceLocation header) - { - int columnAfterColonCharacter = header.Column + 1; - SourceLocation bodyEnd = GetBodyEndLocation(body); - return new DomRegion(header.Line, columnAfterColonCharacter, bodyEnd.Line, bodyEnd.Column); - } - - static SourceLocation GetBodyEndLocation(Statement body) - { - if (body.Parent != null) { - return body.End; - } - return SourceLocation.Invalid; - } - - public static DomRegion GetBodyRegion(FunctionDefinition methodDefinition) - { - return GetBodyRegion(methodDefinition.Body, methodDefinition.Header); - } - - public static DomRegion GetBodyRegion(ClassDefinition classDefinition) - { - return GetBodyRegion(classDefinition.Body, classDefinition.Header); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodReturnValueResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodReturnValueResolver.cs deleted file mode 100644 index 6823ac919d..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodReturnValueResolver.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PythonBinding -{ - public class PythonMethodReturnValueResolver : IPythonResolver - { - PythonMemberResolver memberResolver; - - public PythonMethodReturnValueResolver(PythonMemberResolver memberResolver) - { - this.memberResolver = memberResolver; - } - - public ResolveResult Resolve(PythonResolverContext resolverContext) - { - string methodName = GetMethodName(resolverContext.Expression); - if (methodName != null) { - PythonResolverContext newResolverContext = resolverContext.Clone(methodName); - IMember member = memberResolver.FindMember(newResolverContext); - return CreateResolveResult(member); - } - return null; - } - - string GetMethodName(string expression) - { - int methodParametersStartIndex = expression.IndexOf('('); - if ((methodParametersStartIndex > 0) && expression.EndsWith(")")) { - return expression.Substring(0, methodParametersStartIndex); - } - return null; - } - - MemberResolveResult CreateResolveResult(IMember member) - { - if (member != null) { - return new MemberResolveResult(null, null, member); - } - return null; - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonModule.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonModule.cs deleted file mode 100644 index 16cc7af664..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonModule.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PythonBinding -{ - public class PythonModule : DefaultClass - { - public PythonModule(ICompilationUnit compilationUnit) - : base(compilationUnit, compilationUnit.UsingScope.NamespaceName) - { - compilationUnit.Classes.Add(this); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonModuleCompletionItems.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonModuleCompletionItems.cs deleted file mode 100644 index 2a84976fd5..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonModuleCompletionItems.cs +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Reflection; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Dom.ReflectionLayer; -using IronPython.Modules; -using IronPython.Runtime; -using Microsoft.Scripting.Runtime; - -namespace ICSharpCode.PythonBinding -{ - public class PythonModuleCompletionItems : List - { - DefaultCompilationUnit compilationUnit; - DefaultClass moduleClass; - DefaultProjectContent projectContent; - - static readonly BindingFlags PublicAndStaticBindingFlags = BindingFlags.Public | BindingFlags.Static; - - public PythonModuleCompletionItems(PythonStandardModuleType moduleType) - { - projectContent = new DefaultProjectContent(); - compilationUnit = new DefaultCompilationUnit(projectContent); - moduleClass = new DefaultClass(compilationUnit, moduleType.Name); - - AddCompletionItemsForType(moduleType.Type); - AddStandardCompletionItems(); - } - - void AddCompletionItemsForType(Type type) - { - foreach (MemberInfo member in type.GetMembers(PublicAndStaticBindingFlags)) { - if (!HasPythonHiddenAttribute(member)) { - ICompletionEntry item = CreateCompletionItem(member, moduleClass); - if (item != null) { - Add(item); - } - } - } - } - - void AddStandardCompletionItems() - { - AddField("__name__"); - AddField("__package__"); - } - - protected void AddField(string name) - { - DefaultField field = new DefaultField(moduleClass, name); - Add(field); - } - - bool HasPythonHiddenAttribute(MemberInfo memberInfo) - { - foreach (Attribute attribute in memberInfo.GetCustomAttributes(false)) { - Type type = attribute.GetType(); - if (type.Name == "PythonHiddenAttribute") { - return true; - } - } - return false; - } - - ICompletionEntry CreateCompletionItem(MemberInfo memberInfo, IClass c) - { - if (memberInfo is MethodInfo) { - return CreateMethodFromMethodInfo((MethodInfo)memberInfo, c); - } else if (memberInfo is FieldInfo) { - return CreateFieldFromFieldInfo((FieldInfo)memberInfo, c); - } else if (memberInfo is Type) { - return CreateClassFromType((Type)memberInfo); - } - return null; - } - - IMethod CreateMethodFromMethodInfo(MethodInfo methodInfo, IClass c) - { - DefaultMethod method = new DefaultMethod(c, methodInfo.Name); - method.Documentation = GetDocumentation(methodInfo); - method.ReturnType = CreateMethodReturnType(methodInfo); - method.Modifiers = ModifierEnum.Public; - - foreach (ParameterInfo paramInfo in methodInfo.GetParameters()) { - if (!IsCodeContextParameter(paramInfo)) { - IParameter parameter = ConvertParameter(paramInfo, method); - method.Parameters.Add(parameter); - } - } - - c.Methods.Add(method); - - return method; - } - - string GetDocumentation(MemberInfo memberInfo) - { - foreach (DocumentationAttribute documentation in GetDocumentationAttributes(memberInfo)) { - return documentation.Documentation; - } - return null; - } - - object[] GetDocumentationAttributes(MemberInfo memberInfo) - { - return memberInfo.GetCustomAttributes(typeof(DocumentationAttribute), false); - } - - IReturnType CreateMethodReturnType(MethodInfo methodInfo) - { - DefaultClass declaringType = new DefaultClass(compilationUnit, methodInfo.ReturnType.FullName); - return new DefaultReturnType(declaringType); - } - - bool IsCodeContextParameter(ParameterInfo paramInfo) - { - return paramInfo.ParameterType == typeof(CodeContext); - } - - IParameter ConvertParameter(ParameterInfo paramInfo, IMethod method) - { - DefaultClass c = new DefaultClass(compilationUnit, paramInfo.ParameterType.FullName); - DefaultReturnType returnType = new DefaultReturnType(c); - return new DefaultParameter(paramInfo.Name, returnType, DomRegion.Empty); - } - - IField CreateFieldFromFieldInfo(FieldInfo fieldInfo, IClass c) - { - return new DefaultField(c, fieldInfo.Name); - } - - IClass CreateClassFromType(Type type) - { - DefaultCompilationUnit unit = new DefaultCompilationUnit(projectContent); - return new DefaultClass(unit, type.Name); - } - - public MethodGroup GetMethods(string name) - { - List methods = new List(); - foreach (object member in this) { - IMethod method = member as IMethod; - if (method != null) { - if (method.Name == name) { - methods.Add(method); - } - } - } - return new MethodGroup(methods); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonModuleCompletionItemsFactory.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonModuleCompletionItemsFactory.cs deleted file mode 100644 index 9a1785a027..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonModuleCompletionItemsFactory.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using IronPython.Modules; - -namespace ICSharpCode.PythonBinding -{ - public static class PythonModuleCompletionItemsFactory - { - public static PythonModuleCompletionItems Create(PythonStandardModuleType moduleType) - { - if (IsSysModule(moduleType.Type)) { - return new SysModuleCompletionItems(moduleType); - } - return new PythonModuleCompletionItems(moduleType); - } - - static bool IsSysModule(Type type) - { - return type == typeof(SysModule); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonNamespaceResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonNamespaceResolver.cs deleted file mode 100644 index 498bbec4f7..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonNamespaceResolver.cs +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PythonBinding -{ - public class PythonNamespaceResolver : IPythonResolver - { - PythonResolverContext resolverContext; - ExpressionResult expressionResult; - - public ResolveResult Resolve(PythonResolverContext resolverContext) - { - return Resolve(resolverContext, resolverContext.ExpressionResult); - } - - public ResolveResult Resolve(PythonResolverContext resolverContext, ExpressionResult expressionResult) - { - this.resolverContext = resolverContext; - this.expressionResult = expressionResult; - - if (resolverContext.HasImport(expressionResult.Expression)) { - return ResolveFullNamespace(); - } - return ResolvePartialNamespaceMatch(); - } - - ResolveResult ResolveFullNamespace() - { - string actualNamespace = resolverContext.UnaliasImportedModuleName(expressionResult.Expression); - return ResolveIfNamespaceExistsInProjectReferences(actualNamespace); - } - - ResolveResult ResolvePartialNamespaceMatch() - { - string fullNamespace = expressionResult.Expression; - if (resolverContext.IsStartOfDottedModuleNameImported(fullNamespace)) { - return ResolveIfPartialNamespaceExistsInProjectReferences(fullNamespace); - } else if (resolverContext.HasDottedImportNameThatStartsWith(fullNamespace)) { - return CreateNamespaceResolveResult(fullNamespace); - } - return null; - } - - ResolveResult ResolveIfNamespaceExistsInProjectReferences(string namespaceName) - { - if (resolverContext.NamespaceExistsInProjectReferences(namespaceName)) { - return CreateNamespaceResolveResult(namespaceName); - } - return null; - } - - ResolveResult ResolveIfPartialNamespaceExistsInProjectReferences(string namespaceName) - { - string actualNamespace = resolverContext.UnaliasStartOfDottedImportedModuleName(namespaceName); - if (resolverContext.PartialNamespaceExistsInProjectReferences(actualNamespace)) { - return CreateNamespaceResolveResult(actualNamespace); - } - return null; - } - - ResolveResult CreateNamespaceResolveResult(string namespaceName) - { - return new NamespaceResolveResult(null, null, namespaceName); - } - } -} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonOptionsPanel.xaml b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonOptionsPanel.xaml deleted file mode 100644 index 7f23974725..0000000000 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonOptionsPanel.xaml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - -