Suponiendo que tengo un archivo de origen que tiene este aspecto:Encuentra Identificador de modelo semántico de
public class FieldReference
{
int field;
public FieldReference()
{
field = 1;
}
}
estoy usando un SyntaxRewriter para visitar todos los identificadores en este archivo. En el método VisitIdentifierName, quiero buscar el identificador en el modelo semántico, para descubrir si un identificador se refiere a un miembro de la clase actual.
Esto es lo que tengo hasta ahora:
public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node)
{
SemanticModel model = this.compilation.GetSemanticModel(this.src);
// ?? look up identifier in compilation here ??
return base.VisitIdentifierName(node);
}
Sin embargo no puedo encontrar una manera de buscar el identificador en el modelo Symantic - no haya sobrecarga del método SemanticModel.GetDeclaredSymbol que acepta un IdentifierNameSyntax .
¿Alguna idea de cómo debo hacer esto?
Gracias Kevin, no estoy seguro de cómo lo he pasado por alto. ¡Todo es muy nuevo para mí, supongo! – Grokys
hmm, esto parece estar roto en la versión actual de vista previa de Roslyn. Vea las muestras proyecto => ConvertToAutoPropertyCS => Dentro de PropertyRewriter => VisitFieldDeclaration (campo FieldDeclarationSyntax) No hay forma de obtener el símbolo para el parámetro de campo. – mynkow
Debido a que una declaración de campo puede declarar más de un símbolo, necesita usar realmente VariableDeclaratorSyntax. –