vbnetoutputvisitor.cs
来自「SharpDevelop2.0.0 c#开发免费工具」· CS 代码 · 共 2,086 行 · 第 1/5 页
CS
2,086 行
outputFormatter.Space();
} else {
outputFormatter.PrintToken(Tokens.Sub);
outputFormatter.Space();
}
outputFormatter.PrintIdentifier(delegateDeclaration.Name);
PrintTemplates(delegateDeclaration.Templates);
outputFormatter.PrintToken(Tokens.OpenParenthesis);
AppendCommaSeparatedList(delegateDeclaration.Parameters);
outputFormatter.PrintToken(Tokens.CloseParenthesis);
if (isFunction) {
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.As);
outputFormatter.Space();
nodeTracker.TrackedVisit(delegateDeclaration.ReturnType, data);
}
outputFormatter.NewLine();
return null;
}
public object Visit(OptionDeclaration optionDeclaration, object data)
{
outputFormatter.PrintToken(Tokens.Option);
outputFormatter.Space();
switch (optionDeclaration.OptionType) {
case OptionType.Strict:
outputFormatter.PrintToken(Tokens.Strict);
if (!optionDeclaration.OptionValue) {
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Off);
}
break;
case OptionType.Explicit:
outputFormatter.PrintToken(Tokens.Explicit);
outputFormatter.Space();
if (!optionDeclaration.OptionValue) {
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Off);
}
break;
case OptionType.CompareBinary:
outputFormatter.PrintToken(Tokens.Compare);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Binary);
break;
case OptionType.CompareText:
outputFormatter.PrintToken(Tokens.Compare);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Text);
break;
}
outputFormatter.NewLine();
return null;
}
#endregion
#region Type level
TypeReference currentVariableType;
public object Visit(FieldDeclaration fieldDeclaration, object data)
{
VisitAttributes(fieldDeclaration.Attributes, data);
outputFormatter.Indent();
if (fieldDeclaration.Modifier == Modifier.None) {
outputFormatter.PrintToken(Tokens.Private);
outputFormatter.Space();
} else {
OutputModifier(fieldDeclaration.Modifier);
}
currentVariableType = fieldDeclaration.TypeReference;
AppendCommaSeparatedList(fieldDeclaration.Fields);
currentVariableType = null;
outputFormatter.NewLine();
return null;
}
public object Visit(VariableDeclaration variableDeclaration, object data)
{
outputFormatter.PrintIdentifier(variableDeclaration.Name);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.As);
outputFormatter.Space();
if (variableDeclaration.TypeReference.IsNull && currentVariableType != null) {
nodeTracker.TrackedVisit(currentVariableType, data);
} else {
nodeTracker.TrackedVisit(variableDeclaration.TypeReference, data);
}
if (!variableDeclaration.Initializer.IsNull) {
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Assign);
outputFormatter.Space();
nodeTracker.TrackedVisit(variableDeclaration.Initializer, data);
}
return null;
}
public object Visit(PropertyDeclaration propertyDeclaration, object data)
{
VisitAttributes(propertyDeclaration.Attributes, data);
outputFormatter.Indent();
OutputModifier(propertyDeclaration.Modifier);
if ((propertyDeclaration.Modifier & (Modifier.ReadOnly | Modifier.WriteOnly)) == Modifier.None) {
if (propertyDeclaration.IsReadOnly) {
outputFormatter.PrintToken(Tokens.ReadOnly);
outputFormatter.Space();
} else if (propertyDeclaration.IsWriteOnly) {
outputFormatter.PrintToken(Tokens.WriteOnly);
outputFormatter.Space();
}
}
outputFormatter.PrintToken(Tokens.Property);
outputFormatter.Space();
outputFormatter.PrintIdentifier(propertyDeclaration.Name);
outputFormatter.PrintToken(Tokens.OpenParenthesis);
AppendCommaSeparatedList(propertyDeclaration.Parameters);
outputFormatter.PrintToken(Tokens.CloseParenthesis);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.As);
outputFormatter.Space();
nodeTracker.TrackedVisit(propertyDeclaration.TypeReference, data);
PrintInterfaceImplementations(propertyDeclaration.InterfaceImplementations);
outputFormatter.NewLine();
if (!IsAbstract(propertyDeclaration)) {
++outputFormatter.IndentationLevel;
exitTokenStack.Push(Tokens.Property);
nodeTracker.TrackedVisit(propertyDeclaration.GetRegion, data);
nodeTracker.TrackedVisit(propertyDeclaration.SetRegion, data);
exitTokenStack.Pop();
--outputFormatter.IndentationLevel;
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.End);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Property);
outputFormatter.NewLine();
}
return null;
}
public object Visit(PropertyGetRegion propertyGetRegion, object data)
{
VisitAttributes(propertyGetRegion.Attributes, data);
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.Get);
outputFormatter.NewLine();
++outputFormatter.IndentationLevel;
nodeTracker.TrackedVisit(propertyGetRegion.Block, data);
--outputFormatter.IndentationLevel;
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.End);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Get);
outputFormatter.NewLine();
return null;
}
public object Visit(PropertySetRegion propertySetRegion, object data)
{
VisitAttributes(propertySetRegion.Attributes, data);
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.Set);
outputFormatter.NewLine();
++outputFormatter.IndentationLevel;
nodeTracker.TrackedVisit(propertySetRegion.Block, data);
--outputFormatter.IndentationLevel;
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.End);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Set);
outputFormatter.NewLine();
return null;
}
TypeReference currentEventType = null;
public object Visit(EventDeclaration eventDeclaration, object data)
{
bool customEvent = eventDeclaration.HasAddRegion || eventDeclaration.HasRemoveRegion;
VisitAttributes(eventDeclaration.Attributes, data);
outputFormatter.Indent();
OutputModifier(eventDeclaration.Modifier);
if (customEvent) {
outputFormatter.PrintText("Custom");
outputFormatter.Space();
}
outputFormatter.PrintToken(Tokens.Event);
outputFormatter.Space();
outputFormatter.PrintIdentifier(eventDeclaration.Name);
if (eventDeclaration.Parameters.Count > 0) {
outputFormatter.PrintToken(Tokens.OpenParenthesis);
this.AppendCommaSeparatedList(eventDeclaration.Parameters);
outputFormatter.PrintToken(Tokens.CloseParenthesis);
}
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.As);
outputFormatter.Space();
nodeTracker.TrackedVisit(eventDeclaration.TypeReference, data);
PrintInterfaceImplementations(eventDeclaration.InterfaceImplementations);
outputFormatter.NewLine();
if (customEvent) {
++outputFormatter.IndentationLevel;
currentEventType = eventDeclaration.TypeReference;
exitTokenStack.Push(Tokens.Sub);
nodeTracker.TrackedVisit(eventDeclaration.AddRegion, data);
nodeTracker.TrackedVisit(eventDeclaration.RemoveRegion, data);
exitTokenStack.Pop();
--outputFormatter.IndentationLevel;
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.End);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Event);
outputFormatter.NewLine();
}
return null;
}
void PrintInterfaceImplementations(IList<InterfaceImplementation> list)
{
if (list == null || list.Count == 0)
return;
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Implements);
for (int i = 0; i < list.Count; i++) {
if (i > 0)
outputFormatter.PrintToken(Tokens.Comma);
outputFormatter.Space();
nodeTracker.TrackedVisit(list[i].InterfaceType, null);
outputFormatter.PrintToken(Tokens.Dot);
outputFormatter.PrintIdentifier(list[i].MemberName);
}
}
public object Visit(EventAddRegion eventAddRegion, object data)
{
VisitAttributes(eventAddRegion.Attributes, data);
outputFormatter.Indent();
outputFormatter.PrintText("AddHandler(");
if (eventAddRegion.Parameters.Count == 0) {
outputFormatter.PrintToken(Tokens.ByVal);
outputFormatter.Space();
outputFormatter.PrintIdentifier("value");
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.As);
outputFormatter.Space();
nodeTracker.TrackedVisit(currentEventType, data);
} else {
this.AppendCommaSeparatedList(eventAddRegion.Parameters);
}
outputFormatter.PrintToken(Tokens.CloseParenthesis);
outputFormatter.NewLine();
++outputFormatter.IndentationLevel;
nodeTracker.TrackedVisit(eventAddRegion.Block, data);
--outputFormatter.IndentationLevel;
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.End);
outputFormatter.Space();
outputFormatter.PrintText("AddHandler");
outputFormatter.NewLine();
return null;
}
public object Visit(EventRemoveRegion eventRemoveRegion, object data)
{
VisitAttributes(eventRemoveRegion.Attributes, data);
outputFormatter.Indent();
outputFormatter.PrintText("RemoveHandler");
outputFormatter.PrintToken(Tokens.OpenParenthesis);
if (eventRemoveRegion.Parameters.Count == 0) {
outputFormatter.PrintToken(Tokens.ByVal);
outputFormatter.Space();
outputFormatter.PrintIdentifier("value");
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.As);
outputFormatter.Space();
nodeTracker.TrackedVisit(currentEventType, data);
} else {
this.AppendCommaSeparatedList(eventRemoveRegion.Parameters);
}
outputFormatter.PrintToken(Tokens.CloseParenthesis);
outputFormatter.NewLine();
++outputFormatter.IndentationLevel;
nodeTracker.TrackedVisit(eventRemoveRegion.Block, data);
--outputFormatter.IndentationLevel;
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.End);
outputFormatter.Space();
outputFormatter.PrintText("RemoveHandler");
outputFormatter.NewLine();
return null;
}
public object Visit(EventRaiseRegion eventRaiseRegion, object data)
{
VisitAttributes(eventRaiseRegion.Attributes, data);
outputFormatter.Indent();
outputFormatter.PrintText("RaiseEvent");
outputFormatter.PrintToken(Tokens.OpenParenthesis);
if (eventRaiseRegion.Parameters.Count == 0) {
outputFormatter.PrintToken(Tokens.ByVal);
outputFormatter.Space();
outputFormatter.PrintIdentifier("value");
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.As);
outputFormatter.Space();
nodeTracker.TrackedVisit(currentEventType, data);
} else {
this.AppendCommaSeparatedList(eventRaiseRegion.Parameters);
}
outputFormatter.PrintToken(Tokens.CloseParenthesis);
outputFormatter.NewLine();
++outputFormatter.IndentationLevel;
nodeTracker.TrackedVisit(eventRaiseRegion.Block, data);
--outputFormatter.IndentationLevel;
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.End);
outputFormatter.Space();
outputFormatter.PrintText("RaiseEvent");
outputFormatter.NewLine();
return null;
}
public object Visit(ParameterDeclarationExpression parameterDeclarationExpression, object data)
{
VisitAttributes(parameterDeclarationExpression.Attributes, data);
OutputModifier(parameterDeclarationExpression.ParamModifier);
outputFormatter.PrintIdentifier(parameterDeclarationExpression.ParameterName);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.As);
outputFormatter.Space();
nodeTracker.TrackedVisit(parameterDeclarationExpression.TypeReference, data);
return null;
}
public object Visit(MethodDeclaration methodDeclaration, object data)
{
VisitAttributes(methodDeclaration.Attributes, data);
outputFormatter.Indent();
OutputModifier(methodDeclaration.Modifier);
bool isSub = methodDeclaration.TypeReference.IsNull ||
methodDeclaration.TypeReference.SystemType == "System.Void";
if (isSub) {
outputFormatter.PrintToken(Tokens.Sub);
} else {
outputFormatter.PrintToken(Tokens.Function);
}
outputFormatter.Space();
outputFormatter.PrintIdentifier(methodDeclaration.Name);
PrintTemplates(methodDeclaration.Templates);
outputFormatter.PrintToken(Tokens.OpenParenthesis);
AppendCommaSeparatedList(methodDeclaration.Parameters);
outputFormatter.PrintToken(Tokens.CloseParenthesis);
if (!isSub) {
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.As);
outputFormatter.Space();
nodeTracker.TrackedVisit(methodDeclaration.TypeReference, data);
}
PrintInterfaceImplementations(methodDeclaration.InterfaceImplementations);
outputFormatter.NewLine();
if (!IsAbstract(methodDeclaration)) {
++outputFormatter.IndentationLevel;
exitTokenStack.Push(isSub ? Tokens.Sub : Tokens.Function);
nodeTracker.TrackedVisit(methodDeclaration.Body, data);
exitTokenStack.Pop();
--outputFormatter.IndentationLevel;
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.End);
outputFormatter.Space();
if (isSub) {
outputFormatter.PrintToken(Tokens.Sub);
} else {
outputFormatter.PrintToken(Tokens.Function);
}
outputFormatter.NewLine();
}
return null;
}
public object Visit(InterfaceImplementation interfaceImplementation, object data)
{
throw new InvalidOperationException();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?