Browse Source

Merge branch 'master' into envdte-nrefactory

pull/375/head
Matt Ward 12 years ago
parent
commit
25fa355be3
  1. 3
      data/resources/StringResources.de.resx
  2. 9
      data/resources/StringResources.resx
  3. 1
      src/AddIns/Analysis/UnitTesting/Options/UnitTestingOptionsPanel.xaml.cs
  4. 9
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/TextEditorWithParseInformationFolding.cs
  5. 20
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
  6. 119
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighter.cs
  7. 30
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormattingStrategy/CSharpFormattingStrategy.cs
  8. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeActionProviderDoozer.cs
  9. 61
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/IssueManager.cs
  10. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/MoveTypeToFileContextAction.cs
  11. 6
      src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/OpenTextEditors.cs
  12. 17
      src/AddIns/BackendBindings/WixBinding/Test/PackageFiles/OpenTextEditorsTestFixture.cs
  13. 1
      src/AddIns/BackendBindings/WixBinding/Test/Utils/MockViewContent.cs
  14. 7
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlAstResolver.cs
  15. 1
      src/AddIns/Debugger/Debugger.AddIn/Pads/AutoCompleteTextBox.cs
  16. 2
      src/AddIns/Debugger/Debugger.AddIn/Pads/CallStackPad.cs
  17. 5
      src/AddIns/Debugger/Debugger.AddIn/Pads/WatchPad.cs
  18. 2
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
  19. 202
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CaretReferencesRenderer.cs
  20. 97
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ExpressionHighlightRenderer.cs
  21. 1
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml.cs
  22. 45
      src/AddIns/Misc/AddInManager2/Project/Src/View/AddInsView.xaml
  23. 3
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AddInManagerViewModel.cs
  24. 3
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs
  25. 11
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingBrush.cs
  26. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/RichText.cs
  27. 2
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/DeclareLocalVariableAction.cs
  28. 4
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Analysis/SemanticHighlightingVisitor.cs
  29. 16
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/BaseRefactoringContext.cs
  30. 2
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs
  31. 10
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Resolver/CSharpOperators.cs
  32. 27
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Resolver/ReducedExtensionMethod.cs
  33. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs
  34. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpAssembly.cs
  35. 6
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/TypeSystem/ResolvedUsingScope.cs
  36. 4
      src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/Resolver/AnonymousTypeTests.cs
  37. 8
      src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs
  38. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory/Documentation/IdStringMemberReference.cs
  39. 2
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/IField.cs
  40. 14
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/IMember.cs
  41. 10
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/ISymbol.cs
  42. 2
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedEntity.cs
  43. 16
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedMember.cs
  44. 31
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedTypeParameter.cs
  45. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractUnresolvedMember.cs
  46. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/AccessorOwnerMemberReference.cs
  47. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultMemberReference.cs
  48. 57
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultParameter.cs
  49. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedField.cs
  50. 9
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedMethod.cs
  51. 4
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedProperty.cs
  52. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedTypeDefinition.cs
  53. 61
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedAssembly.cs
  54. 7
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedParameter.cs
  55. 32
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultVariable.cs
  56. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DummyTypeParameter.cs
  57. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/ExplicitInterfaceImplementationMemberReference.cs
  58. 10
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/GetClassTypeReference.cs
  59. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/MergedNamespace.cs
  60. 10
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/NestedTypeReference.cs
  61. 12
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/SpecializedMember.cs
  62. 11
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/SpecializedMethod.cs
  63. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/SpecializingMemberReference.cs
  64. 7
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/TypeParameterReference.cs
  65. 19
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/TypeSystemExtensions.cs
  66. 8
      src/Main/Base/Project/Editor/DocumentationUIBuilder.cs
  67. 11
      src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionPanelXaml.xaml
  68. 5
      src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionPanelXaml.xaml.cs
  69. 2
      src/Main/Base/Project/Src/Gui/Dialogs/AsynchronousWaitDialog.cs
  70. 38
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml.cs
  71. 6
      src/Main/Base/Project/Src/Services/HelpProvider.cs
  72. 13
      src/Main/Base/Project/Src/Services/ParserService/CodeCompletionOptions.cs
  73. 8
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/FileFilterDoozer.cs
  74. 6
      src/Main/ICSharpCode.SharpDevelop.Widgets/Project/NumericUpDown.cs
  75. 4
      src/Main/SharpDevelop/Parser/ParserServiceEntry.cs
  76. 1
      src/Main/SharpDevelop/Templates/Project/ProjectDescriptor.cs

3
data/resources/StringResources.de.resx

@ -3314,6 +3314,9 @@ Bitte einen anderen Dateinamen wählen.</value> @@ -3314,6 +3314,9 @@ Bitte einen anderen Dateinamen wählen.</value>
<data name="ICSharpCode.CodeCoverage.Column" xml:space="preserve">
<value>Spalte</value>
</data>
<data name="ICSharpCode.CodeCoverage.Content" xml:space="preserve">
<value>Inhalt</value>
</data>
<data name="ICSharpCode.CodeCoverage.DisplayOptions" xml:space="preserve">
<value>Anzeige-Optionen</value>
</data>

9
data/resources/StringResources.resx

@ -2039,6 +2039,15 @@ Do you want to add the new file to the project ${CurrentProjectName}?</value> @@ -2039,6 +2039,15 @@ Do you want to add the new file to the project ${CurrentProjectName}?</value>
<value>Save</value>
<comment>Save *inputbox* items</comment>
</data>
<data name="Dialog.Options.IDEOptions.CodeCompletion.TooltipLinkTarget" xml:space="preserve">
<value>Links in tooltips should go to</value>
</data>
<data name="Dialog.Options.IDEOptions.CodeCompletion.TooltipLinkTargetDefinition" xml:space="preserve">
<value>Definition in code</value>
</data>
<data name="Dialog.Options.IDEOptions.CodeCompletion.TooltipLinkTargetDocumentation" xml:space="preserve">
<value>Documentation (if available)</value>
</data>
<data name="Dialog.Options.IDEOptions.CodeCompletion.UseDataUsageCache" xml:space="preserve">
<value>Pre-select recently used members</value>
</data>

1
src/AddIns/Analysis/UnitTesting/Options/UnitTestingOptionsPanel.xaml.cs

@ -25,6 +25,7 @@ namespace ICSharpCode.UnitTesting @@ -25,6 +25,7 @@ namespace ICSharpCode.UnitTesting
{
public UnitTestingOptionsPanel()
{
InitializeComponent();
}
}
}

9
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/TextEditorWithParseInformationFolding.cs

@ -42,10 +42,19 @@ namespace ICSharpCode.AspNet.Mvc.Folding @@ -42,10 +42,19 @@ namespace ICSharpCode.AspNet.Mvc.Folding
{
var textEditorAdapter = textEditor as AvalonEditTextEditorAdapter;
if (textEditorAdapter != null) {
RemoveExistingFoldingManager(textEditorAdapter);
foldingManager = FoldingManager.Install(textEditorAdapter.TextEditor.TextArea);
}
}
void RemoveExistingFoldingManager(AvalonEditTextEditorAdapter textEditorAdapter)
{
var existingFoldingManager = textEditorAdapter.TextEditor.TextArea.GetService(typeof(FoldingManager)) as FoldingManager;
if (existingFoldingManager != null) {
FoldingManager.Uninstall(existingFoldingManager);
}
}
// TODO disable parse information folding?
public bool IsParseInformationFoldingEnabled {
get {

20
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs

@ -19,7 +19,10 @@ @@ -19,7 +19,10 @@
using System;
using System.Collections.Generic;
using System.Threading;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
using CSharpBinding.Completion;
using CSharpBinding.FormattingStrategy;
@ -58,12 +61,15 @@ namespace CSharpBinding @@ -58,12 +61,15 @@ namespace CSharpBinding
IssueManager inspectionManager;
IList<IContextActionProvider> contextActionProviders;
CodeManipulation codeManipulation;
CSharpSemanticHighlighter highlighter;
CancellationTokenSource caretMovementTokenSource;
public void Attach(ITextEditor editor)
{
this.editor = editor;
inspectionManager = new IssueManager(editor);
codeManipulation = new CodeManipulation(editor);
this.editor.Caret.LocationChanged += CaretLocationChanged;
if (!editor.ContextActionProviders.IsReadOnly) {
contextActionProviders = AddInTree.BuildItems<IContextActionProvider>("/SharpDevelop/ViewContent/TextEditor/C#/ContextActions", null);
@ -81,7 +87,21 @@ namespace CSharpBinding @@ -81,7 +87,21 @@ namespace CSharpBinding
if (contextActionProviders != null) {
editor.ContextActionProviders.RemoveAll(contextActionProviders.Contains);
}
this.editor.Caret.LocationChanged -= CaretLocationChanged;
this.editor = null;
}
void CaretLocationChanged(object sender, EventArgs e)
{
if (highlighter == null)
highlighter = editor.GetService<CSharpSemanticHighlighter>();
if (highlighter == null)
return;
if (caretMovementTokenSource != null)
caretMovementTokenSource.Cancel();
caretMovementTokenSource = new CancellationTokenSource();
var rr = SD.ParserService.Resolve(editor.FileName, editor.Caret.Location, editor.Document, cancellationToken: caretMovementTokenSource.Token);
highlighter.SetCurrentSymbol(rr.GetSymbol());
}
}
}

119
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighter.cs

@ -18,14 +18,19 @@ @@ -18,14 +18,19 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Diagnostics;
using System.Linq;
using System.Windows.Media;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Analysis;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Parser;
@ -50,6 +55,9 @@ namespace CSharpBinding @@ -50,6 +55,9 @@ namespace CSharpBinding
int lineNumber;
HighlightedLine line;
CSharpFullParseInformation parseInfo;
ISymbolReference currentSymbolReference;
IResolveVisitorNavigator currentNavigator;
HighlightingColor symbolReferenceColor;
#region Constructor + Dispose
public CSharpSemanticHighlighter(IDocument document)
@ -66,6 +74,7 @@ namespace CSharpBinding @@ -66,6 +74,7 @@ namespace CSharpBinding
this.enumerationTypeColor = this.valueKeywordColor;
this.typeParameterTypeColor = this.referenceTypeColor;
this.delegateTypeColor = this.referenceTypeColor;
this.symbolReferenceColor = new HighlightingColor { Background = new SimpleHighlightingBrush(DefaultFillColor) };
this.methodDeclarationColor = this.methodCallColor = highlighting.GetNamedColor("MethodCall");
//this.eventDeclarationColor = this.eventAccessColor = defaultTextColor;
@ -92,6 +101,7 @@ namespace CSharpBinding @@ -92,6 +101,7 @@ namespace CSharpBinding
SD.ParserService.ParseInformationUpdated += ParserService_ParseInformationUpdated;
SD.ParserService.LoadSolutionProjectsThread.Finished += ParserService_LoadSolutionProjectsThreadEnded;
eventHandlersAreRegistered = true;
document.GetService<IServiceContainer>().AddService(typeof(CSharpSemanticHighlighter), this);
}
}
@ -101,6 +111,7 @@ namespace CSharpBinding @@ -101,6 +111,7 @@ namespace CSharpBinding
SD.ParserService.ParseInformationUpdated -= ParserService_ParseInformationUpdated;
SD.ParserService.LoadSolutionProjectsThread.Finished -= ParserService_LoadSolutionProjectsThreadEnded;
eventHandlersAreRegistered = false;
document.GetService<IServiceContainer>().RemoveService(typeof(CSharpSemanticHighlighter));
}
this.resolver = null;
this.parseInfo = null;
@ -174,10 +185,7 @@ namespace CSharpBinding @@ -174,10 +185,7 @@ namespace CSharpBinding
void ParserService_LoadSolutionProjectsThreadEnded(object sender, EventArgs e)
{
cachedLines.Clear();
invalidLines.Clear();
forceParseOnNextRefresh = true;
OnHighlightingStateChanged(1, document.LineCount);
InvalidateAll();
}
void ParserService_ParseInformationUpdated(object sender, ParseInformationEventArgs e)
@ -389,6 +397,109 @@ namespace CSharpBinding @@ -389,6 +397,109 @@ namespace CSharpBinding
});
}
}
protected override void Colorize(AstNode node, HighlightingColor color)
{
if (currentSymbolReference != null && currentNavigator == null)
currentNavigator = InitNavigator();
if (currentNavigator != null) {
var resolverNode = node;
while (CSharpAstResolver.IsUnresolvableNode(resolverNode) && resolverNode.Parent != null)
resolverNode = resolverNode.Parent;
if (resolverNode.Role == Roles.TargetExpression && resolverNode.Parent is InvocationExpression)
resolverNode = resolverNode.Parent;
if (resolverNode.Role == Roles.Type && resolverNode.Parent is ObjectCreateExpression)
resolverNode = resolverNode.Parent;
if (node is Identifier && !node.IsNull)
resolverNode.AddAnnotation(node);
if (color != null)
resolverNode.AddAnnotation(color);
currentNavigator.Resolved(resolverNode, resolver.Resolve(resolverNode));
}
base.Colorize(node, color);
}
protected override void Colorize(Identifier identifier, ResolveResult rr)
{
if (currentSymbolReference != null && currentNavigator == null)
currentNavigator = InitNavigator();
if (currentNavigator != null) {
currentNavigator.Resolved(identifier, rr);
}
base.Colorize(identifier, rr);
}
public override void VisitPrimitiveType(PrimitiveType primitiveType)
{
// highlight usages of primitive types as well.
Colorize(primitiveType, null);
}
public readonly Color DefaultFillColor = Color.FromArgb(22, 30, 130, 255);
public void SetCurrentSymbol(ISymbol symbol)
{
currentNavigator = null;
currentSymbolReference = null;
if (symbol != null)
currentSymbolReference = symbol.ToReference();
InvalidateAll();
}
void InvalidateAll()
{
cachedLines.Clear();
invalidLines.Clear();
forceParseOnNextRefresh = true;
OnHighlightingStateChanged(1, document.LineCount);
}
FindReferences findReferences = new FindReferences();
IResolveVisitorNavigator InitNavigator()
{
if (currentSymbolReference == null) return null;
var compilation = resolver.Compilation;
var symbol = currentSymbolReference.Resolve(compilation.TypeResolveContext);
var searchScopes = findReferences.GetSearchScopes(symbol);
if (searchScopes.Count == 0)
return null;
var navigators = new IResolveVisitorNavigator[searchScopes.Count];
for (int i = 0; i < navigators.Length; i++) {
navigators[i] = searchScopes[i].GetNavigator(compilation, ColorizeMatch);
}
IResolveVisitorNavigator combinedNavigator;
if (searchScopes.Count == 1) {
combinedNavigator = navigators[0];
} else {
combinedNavigator = new CompositeResolveVisitorNavigator(navigators);
}
return combinedNavigator;
}
void ColorizeMatch(AstNode node, ResolveResult result)
{
Identifier identifier = node.Annotation<Identifier>() ?? node.GetChildByRole(Roles.Identifier);
TextLocation start, end;
if (!identifier.IsNull) {
start = identifier.StartLocation;
end = identifier.EndLocation;
} else {
start = node.StartLocation;
end = node.EndLocation;
}
var complementary = node.Annotation<HighlightingColor>();
HighlightingColor newColor = symbolReferenceColor;
if (complementary != null) {
newColor = newColor.Clone();
newColor.MergeWith(complementary);
}
Colorize(start, end, newColor);
}
#endregion
}
}

30
src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormattingStrategy/CSharpFormattingStrategy.cs

@ -21,6 +21,7 @@ using System.Diagnostics; @@ -21,6 +21,7 @@ using System.Diagnostics;
using System.Linq;
using System.Text;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Indentation.CSharp;
using ICSharpCode.Core;
@ -62,11 +63,10 @@ namespace CSharpBinding.FormattingStrategy @@ -62,11 +63,10 @@ namespace CSharpBinding.FormattingStrategy
{
engine.Update(line.EndOffset);
if (engine.NeedsReindent) {
int textOffset = line.Offset;
while (textOffset < line.EndOffset && char.IsWhiteSpace(document.GetCharAt(textOffset)))
textOffset++;
string newText = document.GetText(textOffset, line.Length + line.Offset - textOffset);
document.Replace(line.Offset, line.Length, engine.ThisLineIndent + newText);
var indentation = TextUtilities.GetWhitespaceAfter(document, line.Offset);
// replacing the indentation in two steps is necessary to make the caret move accordingly.
document.Replace(indentation.Offset, indentation.Length, "");
document.Replace(indentation.Offset, 0, engine.ThisLineIndent);
engine.ResetEngineToPosition(line.Offset);
}
}
@ -194,7 +194,7 @@ namespace CSharpBinding.FormattingStrategy @@ -194,7 +194,7 @@ namespace CSharpBinding.FormattingStrategy
char ch = textArea.Document.GetCharAt(i);
if (ch == '"') {
// parsing strings correctly is too complicated (see above),
// but I don't now any case where a doc comment is after a string...
// but I don't know any case where a doc comment is after a string...
return false;
}
if (ch == '/' && i + 2 < cursorOffset && textArea.Document.GetCharAt(i + 1) == '/' && textArea.Document.GetCharAt(i + 2) == '/') {
@ -274,11 +274,11 @@ namespace CSharpBinding.FormattingStrategy @@ -274,11 +274,11 @@ namespace CSharpBinding.FormattingStrategy
string terminator = DocumentUtilities.GetLineTerminator(textArea.Document, lineNr);
string curLineText;
//// local string for curLine segment
// local string for curLine segment
if (ch == '/') {
curLineText = textArea.Document.GetText(curLine);
string lineAboveText = lineAbove == null ? "" : textArea.Document.GetText(lineAbove);
if (curLineText != null && curLineText.EndsWith("///") && (lineAboveText == null || !lineAboveText.Trim().StartsWith("///"))) {
if (curLineText != null && curLineText.EndsWith("///", StringComparison.Ordinal) && (lineAboveText == null || !lineAboveText.Trim().StartsWith("///", StringComparison.Ordinal))) {
string indentation = DocumentUtilities.GetWhitespaceAfter(textArea.Document, curLine.Offset);
IUnresolvedEntity member = GetMemberAfter(textArea, lineNr);
if (member != null) {
@ -341,10 +341,10 @@ namespace CSharpBinding.FormattingStrategy @@ -341,10 +341,10 @@ namespace CSharpBinding.FormattingStrategy
commentBuilder.Append(curLineText[ i]);
}
string tag = commentBuilder.ToString().Trim();
if (!tag.EndsWith(">")) {
if (!tag.EndsWith(">", StringComparison.Ordinal)) {
tag += ">";
}
if (!tag.StartsWith("/")) {
if (!tag.StartsWith("/", StringComparison.Ordinal)) {
textArea.Document.Insert(cursorOffset, "</" + tag.Substring(1), AnchorMovementType.BeforeInsertion);
}
}
@ -361,10 +361,10 @@ namespace CSharpBinding.FormattingStrategy @@ -361,10 +361,10 @@ namespace CSharpBinding.FormattingStrategy
break;
case '\n':
string lineAboveText = lineAbove == null ? "" : textArea.Document.GetText(lineAbove);
//// curLine might have some text which should be added to indentation
// curLine might have some text which should be added to indentation
curLineText = textArea.Document.GetText(curLine);
if (lineAboveText != null && lineAboveText.Trim().StartsWith("#region")
if (lineAboveText != null && lineAboveText.Trim().StartsWith("#region", StringComparison.Ordinal)
&& NeedEndregion(textArea.Document))
{
textArea.Document.Insert(cursorOffset, "#endregion");
@ -398,8 +398,8 @@ namespace CSharpBinding.FormattingStrategy @@ -398,8 +398,8 @@ namespace CSharpBinding.FormattingStrategy
IDocumentLine nextLine = lineNr + 1 <= textArea.Document.LineCount ? textArea.Document.GetLineByNumber(lineNr + 1) : null;
string nextLineText = (nextLine != null) ? textArea.Document.GetText(nextLine) : "";
int indexAbove = lineAboveText.IndexOf("///");
int indexNext = nextLineText.IndexOf("///");
int indexAbove = lineAboveText.IndexOf("///", StringComparison.Ordinal);
int indexNext = nextLineText.IndexOf("///", StringComparison.Ordinal);
if (indexAbove > 0 && (indexNext != -1 || indexAbove + 4 < lineAbove.Length)) {
textArea.Document.Insert(cursorOffset, "/// ");
return;
@ -413,7 +413,7 @@ namespace CSharpBinding.FormattingStrategy @@ -413,7 +413,7 @@ namespace CSharpBinding.FormattingStrategy
}
if (textArea.Options.AutoInsertBlockEnd && lineAbove != null && isInNormalCode) {
string oldLineText = textArea.Document.GetText(lineAbove);
if (oldLineText.EndsWith("{")) {
if (oldLineText.EndsWith("{", StringComparison.Ordinal)) {
if (NeedCurlyBracket(textArea.Document.Text)) {
int insertionPoint = curLine.Offset + curLine.Length;
textArea.Document.Insert(insertionPoint, terminator + "}");

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeActionProviderDoozer.cs

@ -115,6 +115,8 @@ namespace CSharpBinding.Refactoring @@ -115,6 +115,8 @@ namespace CSharpBinding.Refactoring
CSharpAstResolver resolver = await context.GetAstResolverAsync().ConfigureAwait(false);
var refactoringContext = new SDRefactoringContext(context.TextSource, resolver, context.CaretLocation, selectionStart, selectionLength, cancellationToken);
return codeActionProvider.GetActions(refactoringContext).Select(Wrap).ToArray();
} catch (OperationCanceledException) {
throw; // don't catch cancellations
} catch (Exception ex) {
SD.Log.WarnFormatted("CSharpContextActionProviderWrapper crashed: {0}", ex);
SD.AnalyticsMonitor.TrackException(ex);

61
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/IssueManager.cs

@ -343,10 +343,71 @@ namespace CSharpBinding.Refactoring @@ -343,10 +343,71 @@ namespace CSharpBinding.Refactoring
var markers = markerService.GetMarkersAtOffset(context.CaretOffset);
foreach (var tag in markers.Select(m => m.Tag).OfType<InspectionTag>()) {
result.AddRange(tag.Actions);
string issueName;
if (CanSuppress(tag, out issueName)) {
result.Add(new SuppressIssueContextAction(issueName, SuppressType.Once));
result.Add(new SuppressIssueContextAction(issueName, SuppressType.Always));
}
}
}
return Task.FromResult(result.ToArray());
}
bool CanSuppress(InspectionTag tag, out string issueName)
{
var attr = (IssueDescriptionAttribute)tag.Provider.ProviderType.GetCustomAttributes(false).FirstOrDefault(a => a is IssueDescriptionAttribute);
issueName = null;
if (attr == null || attr.AnalysisDisableKeyword == null)
return false;
issueName = attr.AnalysisDisableKeyword;
return true;
}
enum SuppressType {
Once,
Always
}
[ContextAction("Suppress issue", Description = "Suppresses an issue.")]
class SuppressIssueContextAction : ContextAction
{
string issueName;
SuppressType type;
public SuppressIssueContextAction(string issueName, SuppressType type)
{
this.issueName = issueName;
this.type = type;
}
public override Task<bool> IsAvailableAsync(EditorRefactoringContext context, CancellationToken cancellationToken)
{
return Task.FromResult(true);
}
public override string DisplayName
{
get {
string fmt;
if (type == SuppressType.Once)
fmt = "Suppress '{0}' once";
else
fmt = "Suppress '{0}'";
return string.Format(fmt, issueName);
}
}
public override void Execute(EditorRefactoringContext context)
{
var myContext = SDRefactoringContext.Create(context.Editor, default(CancellationToken));
var currentNode = myContext.RootNode.GetNodeAt<Statement>(context.CaretLocation);
if (currentNode == null)
return;
using (var script = myContext.StartScript()) {
script.InsertBefore(currentNode, new Comment(string.Format(" disable{1}{0}", issueName, type == SuppressType.Once ? " once " : " ")));
}
}
}
#endregion
}
}

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/MoveTypeToFileContextAction.cs

@ -47,7 +47,7 @@ namespace CSharpBinding.Refactoring @@ -47,7 +47,7 @@ namespace CSharpBinding.Refactoring
SyntaxTree st = await context.GetSyntaxTreeAsync().ConfigureAwait(false);
Identifier identifier = (Identifier)st.GetNodeAt(context.CaretLocation, node => node.Role == Roles.Identifier);
if (identifier == null) return false;
if (MakeValidFileName(identifier.Name).Equals(Path.GetFileNameWithoutExtension(context.FileName), StringComparison.OrdinalIgnoreCase))
if (MakeValidFileName(identifier.Name).Equals(Path.GetFileName(context.FileName), StringComparison.OrdinalIgnoreCase))
return false;
if (identifier.Parent.Parent is TypeDeclaration)
return false;

6
src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/OpenTextEditors.cs

@ -37,8 +37,10 @@ namespace ICSharpCode.WixBinding @@ -37,8 +37,10 @@ namespace ICSharpCode.WixBinding
{
foreach (IViewContent view in workbench.ViewContentCollection) {
ITextEditor textEditor = view.GetService<ITextEditor>();
if (AreFileNamesEqual(view.PrimaryFileName, document.FileName)) {
return textEditor;
if (textEditor != null) {
if (AreFileNamesEqual(view.PrimaryFileName, document.FileName)) {
return textEditor;
}
}
}
return null;

17
src/AddIns/BackendBindings/WixBinding/Test/PackageFiles/OpenTextEditorsTestFixture.cs

@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
using System;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.WixBinding;
using NUnit.Framework;
using WixBinding.Tests.Utils;
@ -37,7 +38,7 @@ namespace WixBinding.Tests.PackageFiles @@ -37,7 +38,7 @@ namespace WixBinding.Tests.PackageFiles
{
SD.InitializeForUnitTests();
existingTextEditor = new MockTextEditor();
MockTextEditorViewContent viewContent = new MockTextEditorViewContent();
var viewContent = new MockTextEditorViewContent();
viewContent.TextEditor = existingTextEditor;
viewContent.SetFileName(@"d:\projects\test\file.wxs");
@ -64,5 +65,19 @@ namespace WixBinding.Tests.PackageFiles @@ -64,5 +65,19 @@ namespace WixBinding.Tests.PackageFiles
unknownDocument.FileName = @"d:\unknown-file.wxs";
Assert.IsNull(openEditors.FindTextEditorForDocument(unknownDocument));
}
[Test]
public void FindTextEditorForDocument_FirstViewContentHasNoTextEditorAndNoPrimaryFileName_DoesNotThrowNullReferenceException()
{
var viewContent = new MockViewContent();
viewContent.PrimaryFile = null;
workbench.ViewContentCollection.Add(viewContent);
var unknownDocument = new WixDocument();
unknownDocument.FileName = @"d:\unknown-file.wxs";
ITextEditor textEditor = openEditors.FindTextEditorForDocument(unknownDocument);
Assert.IsNull(textEditor);
}
}
}

1
src/AddIns/BackendBindings/WixBinding/Test/Utils/MockViewContent.cs

@ -65,6 +65,7 @@ namespace WixBinding.Tests.Utils @@ -65,6 +65,7 @@ namespace WixBinding.Tests.Utils
public OpenedFile PrimaryFile {
get { return primaryFile; }
set { primaryFile = value; }
}
public FileName PrimaryFileName {

7
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlAstResolver.cs

@ -49,6 +49,13 @@ namespace ICSharpCode.XamlBinding @@ -49,6 +49,13 @@ namespace ICSharpCode.XamlBinding
public ResolveResult ResolveAtLocation(TextLocation location, CancellationToken cancellationToken = default(CancellationToken))
{
int offset = textDocument.GetOffset(location);
var line = textDocument.GetLineByNumber(location.Line);
if (offset == line.EndOffset)
return ErrorResolveResult.UnknownError;
if (char.IsWhiteSpace(textDocument.GetCharAt(offset)))
return ErrorResolveResult.UnknownError;
AXmlObject innermost = parseInfo.Document.GetChildAtOffset(offset);
if (innermost is AXmlText)
return ResolveText((AXmlText)innermost, cancellationToken);

1
src/AddIns/Debugger/Debugger.AddIn/Pads/AutoCompleteTextBox.cs

@ -86,6 +86,7 @@ namespace Debugger.AddIn.Pads.Controls @@ -86,6 +86,7 @@ namespace Debugger.AddIn.Pads.Controls
this.editor.ClearValue(TextEditor.FontFamilyProperty);
this.editor.ClearValue(TextEditor.FontSizeProperty);
this.editor.ShowLineNumbers = false;
this.editor.Options.HighlightCurrentLine = false;
this.editor.WordWrap = false;
this.editor.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden;
this.editor.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden;

2
src/AddIns/Debugger/Debugger.AddIn/Pads/CallStackPad.cs

@ -115,7 +115,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -115,7 +115,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void listView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
CallStackItem item = listView.SelectedItem as CallStackItem;
if (item == null)
if ((item == null) || (item.Frame == null))
return;
if (item.Frame.Process.IsPaused) {

5
src/AddIns/Debugger/Debugger.AddIn/Pads/WatchPad.cs

@ -166,6 +166,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -166,6 +166,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
pad.AddWatch(watchValue);
}
public override DragDropEffects GetDropEffect(DragEventArgs e, int index)
{
return DragDropEffects.Copy;
}
}
static class WpfExtensions

2
src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj

@ -134,7 +134,6 @@ @@ -134,7 +134,6 @@
<Compile Include="Src\AvalonEditorControlService.cs" />
<Compile Include="Src\AvalonEditViewContent.cs" />
<Compile Include="Src\BracketHighlightRenderer.cs" />
<Compile Include="Src\CaretReferencesRenderer.cs" />
<Compile Include="Src\ChooseEncodingDialog.xaml.cs">
<DependentUpon>ChooseEncodingDialog.xaml</DependentUpon>
<SubType>Code</SubType>
@ -143,7 +142,6 @@ @@ -143,7 +142,6 @@
<Compile Include="Src\CodeEditor.cs" />
<Compile Include="Src\CodeEditorAdapter.cs" />
<Compile Include="Src\CodeEditorView.cs" />
<Compile Include="Src\ExpressionHighlightRenderer.cs" />
<Compile Include="Src\CaretHighlightAdorner.cs" />
<Compile Include="Src\NewLineConsistencyCheck.cs" />
<Compile Include="Src\SearchPanelLocalization.cs" />

202
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CaretReferencesRenderer.cs

@ -1,202 +0,0 @@ @@ -1,202 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT 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;
using System.Windows.Threading;
using ICSharpCode.AvalonEdit.AddIn.Options;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.AvalonEdit.AddIn
{
/* /// <summary>
/// In the code editor, highlights all references to the expression under the caret (for better code readability).
/// </summary>
public class CaretReferencesRenderer
{
/// <summary>
/// Delays the Resolve check so that it does not get called too often when user holds an arrow.
/// </summary>
DispatcherTimer delayMoveTimer;
const int delayMoveMs = 100;
/// <summary>
/// Delays the Find references (and highlight) after the caret stays at one point for a while.
/// </summary>
DispatcherTimer delayTimer;
const int delayMs = 800;
/// <summary>
/// Maximum time for Find references. After this time it gets cancelled and no highlight is displayed.
/// Useful for very large files.
/// </summary>
const int findReferencesTimeoutMs = 200;
CodeEditorView editorView;
ITextEditor Editor { get { return editorView.Adapter; } }
ExpressionHighlightRenderer highlightRenderer;
ResolveResult lastResolveResult;
public bool IsEnabled
{
get {
string fileName = this.Editor.FileName;
return CodeEditorOptions.Instance.HighlightSymbol && (fileName.EndsWith(".cs") || fileName.EndsWith(".vb"));
}
}
/// <summary>
/// In the code editor, highlights all references to the expression under the caret (for better code readability).
/// </summary>
public CaretReferencesRenderer(CodeEditorView editorView)
{
this.editorView = editorView;
this.highlightRenderer = new ExpressionHighlightRenderer(this.editorView.TextArea.TextView);
this.delayTimer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(delayMs) };
this.delayTimer.Stop();
this.delayTimer.Tick += TimerTick;
this.delayMoveTimer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(delayMoveMs) };
this.delayMoveTimer.Stop();
this.delayMoveTimer.Tick += TimerMoveTick;
this.editorView.TextArea.Caret.PositionChanged += CaretPositionChanged;
// fixes SD-1873 - Unhandled WPF Exception when deleting text in text editor
// clear highlights to avoid exceptions when trying to draw highlights in
// locations that have been deleted already.
this.editorView.Document.Changed += delegate { lastResolveResult = null; ClearHighlight(); };
}
public void ClearHighlight()
{
this.highlightRenderer.ClearHighlight();
}
/// <summary>
/// In the current document, highlights all references to the expression
/// which is currently under the caret (local variable, class, property).
/// This gets called on every caret position change, so quite often.
/// </summary>
void CaretPositionChanged(object sender, EventArgs e)
{
Restart(this.delayMoveTimer);
}
void TimerTick(object sender, EventArgs e)
{
this.delayTimer.Stop();
if (!IsEnabled)
return;
var referencesToBeHighlighted = FindReferencesInCurrentFile(this.lastResolveResult);
this.highlightRenderer.SetHighlight(referencesToBeHighlighted);
}
void TimerMoveTick(object sender, EventArgs e)
{
this.delayMoveTimer.Stop();
this.delayTimer.Stop();
if (!IsEnabled)
return;
var resolveResult = GetExpressionAtCaret();
if (resolveResult == null) {
this.lastResolveResult = null;
this.highlightRenderer.ClearHighlight();
return;
}
// caret is over symbol and that symbol is different from the last time
if (!SameResolveResult(resolveResult, lastResolveResult))
{
this.lastResolveResult = resolveResult;
this.highlightRenderer.ClearHighlight();
this.delayTimer.Start();
} else {
// highlight stays the same, both timers are stopped (will start again when caret moves)
}
}
/// <summary>
/// Resolves the current expression under caret.
/// This gets called on every caret position change, so quite often.
/// </summary>
ResolveResult GetExpressionAtCaret()
{
if (string.IsNullOrEmpty(Editor.FileName) || ParserService.LoadSolutionProjectsThreadRunning)
return null;
int line = Editor.Caret.Position.Line;
int column = Editor.Caret.Position.Column;
return ParserService.Resolve(line, column, Editor.Document, Editor.FileName);
}
/// <summary>
/// Finds references to resolved expression in the current file.
/// </summary>
List<Reference> FindReferencesInCurrentFile(ResolveResult resolveResult)
{
if (resolveResult == null)
return null;
var cancellationTokenSource = new CancellationTokenSource();
using (new Timer(
delegate {
LoggingService.Debug("Aborting FindReferencesInCurrentFile due to timeout");
cancellationTokenSource.Cancel();
}, null, findReferencesTimeoutMs, Timeout.Infinite))
{
var progressMonitor = new DummyProgressMonitor();
progressMonitor.CancellationToken = cancellationTokenSource.Token;
var references = RefactoringService.FindReferencesLocal(resolveResult, Editor.FileName, progressMonitor);
if (references == null || references.Count == 0)
return null;
return references;
}
}
/// <summary>
/// Returns true if the 2 ResolveResults refer to the same symbol.
/// So that when caret moves but stays inside the same symbol, symbol stays highlighted.
/// </summary>
bool SameResolveResult(ResolveResult resolveResult, ResolveResult resolveResult2)
{
//if (resolveResult == null && resolveResult2 == null)
// return true;
//if (resolveResult == null && resolveResult2 != null)
// return false;
//if (resolveResult != null && resolveResult2 == null)
// return false;
// TODO determine if 2 ResolveResults refer to the same symbol
return false;
}
/// <summary>
/// Restarts a timer.
/// </summary>
void Restart(DispatcherTimer timer)
{
timer.Stop();
timer.Start();
}
}
*/
}

97
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ExpressionHighlightRenderer.cs

@ -1,97 +0,0 @@ @@ -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.Diagnostics;
using System.Windows.Media;
using System.Collections.Generic;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Rendering;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.AvalonEdit.AddIn
{
/*
/// <summary>
/// Highlights expressions (references to expression under current caret).
/// </summary>
public class ExpressionHighlightRenderer : IBackgroundRenderer
{
List<Reference> renderedReferences;
Pen borderPen;
Brush backgroundBrush;
TextView textView;
public readonly Color DefaultBorderColor = Color.FromArgb(52, 30, 130, 255); //Color.FromArgb(180, 70, 230, 70))
public readonly Color DefaultFillColor = Color.FromArgb(22, 30, 130, 255); //Color.FromArgb(40, 60, 255, 60)
readonly int borderThickness = 1;
readonly int cornerRadius = 1;
public void SetHighlight(List<Reference> renderedReferences)
{
if (this.renderedReferences != renderedReferences) {
this.renderedReferences = renderedReferences;
textView.InvalidateLayer(this.Layer);
}
}
public void ClearHighlight()
{
this.SetHighlight(null);
}
public ExpressionHighlightRenderer(TextView textView)
{
if (textView == null)
throw new ArgumentNullException("textView");
this.textView = textView;
this.borderPen = new Pen(new SolidColorBrush(DefaultBorderColor), borderThickness);
this.backgroundBrush = new SolidColorBrush(DefaultFillColor);
this.borderPen.Freeze();
this.backgroundBrush.Freeze();
this.textView.BackgroundRenderers.Add(this);
}
public KnownLayer Layer {
get {
return KnownLayer.Selection;
}
}
public void Draw(TextView textView, DrawingContext drawingContext)
{
if (this.renderedReferences == null)
return;
BackgroundGeometryBuilder builder = new BackgroundGeometryBuilder();
builder.CornerRadius = cornerRadius;
builder.AlignToMiddleOfPixels = true;
foreach (var reference in this.renderedReferences) {
builder.AddSegment(textView, new TextSegment() {
StartOffset = reference.Offset,
Length = reference.Length });
builder.CloseFigure();
}
Geometry geometry = builder.CreateGeometry();
if (geometry != null) {
drawingContext.DrawGeometry(backgroundBrush, borderPen, geometry);
}
}
}
*/
}

1
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml.cs

@ -596,6 +596,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options @@ -596,6 +596,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
}
textEditor.Select(0, 0);
bracketHighlighter.SetHighlight(null);
textEditor.Options.HighlightCurrentLine = false;
item.ShowExample(textEditor.TextArea);
ITextMarker m = textMarkerService.TextMarkers.SingleOrDefault();
if (m != null && m.Tag != null) {

45
src/AddIns/Misc/AddInManager2/Project/Src/View/AddInsView.xaml

@ -453,6 +453,15 @@ @@ -453,6 +453,15 @@
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
<Style x:Key="allPackagesListBoxStyle" TargetType="ListBox">
<Setter Property="Visibility" Value="Hidden" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasError}" Value="False">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid>
@ -483,24 +492,6 @@ @@ -483,24 +492,6 @@
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- <TextBlock
Grid.Row="0"
Grid.Column="0"
VerticalAlignment="Center"
Margin="2, 0, 5, 2"
Visibility="{Binding Path=ShowPackageRepositories, Converter={StaticResource BoolToVisibility}}"
Text="{core:Localize AddInManager2.AddInsView.Repository}" />
<ComboBox
Grid.Row="0"
Grid.Column="1"
Grid.ColumnSpan="2"
Margin="2, 0, 0, 2"
Style="{StaticResource PackageSourceComboBoxStyle}"
SelectedItem="{Binding Path=SelectedPackageSource}"
ItemsSource="{Binding Path=PackageRepositories}"
ItemTemplate="{StaticResource PackageSourceComboBoxItemTemplate}"
Visibility="{Binding Path=ShowPackageRepositories, Converter={StaticResource BoolToVisibility}}"/>-->
<TextBlock
Grid.Row="1"
Grid.Column="0"
@ -534,10 +525,6 @@ @@ -534,10 +525,6 @@
</Grid>
<Grid Grid.Row="1">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListBox
x:Name="allPackagesListBox"
Grid.Row="0"
@ -548,6 +535,14 @@ @@ -548,6 +535,14 @@
ItemContainerStyle="{StaticResource packageListBoxItemContainerStyle}"
HorizontalContentAlignment="Stretch"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
<TextBlock
x:Name="ErrorMessageText"
Grid.Row="0"
Visibility="{Binding Path=HasError, Converter={StaticResource BoolToVisibility}}"
Text="{Binding Path=ErrorMessage}"
TextWrapping="Wrap"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<ProgressBar
Grid.Row="0"
Height="20"
@ -556,12 +551,6 @@ @@ -556,12 +551,6 @@
Visibility="{Binding Path=IsReadingPackages, Converter={StaticResource BoolToVisibility}}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<TextBlock
x:Name="ErrorMessageText"
Grid.Row="0"
Visibility="{Binding Path=HasError, Converter={StaticResource BoolToVisibility}}"
Text="{Binding Path=ErrorMessage}"
TextWrapping="Wrap"/>
<aimview:PagedResultsView
x:Name="pagedResultsView"
Grid.Row="1"

3
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AddInManagerViewModel.cs

@ -132,8 +132,7 @@ namespace ICSharpCode.AddInManager2.ViewModel @@ -132,8 +132,7 @@ namespace ICSharpCode.AddInManager2.ViewModel
private void ShowErrorMessage(string message)
{
this.Message = StringParser.Parse(message);
this.HasError = true;
SD.MessageService.ShowWarning(StringParser.Parse(message));
}
public string Message

3
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs

@ -62,8 +62,8 @@ namespace ICSharpCode.AddInManager2.ViewModel @@ -62,8 +62,8 @@ namespace ICSharpCode.AddInManager2.ViewModel
private void StartReadPackagesTask()
{
IsReadingPackages = true;
HasError = false;
IsReadingPackages = true;
// ClearPackages();
CancelReadPackagesTask();
CreateReadPackagesTask();
@ -107,6 +107,7 @@ namespace ICSharpCode.AddInManager2.ViewModel @@ -107,6 +107,7 @@ namespace ICSharpCode.AddInManager2.ViewModel
bool wasCancelled = false;
if (task.IsFaulted)
{
ClearPackages();
SaveError(task.Exception);
}
else if (task.IsCancelled)

11
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingBrush.cs

@ -58,23 +58,26 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -58,23 +58,26 @@ namespace ICSharpCode.AvalonEdit.Highlighting
/// Highlighting brush implementation that takes a frozen brush.
/// </summary>
[Serializable]
sealed class SimpleHighlightingBrush : HighlightingBrush, ISerializable
public sealed class SimpleHighlightingBrush : HighlightingBrush, ISerializable
{
readonly SolidColorBrush brush;
public SimpleHighlightingBrush(SolidColorBrush brush)
internal SimpleHighlightingBrush(SolidColorBrush brush)
{
brush.Freeze();
this.brush = brush;
}
/// <inheritdoc/>
public SimpleHighlightingBrush(Color color) : this(new SolidColorBrush(color)) {}
/// <inheritdoc/>
public override Brush GetBrush(ITextRunConstructionContext context)
{
return brush;
}
/// <inheritdoc/>
public override string ToString()
{
return brush.ToString();
@ -91,6 +94,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -91,6 +94,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
info.AddValue("color", brush.Color.ToString(CultureInfo.InvariantCulture));
}
/// <inheritdoc/>
public override bool Equals(object obj)
{
SimpleHighlightingBrush other = obj as SimpleHighlightingBrush;
@ -99,6 +103,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -99,6 +103,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
return this.brush.Color.Equals(other.brush.Color);
}
/// <inheritdoc/>
public override int GetHashCode()
{
return brush.Color.GetHashCode();

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/RichText.cs

@ -151,7 +151,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -151,7 +151,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
/// </summary>
public RichTextModel ToRichTextModel()
{
return new RichTextModel(stateChangeOffsets, stateChanges);
return new RichTextModel(stateChangeOffsets, stateChanges.Select(ch => ch.Clone()).ToArray());
}
/// <summary>

2
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/DeclareLocalVariableAction.cs

@ -72,6 +72,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -72,6 +72,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
guessedType = GetDelegateType(context, ((MethodGroupResolveResult)resolveResult).Methods.First(), expr);
}
var name = CreateMethodDeclarationAction.CreateBaseName(expr, guessedType);
name = context.GetLocalNameProposal(name, expr.StartLocation);
var type = context.UseExplicitTypes ? context.CreateShortType(guessedType) : new SimpleType("var");
var varDecl = new VariableDeclarationStatement(type, name, expr.Clone());
var replaceNode = visitor.Matches.First () as Expression;
@ -100,6 +101,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -100,6 +101,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
}
var linkedNodes = new List<AstNode>();
var name = CreateMethodDeclarationAction.CreateBaseName(expr, guessedType);
name = context.GetLocalNameProposal(name, expr.StartLocation);
var type = context.UseExplicitTypes ? context.CreateShortType(guessedType) : new SimpleType("var");
var varDecl = new VariableDeclarationStatement(type, name, expr.Clone());
linkedNodes.Add(varDecl.Variables.First().NameToken);

4
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Analysis/SemanticHighlightingVisitor.cs

@ -94,7 +94,7 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis @@ -94,7 +94,7 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis
protected abstract void Colorize(TextLocation start, TextLocation end, TColor color);
#region Colorize helper methods
protected void Colorize(Identifier identifier, ResolveResult rr)
protected virtual void Colorize(Identifier identifier, ResolveResult rr)
{
if (identifier.IsNull)
return;
@ -141,7 +141,7 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis @@ -141,7 +141,7 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis
VisitIdentifier(identifier); // un-colorize contextual keywords
}
protected void Colorize(AstNode node, TColor color)
protected virtual void Colorize(AstNode node, TColor color)
{
if (node.IsNull)
return;

16
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/BaseRefactoringContext.cs

@ -214,6 +214,22 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -214,6 +214,22 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
} while (type.Members.Select (m => m.GetChildByRole (Roles.Identifier)).Any (n => n.Name == proposedName));
return proposedName;
}
public virtual string GetLocalNameProposal (string name, TextLocation loc, bool camelCase = true)
{
string baseName = (camelCase ? char.ToLower (name [0]) : char.ToUpper (name [0])) + name.Substring (1);
var node = RootNode.GetNodeAt(loc);
if (node == null)
return baseName;
var context = GetResolverStateBefore (node);
int number = -1;
string proposedName;
do {
proposedName = AppendNumberToName (baseName, number++);
} while (!(context.ResolveSimpleName (proposedName, EmptyList<IType>.Instance) is UnknownIdentifierResolveResult));
return proposedName;
}
static string AppendNumberToName (string baseName, int number)
{

2
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs

@ -806,7 +806,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -806,7 +806,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
MethodDeclaration decl = new MethodDeclaration();
decl.Modifiers = GetMemberModifiers(method);
if (method.IsAsync)
if (method.IsAsync && ShowModifiers)
decl.Modifiers |= Modifiers.Async;
decl.ReturnType = ConvertType(method.ReturnType);
decl.Name = method.Name;

10
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Resolver/CSharpOperators.cs

@ -232,6 +232,16 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -232,6 +232,16 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
throw new NotSupportedException();
}
ISymbolReference ISymbol.ToReference()
{
throw new NotSupportedException();
}
IMemberReference IMember.ToReference()
{
throw new NotSupportedException();
}
TypeParameterSubstitution IMember.Substitution {
get {

27
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Resolver/ReducedExtensionMethod.cs

@ -33,7 +33,7 @@ namespace ICSharpCode.NRefactory.CSharp @@ -33,7 +33,7 @@ namespace ICSharpCode.NRefactory.CSharp
{
/// <summary>
/// An invocated extension method hides the extension parameter in its parameter list.
/// It's used to hide the internals of extension method invocation in certain situation to simulate the
/// It's used to hide the internals of extension method invocation in certain situation to simulate the
/// syntactic way of writing extension methods on semantic level.
/// </summary>
public class ReducedExtensionMethod : IMethod
@ -77,24 +77,37 @@ namespace ICSharpCode.NRefactory.CSharp @@ -77,24 +77,37 @@ namespace ICSharpCode.NRefactory.CSharp
this.baseMethod = baseMethod;
}
#region IMemberReference implementation
public IMember Resolve(ITypeResolveContext context)
{
return new ReducedExtensionMethod ((IMethod)baseMethod.ToMemberReference ().Resolve (context));
return new ReducedExtensionMethod ((IMethod)baseMethod.ToReference ().Resolve (context));
}
ISymbol ISymbolReference.Resolve(ITypeResolveContext context)
{
return Resolve(context);
}
public ITypeReference DeclaringTypeReference {
get {
return baseMethod.ToMemberReference ().DeclaringTypeReference;
return baseMethod.ToReference ().DeclaringTypeReference;
}
}
#endregion
}
public IMemberReference ToMemberReference()
{
return new ReducedExtensionMethodMemberReference (baseMethod);
}
public IMemberReference ToReference()
{
return new ReducedExtensionMethodMemberReference (baseMethod);
}
ISymbolReference ISymbol.ToReference()
{
return ToReference();
}
public IMember MemberDefinition {
get {
@ -240,10 +253,10 @@ namespace ICSharpCode.NRefactory.CSharp @@ -240,10 +253,10 @@ namespace ICSharpCode.NRefactory.CSharp
}
}
public IMethod ReducedFrom {
public IMethod ReducedFrom {
get {
return baseMethod;
}
}
}
public IList<IType> TypeArguments {

5
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs

@ -3170,6 +3170,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -3170,6 +3170,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
return type.ToString() + " " + name + ";";
}
public ISymbolReference ToReference()
{
return new VariableReference(type.ToTypeReference(), name, region, IsConst, ConstantValue);
}
}
sealed class SimpleConstant : SimpleVariable

5
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpAssembly.cs

@ -328,6 +328,11 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem @@ -328,6 +328,11 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
return assembly.GetTypeDefinition(key);
}
}
public ISymbolReference ToReference()
{
return new NamespaceReference(new DefaultAssemblyReference(assembly.AssemblyName), fullName);
}
}
}
}

6
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/TypeSystem/ResolvedUsingScope.cs

@ -21,6 +21,7 @@ using System.Collections.Concurrent; @@ -21,6 +21,7 @@ using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem;
@ -199,6 +200,11 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem @@ -199,6 +200,11 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
{
return null;
}
public ISymbolReference ToReference()
{
return new MergedNamespaceReference(ExternAlias, ((INamespace)this).FullName);
}
}
}
}

4
src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/Resolver/AnonymousTypeTests.cs

@ -141,7 +141,7 @@ class TestClass { @@ -141,7 +141,7 @@ class TestClass {
}";
var result = Resolve<InvocationResolveResult>(program);
IProperty prop = result.Type.GetProperties().Single();
IProperty propAfterRoundtrip = (IProperty)prop.ToMemberReference().Resolve(result.Member.Compilation.TypeResolveContext);
IProperty propAfterRoundtrip = (IProperty)prop.ToReference().Resolve(result.Member.Compilation.TypeResolveContext);
Assert.AreEqual(prop, propAfterRoundtrip);
}
@ -156,7 +156,7 @@ class TestClass { @@ -156,7 +156,7 @@ class TestClass {
}";
var result = Resolve<InvocationResolveResult>(program);
IMethod getter = result.Type.GetProperties().Single().Getter;
IMethod getterAfterRoundtrip = (IMethod)getter.ToMemberReference().Resolve(result.Member.Compilation.TypeResolveContext);
IMethod getterAfterRoundtrip = (IMethod)getter.ToReference().Resolve(result.Member.Compilation.TypeResolveContext);
Assert.AreEqual(getter, getterAfterRoundtrip);
}

8
src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs

@ -266,7 +266,7 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -266,7 +266,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
Assert.IsInstanceOf<SpecializedMethod>(method);
Assert.IsFalse(method.IsParameterized); // the method itself is not specialized
Assert.AreEqual(method.TypeParameters, method.TypeArguments);
var methodReference = method.ToMemberReference();
var methodReference = method.ToReference();
var resolvedMethod = methodReference.Resolve(compilation.TypeResolveContext);
Assert.AreEqual(method, resolvedMethod);
}
@ -1082,7 +1082,7 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -1082,7 +1082,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
{
ITypeDefinition type = GetTypeDefinition(typeof(ClassThatImplementsProperty));
var prop = type.Properties.Single(p => p.Name == "Prop");
var mr = prop.Getter.ToMemberReference();
var mr = prop.Getter.ToReference();
Assert.AreEqual(prop.Getter, mr.Resolve(compilation.TypeResolveContext));
}
@ -1130,7 +1130,7 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -1130,7 +1130,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
{
ITypeDefinition type = GetTypeDefinition(typeof(ClassThatImplementsPropertyExplicitly));
var prop = type.Properties.Single();
var mr = prop.Getter.ToMemberReference();
var mr = prop.Getter.ToReference();
Assert.AreEqual(prop.Getter, mr.Resolve(compilation.TypeResolveContext));
}
@ -1167,7 +1167,7 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -1167,7 +1167,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
IType type = compilation.FindType(typeof(ExplicitGenericInterfaceImplementationWithUnifiableMethods<int, int>));
Assert.AreEqual(2, type.GetMethods(m => m.IsExplicitInterfaceImplementation).Count());
foreach (IMethod method in type.GetMethods(m => m.IsExplicitInterfaceImplementation)) {
IMethod resolvedMethod = (IMethod)method.ToMemberReference().Resolve(compilation.TypeResolveContext);
IMethod resolvedMethod = (IMethod)method.ToReference().Resolve(compilation.TypeResolveContext);
Assert.AreEqual(method, resolvedMethod);
}
}

