AST: avoid multivalued results for MethodName::getValueText

This commit is contained in:
Arthur Baars
2021-02-12 19:45:52 +01:00
parent 8a4f27c052
commit 9cb58be5cf
6 changed files with 56 additions and 47 deletions

View File

@@ -110,6 +110,12 @@ class StringLiteral extends Literal, @string__ {
class SymbolLiteral extends Literal {
final override SymbolLiteral::Range range;
SymbolLiteral() {
not any(UndefStmt u).getAMethodName() = this and
not any(AliasStmt a).getNewName() = this and
not any(AliasStmt a).getOldName() = this
}
final override string getAPrimaryQlClass() { result = "SymbolLiteral" }
}

View File

@@ -173,27 +173,33 @@ module SymbolLiteral {
}
module MethodName {
class Range extends Literal::Range, @underscore_method_name {
final override Generated::UnderscoreMethodName generated;
private class TokenTypes =
@setter or @token_class_variable or @token_constant or @token_global_variable or
@token_identifier or @token_instance_variable or @token_operator;
abstract class Range extends Literal::Range, @underscore_method_name {
Range() {
exists(Generated::Undef u | u.getChild(_) = generated)
or
exists(Generated::Alias a | a.getName() = generated or a.getAlias() = generated)
}
}
private class TokenMethodName extends MethodName::Range, TokenTypes {
final override Generated::UnderscoreMethodName generated;
final override string getValueText() {
result = generated.(Generated::Token).getValue() or
result = generated.(SymbolLiteral).getValueText() or
result = generated.(Generated::Token).getValue()
or
result = generated.(Generated::Setter).getName().getValue() + "="
}
final override string toString() {
result = getValueText()
or
not exists(getValueText()) and result = generated.(SymbolLiteral).toString()
}
}
private class SimpleSymbolMethodName extends MethodName::Range, SymbolLiteral::SimpleSymbolRange,
@token_simple_symbol { }
private class DelimitedSymbolMethodName extends MethodName::Range,
SymbolLiteral::DelimitedSymbolRange, @delimited_symbol { }
}
module StmtSequence {

View File

@@ -39,9 +39,9 @@ module AliasStmt {
class Range extends Stmt::Range, @alias {
final override Generated::Alias generated;
final MethodName getNewName() { result = generated.getAlias() }
final MethodName getNewName() { result = generated.getName() }
final MethodName getOldName() { result = generated.getName() }
final MethodName getOldName() { result = generated.getAlias() }
final override string toString() { result = "alias ..." }
}