protected override Action<ITextControl> ExecutePsiTransaction(ISolution solution, IProgressIndicator progress)
{
var memberReference = mHighlighting.ReferenceExpression.GetConditionalMemberReference();
if (memberReference == null)
return null;
var resolve = memberReference.Resolve();
if (resolve.ResolveErrorType != ResolveErrorType.OK)
return null;
if (resolve.DeclaredElement == null)
return null;
var declarations = resolve.DeclaredElement.GetDeclarations<IPropertyDeclaration>();
if (declarations.Count != 1)
return null;
var userControl = new PropertyNameWindow();
var result = userControl.ShowDialog();
if (!result.HasValue || !result.Value)
return null;
var propDeclaration = declarations[0];
propDeclaration.NavigateToNode(true);
var t = CSharpTypeFactory.CreateType("GreenGate.Entity.Models.BaseEntity", mHighlighting.ReferenceExpression.GetPsiModule());
var vFactory = CSharpElementFactory.GetInstance(mHighlighting.ReferenceExpression.GetPsiModule());
var navigationPropertyDeclaration = vFactory.CreatePropertyDeclaration(t, userControl.PropertyName.Text);
navigationPropertyDeclaration.SetAccessRights(AccessRights.PUBLIC);
navigationPropertyDeclaration.SetVirtual(true);
var getDec = vFactory.CreateAccessorDeclaration(AccessorKind.GETTER, false);
var setDec = vFactory.CreateAccessorDeclaration(AccessorKind.SETTER, false);
navigationPropertyDeclaration.AddAccessorDeclarationAfter(setDec, null);
navigationPropertyDeclaration.AddAccessorDeclarationAfter(getDec, null);
ModificationUtil.AddChildAfter(propDeclaration, navigationPropertyDeclaration);
ModificationUtil.AddChildAfter(mHighlighting.StatementNode, mappingExpression);
return null;
}