5
src/Libraries/NRefactory/ICSharpCode.NRefactory/Documentation/IdStringMemberReference.cs

@ -68,5 +68,10 @@ namespace ICSharpCode.NRefactory.Documentation @@ -68,5 +68,10 @@ namespace ICSharpCode.NRefactory.Documentation
}
return null;
}
ISymbol ISymbolReference.Resolve(ITypeResolveContext context)
{
return Resolve(context);
}
}
}

2
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/IField.cs

@ -93,5 +93,7 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -93,5 +93,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
/// If this is true, then ConstantValue contains the size of the buffer.
/// </summary>
bool IsFixed { get; }
new IMemberReference ToReference(); // solve ambiguity between IMember.ToReference() and IVariable.ToReference()
}
}

14
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/IMember.cs

@ -82,7 +82,7 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -82,7 +82,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
IMember CreateResolved(ITypeResolveContext context);
}
public interface IMemberReference
public interface IMemberReference : ISymbolReference
{
/// <summary>
/// Gets the declaring type reference for the member.
@ -101,7 +101,7 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -101,7 +101,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
/// <returns>
/// Returns the resolved member, or <c>null</c> if the member could not be found.
/// </returns>
IMember Resolve(ITypeResolveContext context);
new IMember Resolve(ITypeResolveContext context);
}
/// <summary>
@ -167,7 +167,17 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -167,7 +167,17 @@ namespace ICSharpCode.NRefactory.TypeSystem
/// If this member is specialized using open generic types, the resulting member reference will need to be looked up in an appropriate generic context.
/// Otherwise, the main resolve context of a compilation is sufficient.
/// </remarks>
[Obsolete("Use the ToReference method instead.")]
IMemberReference ToMemberReference();
/// <summary>
/// Creates a member reference that can be used to rediscover this member in another compilation.
/// </summary>
/// <remarks>
/// If this member is specialized using open generic types, the resulting member reference will need to be looked up in an appropriate generic context.
/// Otherwise, the main resolve context of a compilation is sufficient.
/// </remarks>
new IMemberReference ToReference();
/// <summary>
/// Gets the substitution belonging to this specialized member.

