mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-15 08:18:55 +00:00
added short string function to debug utils
This commit is contained in:
parent
967f491402
commit
5f136cf262
2 changed files with 77 additions and 25 deletions
|
@ -49,6 +49,7 @@ import org.eclipse.xtext.xtext.generator.parser.antlr.hoisting.guards.TokenGuard
|
|||
import org.eclipse.xtext.xtext.generator.parser.antlr.hoisting.guards.TokenSequenceGuard;
|
||||
import org.eclipse.xtext.xtext.generator.parser.antlr.hoisting.pathAnalysis.TokenAnalysis;
|
||||
import org.eclipse.xtext.xtext.generator.parser.antlr.hoisting.token.Token;
|
||||
import static org.eclipse.xtext.xtext.generator.parser.antlr.hoisting.utils.DebugUtils.*;
|
||||
import org.eclipse.xtext.xtext.generator.parser.antlr.hoisting.utils.StreamUtils;
|
||||
|
||||
/**
|
||||
|
@ -304,6 +305,7 @@ public class HoistingProcessor {
|
|||
}
|
||||
|
||||
public HoistingGuard findHoistingGuard(AbstractElement element) {
|
||||
log.info("hoisting guard of: \n" + abstractElementToString(element));
|
||||
return findGuardForElement(element, containingParserRule(element));
|
||||
}
|
||||
|
||||
|
@ -332,7 +334,7 @@ public class HoistingProcessor {
|
|||
}
|
||||
|
||||
private HoistingGuard findGuardForElementWithTrivialCardinality(AbstractElement element, AbstractRule currentRule) {
|
||||
log.info("finding guard for element: " + element.toString());
|
||||
log.info(currentRule.getName() + ": " + abstractElementToShortString(element));
|
||||
|
||||
if (element instanceof Alternatives) {
|
||||
return findGuardForAlternatives((Alternatives) element, currentRule);
|
||||
|
|
|
@ -37,21 +37,16 @@ public class DebugUtils {
|
|||
private static void abstractElementToString(AbstractElement element, StringBuilder builder, int indentation, List<String> calledRules) {
|
||||
String indentationString = Strings.repeat(" ", indentation);
|
||||
|
||||
builder.append(indentationString);
|
||||
|
||||
if (element == null) {
|
||||
builder.append(indentationString).append("null");
|
||||
builder.append("null");
|
||||
return;
|
||||
}
|
||||
|
||||
new XtextSwitch<Boolean>(){
|
||||
@Override
|
||||
public Boolean caseKeyword(Keyword object) {
|
||||
builder.append(indentationString);
|
||||
builder.append("Keyword (").append(object.getValue()).append(")");
|
||||
return true;
|
||||
};
|
||||
@Override
|
||||
public Boolean caseGroup(Group object) {
|
||||
builder.append(indentationString);
|
||||
builder.append("Group (\n");
|
||||
object.getElements().forEach(e -> {
|
||||
abstractElementToString(e, builder, indentation + 1, calledRules);
|
||||
|
@ -62,7 +57,6 @@ public class DebugUtils {
|
|||
};
|
||||
@Override
|
||||
public Boolean caseAlternatives(Alternatives object) {
|
||||
builder.append(indentationString);
|
||||
builder.append("Alternatives (\n");
|
||||
object.getElements().forEach(e -> {
|
||||
abstractElementToString(e, builder, indentation + 1, calledRules);
|
||||
|
@ -74,9 +68,8 @@ public class DebugUtils {
|
|||
@Override
|
||||
public Boolean caseRuleCall(RuleCall object) {
|
||||
AbstractRule rule = object.getRule();
|
||||
if (rule instanceof ParserRule) {
|
||||
builder.append(indentationString);
|
||||
builder.append("ParserRule ").append(rule.getName()).append(" (\n");
|
||||
if (rule instanceof ParserRule) {
|
||||
builder.append("ParserRule (").append(rule.getName()).append(", \n");
|
||||
if (calledRules.contains(rule.getName())) {
|
||||
builder.append(indentationString).append(" [recursive]\n");
|
||||
} else {
|
||||
|
@ -87,35 +80,93 @@ public class DebugUtils {
|
|||
builder.append(indentationString);
|
||||
builder.append(")");
|
||||
} else {
|
||||
builder.append(indentationString);
|
||||
builder.append(rule.eClass().getName()).append(" ").append(rule.getName());
|
||||
builder.append(rule.eClass().getName()).append(" (").append(rule.getName()).append(")");
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
@Override
|
||||
public Boolean caseAssignment(Assignment object) {
|
||||
builder.append("Assignment (");
|
||||
builder.append(object.getFeature());
|
||||
builder.append(",\n");
|
||||
abstractElementToString(object.getTerminal(), builder, indentation + 1, calledRules);
|
||||
builder.append(indentationString);
|
||||
builder.append(")");
|
||||
return true;
|
||||
};
|
||||
|
||||
@Override
|
||||
public Boolean defaultCase(EObject object) {
|
||||
abstractElementToShortString((AbstractElement) object, builder);
|
||||
return false;
|
||||
};
|
||||
}.doSwitch(element);
|
||||
|
||||
builder.append("\n");
|
||||
}
|
||||
|
||||
public static String abstractElementToString(AbstractElement element) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
abstractElementToString(element, builder, 0, Arrays.asList(GrammarUtil.containingRule(element).getName()));
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
private static void abstractElementToShortString(AbstractElement element, StringBuilder builder) {
|
||||
if (element == null) {
|
||||
builder.append("null");
|
||||
return;
|
||||
}
|
||||
|
||||
new XtextSwitch<Boolean>(){
|
||||
@Override
|
||||
public Boolean caseKeyword(Keyword object) {
|
||||
builder.append("Keyword (").append(object.getValue()).append(")");
|
||||
return true;
|
||||
};
|
||||
@Override
|
||||
public Boolean caseGroup(Group object) {
|
||||
builder.append("Group (");
|
||||
builder.append(object.getElements().size());
|
||||
builder.append(")");
|
||||
return true;
|
||||
};
|
||||
@Override
|
||||
public Boolean caseAlternatives(Alternatives object) {
|
||||
builder.append("Alternatives (");
|
||||
builder.append(object.getElements().size());
|
||||
builder.append(")");
|
||||
return true;
|
||||
};
|
||||
@Override
|
||||
public Boolean caseRuleCall(RuleCall object) {
|
||||
AbstractRule rule = object.getRule();
|
||||
if (rule instanceof ParserRule) {
|
||||
builder.append("ParserRule (").append(rule.getName()).append(")");
|
||||
} else {
|
||||
builder.append(rule.eClass().getName()).append(" (").append(rule.getName()).append(")");
|
||||
}
|
||||
return true;
|
||||
};
|
||||
@Override
|
||||
public Boolean caseJavaAction(JavaAction object) {
|
||||
builder.append(indentationString);
|
||||
builder.append("JavaAction (").append(object.getCode().getSource()).append(")");
|
||||
return true;
|
||||
};
|
||||
@Override
|
||||
public Boolean caseGatedSemanticPredicate(GatedSemanticPredicate object) {
|
||||
builder.append(indentationString);
|
||||
builder.append("GatedSemanticPredicate (").append(object.getCode().getSource()).append(")");
|
||||
return true;
|
||||
};
|
||||
@Override
|
||||
public Boolean caseDisambiguatingSemanticPredicate(DisambiguatingSemanticPredicate object) {
|
||||
builder.append(indentationString);
|
||||
builder.append("DisambiguatingSemanticPredicate (").append(object.getCode().getSource()).append(")");
|
||||
return true;
|
||||
};
|
||||
@Override
|
||||
public Boolean caseAssignment(Assignment object) {
|
||||
builder.append(indentationString);
|
||||
builder.append("Assignment (\n");
|
||||
abstractElementToString(object.getTerminal(), builder, indentation + 1, calledRules);
|
||||
builder.append(indentationString);
|
||||
builder.append("Assignment (");
|
||||
builder.append(object.getFeature());
|
||||
builder.append(")");
|
||||
return true;
|
||||
};
|
||||
|
@ -127,12 +178,11 @@ public class DebugUtils {
|
|||
}.doSwitch(element);
|
||||
|
||||
builder.append(Objects.toString(element.getCardinality(), ""));
|
||||
builder.append("\n");
|
||||
}
|
||||
|
||||
public static String abstractElementToString(AbstractElement element) {
|
||||
public static String abstractElementToShortString(AbstractElement element) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
abstractElementToString(element, builder, 0, Arrays.asList(GrammarUtil.containingRule(element).getName()));
|
||||
abstractElementToShortString(element, builder);
|
||||
return builder.toString();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue