Cómo obtener acceso al IType / IDeclaredType desde un ITreeNode en ReSharper?
Estoy explorando la escritura de Plugins para ReSharper / Rider. Siguiendo la documentación, estoy creando una acción de contexto para ReSharper.
Aquí está la acción de contexto, que aún no hace mucho:
[ContextAction
(
Name = "Nueva acción de contexto",
Description = "Alguna descripción...",
Group = "C#",
Disabled = false,
Priority = 1
)]
public sealed class NuevaAccionContexto : ContextActionBase
{
public override string Text => "Nueva acción de contexto";
public NuevaAccionContexto(LanguageIndependentContextActionDataProvider dataProvider)
{
var selectedTreeNode = dataProvider.GetSelectedElement<itreenode>();
// --> ¿Cómo puedo obtener una referencia al tipo?
}
...
}
Cuando hago clic en algo en el código fuente (como un tipo como se muestra arriba), se llama al constructor de mi clase de acción de contexto. Tengo acceso al nombre con ITreeNode
, pero no sé cómo pasar de la representación del árbol a la representación real del tipo utilizado por ReSharper.
Pregunta
¿Cómo puedo obtener una referencia al tipo (IType
, IDeclaredType
,…) en el que el usuario hizo clic?
davy.ai
Para obtener una referencia al tipo que ha sido seleccionado por el usuario, puedes usar el método
Resolve
de la claseDeclaredElementFactory
de la siguiente manera:El código anterior obtiene el
ITreeNode
que ha sido seleccionado, luego obtiene elIDeclaredType
de él. SiselectedTreeNode
no es nulo y representa un tipo declarado, procedemos a obtener elITypeElement
correspondiente. Luego obtenemos elPsiModule
ySymbolScope
delITypeElement
, y los usamos para resolver el símbolo del tipo usando el nombre corto del elemento tipo. Finalmente, creamos una instancia deIType
utilizando elIDeclaredType
y elITypeSymbol
que hemos resuelto, lo cual nos da una referencia al tipo que ha sido seleccionado por el usuario.