📄 vbnetoutputvisitor.cs
字号:
outputFormatter.Space();
bool isFunction = (delegateDeclaration.ReturnType.Type != "void");
if (isFunction) {
outputFormatter.PrintToken(Tokens.Function);
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 VisitOptionDeclaration(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 VisitFieldDeclaration(FieldDeclaration fieldDeclaration, object data)
{
VisitAttributes(fieldDeclaration.Attributes, data);
outputFormatter.Indent();
if (fieldDeclaration.Modifier == Modifiers.None) {
outputFormatter.PrintToken(Tokens.Private);
outputFormatter.Space();
} else if (fieldDeclaration.Modifier == Modifiers.Dim) {
outputFormatter.PrintToken(Tokens.Dim);
outputFormatter.Space();
} else {
OutputModifier(fieldDeclaration.Modifier);
}
currentVariableType = fieldDeclaration.TypeReference;
AppendCommaSeparatedList(fieldDeclaration.Fields);
currentVariableType = null;
outputFormatter.NewLine();
return null;
}
public object VisitVariableDeclaration(VariableDeclaration variableDeclaration, object data)
{
outputFormatter.PrintIdentifier(variableDeclaration.Name);
TypeReference varType = currentVariableType;
if (varType != null && varType.IsNull)
varType = null;
if (varType == null && !variableDeclaration.TypeReference.IsNull)
varType = variableDeclaration.TypeReference;
if (varType != null) {
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.As);
outputFormatter.Space();
ObjectCreateExpression init = variableDeclaration.Initializer as ObjectCreateExpression;
if (init != null && TypeReference.AreEqualReferences(init.CreateType, varType)) {
nodeTracker.TrackedVisit(variableDeclaration.Initializer, data);
return null;
} else {
nodeTracker.TrackedVisit(varType, data);
}
}
if (!variableDeclaration.Initializer.IsNull) {
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Assign);
outputFormatter.Space();
nodeTracker.TrackedVisit(variableDeclaration.Initializer, data);
}
return null;
}
public object VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration, object data)
{
VisitAttributes(propertyDeclaration.Attributes, data);
outputFormatter.Indent();
OutputModifier(propertyDeclaration.Modifier);
if ((propertyDeclaration.Modifier & (Modifiers.ReadOnly | Modifiers.WriteOnly)) == Modifiers.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 VisitPropertyGetRegion(PropertyGetRegion propertyGetRegion, object data)
{
VisitAttributes(propertyGetRegion.Attributes, data);
outputFormatter.Indent();
OutputModifier(propertyGetRegion.Modifier);
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 VisitPropertySetRegion(PropertySetRegion propertySetRegion, object data)
{
VisitAttributes(propertySetRegion.Attributes, data);
outputFormatter.Indent();
OutputModifier(propertySetRegion.Modifier);
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 VisitEventDeclaration(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);
if (!eventDeclaration.Initializer.IsNull) {
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Assign);
outputFormatter.Space();
nodeTracker.TrackedVisit(eventDeclaration.Initializer, data);
}
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 VisitEventAddRegion(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 VisitEventRemoveRegion(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 VisitEventRaiseRegion(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 VisitParameterDeclarationExpression(ParameterDeclarationExpression parameterDeclarationExpression, object data)
{
VisitAttributes(parameterDeclarationExpression.Attributes, data);
OutputModifier(parameterDeclarationExpression.ParamModifier, parameterDeclarationExpression.StartLocation);
outputFormatter.PrintIdentifier(parameterDeclarationExpression.ParameterName);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.As);
outputFormatter.Space();
nodeTracker.TrackedVisit(parameterDeclarationExpression.TypeReference, data);
return null;
}
public object VisitMethodDeclaration(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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -