Browse Source

Added SymbolTypeAtCaretConditionEvaluator.

pull/59/merge
Andreas Weizel 12 years ago
parent
commit
bde6f8134a
  1. 4
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
  2. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  3. 66
      src/Main/Base/Project/Src/Internal/ConditionEvaluators/SymbolTypeAtCaretConditionEvaluator.cs

4
src/Main/Base/Project/ICSharpCode.SharpDevelop.addin

@ -33,6 +33,7 @@ @@ -33,6 +33,7 @@
<ConditionEvaluator name="IsTextSelected" class="ICSharpCode.SharpDevelop.Editor.TextSelectedCondition"/>
<ConditionEvaluator name="ViewInBrowser" class="ICSharpCode.SharpDevelop.ViewInBrowserConditionEvaluator"/>
<ConditionEvaluator name="ProjectBehaviorSupported" class="ICSharpCode.SharpDevelop.Project.ProjectBehaviorSupportedConditionEvaluator"/>
<ConditionEvaluator name="SymbolTypeAtCaret" class="ICSharpCode.SharpDevelop.Internal.ConditionEvaluators.SymbolTypeAtCaretConditionEvaluator"/>
<Doozer name="CustomTool" class="ICSharpCode.SharpDevelop.Project.CustomToolDoozer"/>
<Doozer name="CustomProperty" class="ICSharpCode.SharpDevelop.Project.CustomPropertyDoozer"/>
@ -2046,6 +2047,9 @@ @@ -2046,6 +2047,9 @@
<MenuItem id = "Separator2" type = "Separator" />
-->
<Condition name="SymbolTypeAtCaret" type="local,member" action="Exclude">
<MenuItem id = "Separator2" type = "Separator" />
</Condition>
<MenuItem id = "Comment"
icon = "Icons.16x16.CommentRegion"
label = "${res:XML.TextAreaContextMenu.CommentUncommentSelection}"

1
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -272,6 +272,7 @@ @@ -272,6 +272,7 @@
<Compile Include="Src\Gui\Pads\TaskList\TaskViewResources.xaml.cs">
<DependentUpon>TaskViewResources.xaml</DependentUpon>
</Compile>
<Compile Include="Src\Internal\ConditionEvaluators\SymbolTypeAtCaretConditionEvaluator.cs" />
<Compile Include="Src\Internal\Templates\StringParserPropertyContainer.cs" />
<Compile Include="Src\Project\MSBuildConfigurationOrPlatformNameCollection.cs" />
<Compile Include="Templates\FileTemplate.cs" />

66
src/Main/Base/Project/Src/Internal/ConditionEvaluators/SymbolTypeAtCaretConditionEvaluator.cs

@ -0,0 +1,66 @@ @@ -0,0 +1,66 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.SharpDevelop.Internal.ConditionEvaluators
{
/// <summary>
/// Condition evaluator checking the type of the symbol under the caret (if there is one).
/// </summary>
public class SymbolTypeAtCaretConditionEvaluator : IConditionEvaluator
{
public bool IsValid(object parameter, Condition condition)
{
ResolveResult resolveResult = GetResolveResult();
if ((resolveResult != null) && !resolveResult.IsError) {
// Check type of symbol
string typesList = condition.Properties["type"];
if (typesList != null) {
foreach (string type in typesList.Split(',')) {
switch (type) {
case "*":
// Wildcard -> allow any type
return true;
case "member":
// Allow members
if (resolveResult is MemberResolveResult)
return true;
break;
case "type":
// Allow types
if (resolveResult is TypeResolveResult)
return true;
break;
case "namespace":
// Allow namespaces
if (resolveResult is NamespaceResolveResult)
return true;
break;
case "local":
// Allow locals
if (resolveResult is LocalResolveResult)
return true;
break;
}
}
}
}
return false;
}
static ResolveResult GetResolveResult()
{
ITextEditor currentEditor = SD.GetActiveViewContentService<ITextEditor>();
if (currentEditor != null) {
return SD.ParserService.Resolve(currentEditor, currentEditor.Caret.Location);
} else {
return ErrorResolveResult.UnknownError;
}
}
}
}
Loading…
Cancel
Save