10
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/ISymbol.cs

@ -86,5 +86,15 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -86,5 +86,15 @@ namespace ICSharpCode.NRefactory.TypeSystem
/// Gets the short name of the symbol.
/// </summary>
string Name { get; }
/// <summary>
/// Creates a symbol reference that can be used to rediscover this symbol in another compilation.
/// </summary>
ISymbolReference ToReference();
}
public interface ISymbolReference
{
ISymbol Resolve(ITypeResolveContext context);
}
}

2
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedEntity.cs

@ -90,6 +90,8 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -90,6 +90,8 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
else
return null;
}
public abstract ISymbolReference ToReference();
public bool IsStatic { get { return unresolved.IsStatic; } }
public bool IsAbstract { get { return unresolved.IsAbstract; } }

16
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedMember.cs

@ -126,17 +126,27 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -126,17 +126,27 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
}
public abstract IMember Specialize(TypeParameterSubstitution substitution);
public virtual IMemberReference ToMemberReference()
IMemberReference IMember.ToReference()
{
return (IMemberReference)ToReference();
}
public override ISymbolReference ToReference()
{
var declTypeRef = this.DeclaringType.ToTypeReference();
if (IsExplicitInterfaceImplementation && ImplementedInterfaceMembers.Count == 1) {
return new ExplicitInterfaceImplementationMemberReference(declTypeRef, ImplementedInterfaceMembers[0].ToMemberReference());
return new ExplicitInterfaceImplementationMemberReference(declTypeRef, ImplementedInterfaceMembers[0].ToReference());
} else {
return new DefaultMemberReference(this.SymbolKind, declTypeRef, this.Name);
}
}
public virtual IMemberReference ToMemberReference()
{
return (IMemberReference)ToReference();
}
internal IMethod GetAccessor(ref IMethod accessorField, IUnresolvedMethod unresolvedAccessor)
{
if (unresolvedAccessor == null)

31
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedTypeParameter.cs

@ -372,10 +372,41 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -372,10 +372,41 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
{
return this == other; // use reference equality for type parameters
}
public virtual ISymbolReference ToReference()
{
if (owner == null)
return TypeParameterReference.Create(ownerType, index);
return new OwnedTypeParameterReference(owner.ToReference(), index);
}
public override string ToString()
{
return this.ReflectionName + " (owner=" + owner + ")";
}
}
public sealed class OwnedTypeParameterReference : ISymbolReference
{
ISymbolReference owner;
int index;
public OwnedTypeParameterReference(ISymbolReference owner, int index)
{
if (owner == null)
throw new ArgumentNullException("owner");
this.owner = owner;
this.index = index;
}
public ISymbol Resolve(ITypeResolveContext context)
{
var entity = owner.Resolve(context) as IEntity;
if (entity is ITypeDefinition)
return ((ITypeDefinition)entity).TypeParameters[index];
if (entity is IMethod)
return ((IMethod)entity).TypeParameters[index];
return null;
}
}
}

5
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractUnresolvedMember.cs

@ -152,6 +152,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -152,6 +152,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
return Resolve(ExtendContextForType(context, this.DeclaringTypeDefinition), this.SymbolKind, this.Name, interfaceTypeReference);
}
ISymbol ISymbolReference.Resolve(ITypeResolveContext context)
{
return ((IUnresolvedMember)this).Resolve(context);
}
protected static ITypeResolveContext ExtendContextForType(ITypeResolveContext assemblyContext, IUnresolvedTypeDefinition typeDef)
{
if (typeDef == null)

5
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/AccessorOwnerMemberReference.cs

@ -47,5 +47,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -47,5 +47,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
else
return null;
}
ISymbol ISymbolReference.Resolve(ITypeResolveContext context)
{
return ((IMemberReference)this).Resolve(context);
}
}
}

5
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultMemberReference.cs

@ -99,6 +99,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -99,6 +99,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
return null;
}
ISymbol ISymbolReference.Resolve(ITypeResolveContext context)
{
return ((IMemberReference)this).Resolve(context);
}
int ISupportsInterning.GetHashCodeForInterning()
{
return (int)symbolKind ^ typeReference.GetHashCode() ^ name.GetHashCode() ^ parameterTypes.GetHashCode();

57
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultParameter.cs

@ -138,5 +138,62 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -138,5 +138,62 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
}
return b.ToString();
}
public ISymbolReference ToReference()
{
if (owner == null)
return new ParameterReference(type.ToTypeReference(), name, region, isRef, isOut, isParams, isOptional, defaultValue);
return new OwnedParameterReference(owner.ToReference(), owner.Parameters.IndexOf(this));
}
}
sealed class OwnedParameterReference : ISymbolReference
{
readonly IMemberReference memberReference;
readonly int index;
public OwnedParameterReference(IMemberReference member, int index)
{
if (member == null)
throw new ArgumentNullException("member");
this.memberReference = member;
this.index = index;
}
public ISymbol Resolve(ITypeResolveContext context)
{
IParameterizedMember member = (IParameterizedMember)memberReference.Resolve(context);
return member.Parameters[index];
}
}
public sealed class ParameterReference : ISymbolReference
{
readonly ITypeReference type;
readonly string name;
readonly DomRegion region;
readonly bool isRef, isOut, isParams, isOptional;
readonly object defaultValue;
public ParameterReference(ITypeReference type, string name, DomRegion region, bool isRef, bool isOut, bool isParams, bool isOptional, object defaultValue)
{
if (type == null)
throw new ArgumentNullException("type");
if (name == null)
throw new ArgumentNullException("name");
this.type = type;
this.name = name;
this.region = region;
this.isRef = isRef;
this.isOut = isOut;
this.isParams = isParams;
this.isOptional = isOptional;
this.defaultValue = defaultValue;
}
public ISymbol Resolve(ITypeResolveContext context)
{
return new DefaultParameter(type.Resolve(context), name, region: region, isRef: isRef, isOut: isOut, isParams: isParams, isOptional: isOptional, defaultValue: defaultValue);
}
}
}

5
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedField.cs

@ -78,5 +78,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -78,5 +78,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
return this;
return new SpecializedField(this, substitution);
}
IMemberReference IField.ToReference()
{
return (IMemberReference)ToReference();
}
}
}

9
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedMethod.cs

@ -234,11 +234,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -234,11 +234,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
}
}
public override IMemberReference ToMemberReference()
public override ISymbolReference ToReference()
{
var declTypeRef = this.DeclaringType.ToTypeReference();
if (IsExplicitInterfaceImplementation && ImplementedInterfaceMembers.Count == 1) {
return new ExplicitInterfaceImplementationMemberReference(declTypeRef, ImplementedInterfaceMembers[0].ToMemberReference());
return new ExplicitInterfaceImplementationMemberReference(declTypeRef, ImplementedInterfaceMembers[0].ToReference());
} else {
return new DefaultMemberReference(
this.SymbolKind, declTypeRef, this.Name, this.TypeParameters.Count,
@ -246,6 +246,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -246,6 +246,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
}
}
public override IMemberReference ToMemberReference()
{
return (IMemberReference)ToReference();
}
public override IMember Specialize(TypeParameterSubstitution substitution)
{
if (TypeParameterSubstitution.Identity.Equals(substitution))

4
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedProperty.cs

@ -61,11 +61,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -61,11 +61,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
get { return unresolved.IsIndexer; }
}
public override IMemberReference ToMemberReference()
public override ISymbolReference ToReference()
{
var declTypeRef = this.DeclaringType.ToTypeReference();
if (IsExplicitInterfaceImplementation && ImplementedInterfaceMembers.Count == 1) {
return new ExplicitInterfaceImplementationMemberReference(declTypeRef, ImplementedInterfaceMembers[0].ToMemberReference());
return new ExplicitInterfaceImplementationMemberReference(declTypeRef, ImplementedInterfaceMembers[0].ToReference());
} else {
return new DefaultMemberReference(
this.SymbolKind, declTypeRef, this.Name, 0,

5
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedTypeDefinition.cs

@ -710,6 +710,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -710,6 +710,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
}
}
ISymbolReference ISymbol.ToReference()
{
return (ISymbolReference)ToTypeReference();
}
public IEnumerable<IType> GetNestedTypes(Predicate<ITypeDefinition> filter = null, GetMemberOptions options = GetMemberOptions.None)
{
const GetMemberOptions opt = GetMemberOptions.IgnoreInheritedMembers | GetMemberOptions.ReturnMemberDefinitions;

61
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedAssembly.cs

@ -462,7 +462,68 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -462,7 +462,68 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
else
return null;
}
public ISymbolReference ToReference()
{
return new NamespaceReference(new DefaultAssemblyReference(assembly.AssemblyName), ns.FullName);
}
}
}
}
public sealed class NamespaceReference : ISymbolReference
{
IAssemblyReference assemblyReference;
string fullName;
public NamespaceReference(IAssemblyReference assemblyReference, string fullName)
{
if (assemblyReference == null)
throw new ArgumentNullException("assemblyReference");
this.assemblyReference = assemblyReference;
this.fullName = fullName;
}
public ISymbol Resolve(ITypeResolveContext context)
{
IAssembly assembly = assemblyReference.Resolve(context);
INamespace parent = assembly.RootNamespace;
string[] parts = fullName.Split('.');
int i = 0;
while (i < parts.Length && parent != null) {
parent = parent.GetChildNamespace(parts[i]);
i++;
}
return parent;
}
}
public sealed class MergedNamespaceReference : ISymbolReference
{
string externAlias;
string fullName;
public MergedNamespaceReference(string externAlias, string fullName)
{
this.externAlias = externAlias;
this.fullName = fullName;
}
public ISymbol Resolve(ITypeResolveContext context)
{
string[] parts = fullName.Split('.');
INamespace parent = context.Compilation.GetNamespaceForExternAlias(externAlias);
int i = 0;
while (i < parts.Length && parent != null) {
parent = parent.GetChildNamespace(parts[i]);
i++;
}
return parent;
}
}
}

7
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedParameter.cs

@ -263,6 +263,13 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -263,6 +263,13 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
{
return DefaultParameter.ToString(this);
}
public ISymbolReference ToReference()
{
if (Owner == null)
return new ParameterReference(Type.ToTypeReference(), Name, Region, IsRef, IsOut, IsParams, true, ConstantValue);
return new OwnedParameterReference(Owner.ToReference(), Owner.Parameters.IndexOf(this));
}
}
}
}

32
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultVariable.cs

@ -73,5 +73,37 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -73,5 +73,37 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
public SymbolKind SymbolKind {
get { return SymbolKind.Variable; }
}
public ISymbolReference ToReference()
{
return new VariableReference(type.ToTypeReference(), name, region, isConst, constantValue);
}
}
public sealed class VariableReference : ISymbolReference
{
ITypeReference variableTypeReference;
string name;
DomRegion region;
bool isConst;
object constantValue;
public VariableReference(ITypeReference variableTypeReference, string name, DomRegion region, bool isConst, object constantValue)
{
if (variableTypeReference == null)
throw new ArgumentNullException("variableTypeReference");
if (name == null)
throw new ArgumentNullException("name");
this.variableTypeReference = variableTypeReference;
this.name = name;
this.region = region;
this.isConst = isConst;
this.constantValue = constantValue;
}
public ISymbol Resolve(ITypeResolveContext context)
{
return new DefaultVariable(variableTypeReference.Resolve(context), name, region, isConst, constantValue);
}
}
}

5
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DummyTypeParameter.cs

@ -208,5 +208,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -208,5 +208,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
bool ITypeParameter.HasValueTypeConstraint {
get { return false; }
}
public ISymbolReference ToReference()
{
return new TypeParameterReference(ownerType, index);
}
}
}

5
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/ExplicitInterfaceImplementationMemberReference.cs

@ -71,5 +71,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -71,5 +71,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
}
return members.FirstOrDefault(m => m.ImplementedInterfaceMembers.Count == 1 && interfaceMember.Equals(m.ImplementedInterfaceMembers[0]));
}
ISymbol ISymbolReference.Resolve(ITypeResolveContext context)
{
return Resolve(context);
}
}
}

10
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/GetClassTypeReference.cs

@ -25,7 +25,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -25,7 +25,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
/// Type Reference used when the fully qualified type name is known.
/// </summary>
[Serializable]
public sealed class GetClassTypeReference : ITypeReference, ISupportsInterning
public sealed class GetClassTypeReference : ITypeReference, ISymbolReference, ISupportsInterning
{
readonly IAssemblyReference assembly;
readonly FullTypeName fullTypeName;
@ -115,6 +115,14 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -115,6 +115,14 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
return type ?? new UnknownType(fullTypeName);
}
ISymbol ISymbolReference.Resolve(ITypeResolveContext context)
{
var type = Resolve(context);
if (type is ITypeDefinition)
return (ISymbol)type;
return null;
}
public override string ToString()
{
return fullTypeName.ToString() + (assembly != null ? ", " + assembly.ToString() : null);

5
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/MergedNamespace.cs

@ -155,5 +155,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -155,5 +155,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
return string.Format(CultureInfo.InvariantCulture, "[MergedNamespace {0}{1} (from {2} assemblies)]",
externAlias != null ? externAlias + "::" : null, this.FullName, this.namespaces.Length);
}
public ISymbolReference ToReference()
{
return new MergedNamespaceReference(externAlias, FullName);
}
}
}

10
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/NestedTypeReference.cs

@ -24,7 +24,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -24,7 +24,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
/// Type reference used to reference nested types.
/// </summary>
[Serializable]
public sealed class NestedTypeReference : ITypeReference, ISupportsInterning
public sealed class NestedTypeReference : ITypeReference, ISymbolReference, ISupportsInterning
{
readonly ITypeReference declaringTypeRef;
readonly string name;
@ -76,6 +76,14 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -76,6 +76,14 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
return new UnknownType(null, name, additionalTypeParameterCount);
}
ISymbol ISymbolReference.Resolve(ITypeResolveContext context)
{
var type = Resolve(context);
if (type is ITypeDefinition)
return (ISymbol)type;
return null;
}
public override string ToString()
{
if (additionalTypeParameterCount == 0)

12
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/SpecializedMember.cs

@ -70,13 +70,23 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -70,13 +70,23 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
}
public virtual IMemberReference ToMemberReference()
{
return ToReference();
}
public virtual IMemberReference ToReference()
{
return new SpecializingMemberReference(
baseMember.ToMemberReference(),
baseMember.ToReference(),
ToTypeReference(substitution.ClassTypeArguments),
null);
}
ISymbolReference ISymbol.ToReference()
{
return ToReference();
}
internal static IList<ITypeReference> ToTypeReference(IList<IType> typeArguments)
{
if (typeArguments == null)

11
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/SpecializedMethod.cs

@ -154,7 +154,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -154,7 +154,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
}
}
public override IMemberReference ToMemberReference()
public override IMemberReference ToReference()
{
// Pass the MethodTypeArguments to the SpecializingMemberReference only if
// the generic method itself is parameterized, not if the generic method is only
@ -169,14 +169,19 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -169,14 +169,19 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
// in the resulting member reference.
if (isParameterized) {
return new SpecializingMemberReference(
baseMember.ToMemberReference(),
baseMember.ToReference(),
ToTypeReference(base.Substitution.ClassTypeArguments),
ToTypeReference(base.Substitution.MethodTypeArguments));
} else {
return base.ToMemberReference();
return base.ToReference();
}
}
public override IMemberReference ToMemberReference()
{
return ToReference();
}
public override bool Equals(object obj)
{
SpecializedMethod other = obj as SpecializedMethod;

5
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/SpecializingMemberReference.cs

@ -50,6 +50,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -50,6 +50,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
);
}
ISymbol ISymbolReference.Resolve(ITypeResolveContext context)
{
return Resolve(context);
}
public ITypeReference DeclaringTypeReference {
get {
if (classTypeArgumentReferences != null)

7
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/TypeParameterReference.cs

@ -23,7 +23,7 @@ using ICSharpCode.NRefactory.Utils; @@ -23,7 +23,7 @@ using ICSharpCode.NRefactory.Utils;
namespace ICSharpCode.NRefactory.TypeSystem.Implementation
{
[Serializable]
public sealed class TypeParameterReference : ITypeReference
public sealed class TypeParameterReference : ITypeReference, ISymbolReference
{
static readonly TypeParameterReference[] classTypeParameterReferences = new TypeParameterReference[8];
static readonly TypeParameterReference[] methodTypeParameterReferences = new TypeParameterReference[8];
@ -80,6 +80,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -80,6 +80,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
}
}
ISymbol ISymbolReference.Resolve(ITypeResolveContext context)
{
return Resolve(context) as ISymbol;
}
public override string ToString()
{
if (ownerType == SymbolKind.Method)

19
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/TypeSystemExtensions.cs

@ -301,7 +301,7 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -301,7 +301,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
if (entity.Compilation == compilation)
return entity;
if (entity is IMember)
return ((IMember)entity).ToMemberReference().Resolve(compilation.TypeResolveContext);
return ((IMember)entity).ToReference().Resolve(compilation.TypeResolveContext);
else if (entity is ITypeDefinition)
return ((ITypeDefinition)entity).ToTypeReference().Resolve(compilation.TypeResolveContext).GetDefinition();
else
@ -319,7 +319,7 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -319,7 +319,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
return null;
if (member.Compilation == compilation)
return member;
return member.ToMemberReference().Resolve(compilation.TypeResolveContext);
return member.ToReference().Resolve(compilation.TypeResolveContext);
}
/// <summary>
@ -765,5 +765,20 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -765,5 +765,20 @@ namespace ICSharpCode.NRefactory.TypeSystem
return assembly.GetTypeDefinition (new TopLevelTypeName (namespaceName, name, typeParameterCount));
}
#endregion
#region ResolveResult
public static ISymbol GetSymbol(this ResolveResult rr)
{
if (rr is LocalResolveResult) {
return ((LocalResolveResult)rr).Variable;
} else if (rr is MemberResolveResult) {
return ((MemberResolveResult)rr).Member;
} else if (rr is TypeResolveResult) {
return ((TypeResolveResult)rr).Type.GetDefinition();
}
return null;
}
#endregion
}
}

8
src/Main/Base/Project/Editor/DocumentationUIBuilder.cs

@ -371,8 +371,12 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -371,8 +371,12 @@ namespace ICSharpCode.SharpDevelop.Editor
var model = referencedEntity.GetModel();
return delegate(object sender, RoutedEventArgs e) {
IEntity resolvedEntity = model != null ? model.Resolve() : null;
if (resolvedEntity != null)
SharpDevelop.NavigationService.NavigateTo(resolvedEntity);
if (resolvedEntity != null) {
bool shouldDisplayHelp = CodeCompletionOptions.TooltipLinkTarget == TooltipLinkTarget.Documentation
&& resolvedEntity.ParentAssembly.IsPartOfDotnetFramework();
if (!shouldDisplayHelp || !HelpProvider.ShowHelp(resolvedEntity))
NavigationService.NavigateTo(resolvedEntity);
}
e.Handled = true;
};
}

11
src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionPanelXaml.xaml

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:core="http://icsharpcode.net/sharpdevelop/core"
xmlns:gui="clr-namespace:ICSharpCode.SharpDevelop.Gui"
xmlns:sd="clr-namespace:ICSharpCode.SharpDevelop"
xmlns:widgets="clr-namespace:ICSharpCode.SharpDevelop.Widgets;assembly=ICSharpCode.SharpDevelop.Widgets">
<Grid>
<Grid.RowDefinitions>
@ -26,7 +27,7 @@ @@ -26,7 +27,7 @@
Header="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.DetailSettings}"
IsEnabled="{Binding EnableCodeCompletion}">
<Grid >
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
@ -38,6 +39,7 @@ @@ -38,6 +39,7 @@
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<CheckBox Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseDataUsageCache}"
@ -75,7 +77,7 @@ @@ -75,7 +77,7 @@
</CheckBox>
<TextBlock Grid.Row="4" Margin="0,3,0,13"
Text="{Binding WrapText}"
Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.LanguageDependend}"
TextWrapping="Wrap">
</TextBlock>
@ -97,6 +99,11 @@ @@ -97,6 +99,11 @@
IsEnabled="{Binding UseInsight}">
</CheckBox>
<StackPanel Grid.Row="9" Orientation="Horizontal" Margin="0,10">
<TextBlock Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.TooltipLinkTarget}" Margin="0,2,2,0" />
<ComboBox sd:EnumBinding.EnumType="{x:Type sd:TooltipLinkTarget}"
SelectedValue="{core:OptionBinding sd:CodeCompletionOptions.TooltipLinkTarget}" />
</StackPanel>
</Grid>
</GroupBox>
</Grid>

5
src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionPanelXaml.xaml.cs

@ -32,7 +32,6 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -32,7 +32,6 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
{
InitializeComponent();
this.DataContext = this;
WrapText = StringParser.Parse("${res:Dialog.Options.IDEOptions.CodeCompletion.LanguageDependend}");
}
#region overrides
@ -68,8 +67,6 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -68,8 +67,6 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
#endregion
public string WrapText {get; private set;}
#region Properties
private bool enableCodeCompletion;
@ -119,7 +116,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -119,7 +116,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
void Button_Click(object sender, RoutedEventArgs e)
{
ICSharpCode.SharpDevelop.Editor.CodeCompletion.CodeCompletionDataUsageCache.ResetCache();
CodeCompletionDataUsageCache.ResetCache();
}
}
}

2
src/Main/Base/Project/Src/Gui/Dialogs/AsynchronousWaitDialog.cs

@ -333,7 +333,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -333,7 +333,7 @@ namespace ICSharpCode.SharpDevelop.Gui
if (runningInOwnThread)
dlg.Show();
else
if (!dlg.Visible)
if (!collector.ProgressMonitorIsDisposed && !dlg.Visible)
dlg.ShowDialog();
}
};

38
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml.cs

@ -68,12 +68,30 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -68,12 +68,30 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
this.SerializationInfo.Add(new KeyItemPair("On", StringParser.Parse("${res:Dialog.ProjectOptions.Build.On}")));
this.SerializationInfo.Add(new KeyItemPair("Auto", StringParser.Parse("${res:Dialog.ProjectOptions.Build.Auto}")));
this.FileAlign = new List<KeyItemPair>();
this.FileAlign.Add(new KeyItemPair("512", "512"));
this.FileAlign.Add(new KeyItemPair("1024", "1024"));
this.FileAlign.Add(new KeyItemPair("2048", "2048"));
this.FileAlign.Add(new KeyItemPair("4096", "4096"));
this.FileAlign.Add(new KeyItemPair("8192", "8192"));
}
public void Load(MSBuildBasedProject project, string configuration, string platform)
{
int val;
if (!int.TryParse(BaseAddress.Value, NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out val)) {
val = 0x400000;
}
DllBaseAddress = "0x" + val.ToString("x", NumberFormatInfo.InvariantInfo);
this.TargetCPU = new List<KeyItemPair>();
supports32BitPreferred = false;
if (DotnetDetection.IsDotnet45Installed()) {
var outputType = projectOptions.GetProperty("OutputType", OutputType.Exe);
if (DotnetDetection.IsDotnet45Installed() &&
((outputType.Value == OutputType.Exe) || (outputType.Value == OutputType.WinExe))) {
var upgradableProject = projectOptions.Project as IUpgradableProject;
if (upgradableProject != null && upgradableProject.CurrentTargetFramework.Supports32BitPreferredOption)
supports32BitPreferred = projectOptions.Project.MinimumSolutionVersion >= SolutionFormatVersion.VS2010;
supports32BitPreferred = (projectOptions.Project.MinimumSolutionVersion >= SolutionFormatVersion.VS2010);
// Show 32 vs. 64 options even for library projects;
// it's relevant for web applications.
}
@ -87,22 +105,6 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -87,22 +105,6 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
this.TargetCPU.Add(new KeyItemPair("x64", StringParser.Parse("${res:Dialog.ProjectOptions.Build.TargetCPU.x64}")));
this.TargetCPU.Add(new KeyItemPair("Itanium", StringParser.Parse("${res:Dialog.ProjectOptions.Build.TargetCPU.Itanium}")));
this.FileAlign = new List<KeyItemPair>();
this.FileAlign.Add(new KeyItemPair("512", "512"));
this.FileAlign.Add(new KeyItemPair("1024", "1024"));
this.FileAlign.Add(new KeyItemPair("2048", "2048"));
this.FileAlign.Add(new KeyItemPair("4096", "4096"));
this.FileAlign.Add(new KeyItemPair("8192", "8192"));
}
public void Load(MSBuildBasedProject project, string configuration, string platform)
{
int val;
if (!int.TryParse(BaseAddress.Value, NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out val)) {
val = 0x400000;
}
DllBaseAddress = "0x" + val.ToString("x", NumberFormatInfo.InvariantInfo);
if (supports32BitPreferred && string.Equals(this.PlatformTarget.Value, "AnyCPU", StringComparison.OrdinalIgnoreCase)) {
bool default32BitPreferred = false;
var upgradableProject = projectOptions.Project as IUpgradableProject;

6
src/Main/Base/Project/Src/Services/HelpProvider.cs

@ -30,15 +30,15 @@ namespace ICSharpCode.SharpDevelop @@ -30,15 +30,15 @@ namespace ICSharpCode.SharpDevelop
return AddInTree.BuildItems<HelpProvider>("/SharpDevelop/Services/HelpProvider", null, false);
}
public static void ShowHelp(IEntity c)
public static bool ShowHelp(IEntity c)
{
if (c == null)
throw new ArgumentNullException("c");
foreach (HelpProvider p in GetProviders()) {
if (p.TryShowHelp(c))
return;
return true;
}
new HelpProvider().TryShowHelp(c);
return new HelpProvider().TryShowHelp(c);
}
public virtual bool TryShowHelp(IEntity c)

13
src/Main/Base/Project/Src/Services/ParserService/CodeCompletionOptions.cs

@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.ComponentModel;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop
@ -81,5 +82,17 @@ namespace ICSharpCode.SharpDevelop @@ -81,5 +82,17 @@ namespace ICSharpCode.SharpDevelop
get { return properties.Get("InsightRefreshOnComma", true); }
set { properties.Set("InsightRefreshOnComma", value); }
}
public static TooltipLinkTarget TooltipLinkTarget {
get { return properties.Get("TooltipLinkTarget", TooltipLinkTarget.Documentation); }
set { properties.Set("TooltipLinkTarget", value); }
}
}
public enum TooltipLinkTarget {
[Description("${res:Dialog.Options.IDEOptions.CodeCompletion.TooltipLinkTargetDocumentation}")]
Documentation,
[Description("${res:Dialog.Options.IDEOptions.CodeCompletion.TooltipLinkTargetDefinition}")]
Definition
}
}

8
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/FileFilterDoozer.cs

@ -71,11 +71,11 @@ namespace ICSharpCode.Core @@ -71,11 +71,11 @@ namespace ICSharpCode.Core
{
if (string.IsNullOrEmpty(extension))
return false;
int index = this.Extensions.IndexOf("*" + extension, StringComparison.OrdinalIgnoreCase);
if (index < 0 || index + extension.Length > this.Extensions.Length)
int index = Extensions.IndexOf("*" + extension, StringComparison.OrdinalIgnoreCase);
int matchLength = index + extension.Length + 1;
if (index < 0 || matchLength > Extensions.Length)
return false;
return index + extension.Length < this.Extensions.Length
|| this.Extensions[index + extension.Length] == ';';
return matchLength == Extensions.Length || Extensions[matchLength] == ';';
}
public override string ToString()

6
src/Main/ICSharpCode.SharpDevelop.Widgets/Project/NumericUpDown.cs

@ -116,8 +116,10 @@ namespace ICSharpCode.SharpDevelop.Widgets @@ -116,8 +116,10 @@ namespace ICSharpCode.SharpDevelop.Widgets
downButton = (DragRepeatButton)Template.FindName("PART_DownButton", this);
textBox = (TextBox)Template.FindName("PART_TextBox", this);
upButton.Click += new RoutedEventHandler(upButton_Click);
downButton.Click += new RoutedEventHandler(downButton_Click);
upButton.Click += upButton_Click;
downButton.Click += downButton_Click;
textBox.LostFocus += (sender, e) => OnLostFocus(e);
var upDrag = new DragListener(upButton);
var downDrag = new DragListener(downButton);

4
src/Main/SharpDevelop/Parser/ParserServiceEntry.cs

@ -319,7 +319,9 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -319,7 +319,9 @@ namespace ICSharpCode.SharpDevelop.Parser
// Let's look up the file in the list of open files right now
// so that we don't need to SafeThreadCall() later on.
lookupOpenFileOnTargetThread = false;
fileContent = parser.GetFileContent(fileName);
if (parser != null) {
fileContent = parser.GetFileContent(fileName);
}
}
Task<ProjectEntry> task;
lock (this) {

1
src/Main/SharpDevelop/Templates/Project/ProjectDescriptor.cs

@ -306,6 +306,7 @@ namespace ICSharpCode.SharpDevelop.Templates @@ -306,6 +306,7 @@ namespace ICSharpCode.SharpDevelop.Templates
Directory.CreateDirectory(projectBasePath);
FileName projectLocation = projectBasePath.CombineFile(newProjectName + descriptor.ProjectFileExtension);
ProjectCreateInformation info = new ProjectCreateInformation(parentSolution, projectLocation);
info.TargetFramework = projectCreateOptions.TargetFramework;
StringBuilder standardNamespace = new StringBuilder();
// filter 'illegal' chars from standard namespace

Loading…
Cancel
Save