Beispiel #1
0
        public IDeclaredElement GetPrimaryDeclaredElement(IDeclaredElement declaredElement, IReference reference)
        {
            IDeclaredElement derivedElement = null;

            var method = declaredElement as IMethod;

            if (method != null)
            {
                derivedElement = DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForMethod(method);
            }


            var @class = declaredElement as IClass;

            if (@class != null)
            {
                derivedElement = DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForClass(@class);
            }

            var @interface = declaredElement as IInterface;

            if (@interface != null)
            {
                derivedElement = DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForInterface(@interface);
            }

            if (derivedElement != null)
            {
                return(derivedElement);
            }
            return(declaredElement);
        }
        public CSharpToPsiSearchRequest(IDeclaredElement declaredElement)
        {
            if (declaredElement == null)
            {
                throw new ArgumentNullException("declaredElement");
            }
            Logger.Assert(declaredElement.IsValid(), "declaredElement should be valid");

            mySolution = declaredElement.GetPsiServices().Solution;


            var @class = declaredElement as IClass;

            if (@class != null)
            {
                myTarget = new DeclaredElementEnvoy <IDeclaredElement>(DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForClass(@class));
            }

            var @method = declaredElement as IMethod;

            if (@method != null)
            {
                myTarget = new DeclaredElementEnvoy <IDeclaredElement>(DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForMethod(@method));
            }

            var @interface = declaredElement as IInterface;

            if (@interface != null)
            {
                myTarget = new DeclaredElementEnvoy <IDeclaredElement>(DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForInterface(@interface));
            }

            var @constructor = declaredElement as IConstructor;

            if (@constructor != null)
            {
                @class = @constructor.GetContainingType() as IClass;

                if (@class != null)
                {
                    myTarget = new DeclaredElementEnvoy <IDeclaredElement>(DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForClass(@class));
                }
            }
        }
        public override bool IsAvailable(IDataContext dataContext)
        {
            var       textControl = dataContext.GetData(TextControl.DataContext.DataConstants.TEXT_CONTROL);
            ISolution solution    = dataContext.GetData(ProjectModel.DataContext.DataConstants.SOLUTION);
            var       token       = TextControlToPsi.GetSourceTokenAtCaret(solution, textControl);

            var referenceName = token.Parent as IReferenceName;

            if (referenceName != null)
            {
                if (referenceName.Reference.CurrentResolveResult != null)
                {
                    var declaredElement = referenceName.Reference.CurrentResolveResult.DeclaredElement;

                    var @class = declaredElement as IClass;
                    if (@class != null)
                    {
                        return(DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForClass(@class) != null);
                    }

                    var @method = declaredElement as  IMethod;
                    if (@method != null)
                    {
                        return(DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForMethod(@method) != null);
                    }

                    var @interface = declaredElement as IInterface;
                    if (@interface != null)
                    {
                        return(DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForInterface(@interface) != null);
                    }
                }
                return(false);
            }

            var classDeclaration = token.Parent as IClassDeclaration;

            if (classDeclaration != null)
            {
                var @class = classDeclaration.DeclaredElement as IClass;

                return((@class != null) && (DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForClass(@class) != null));
            }

            var methodDeclaration = token.Parent as IMethodDeclaration;

            if (methodDeclaration != null)
            {
                var @method = methodDeclaration.DeclaredElement;

                return((@method != null) && (DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForMethod(@method) != null));
            }

            var interfaceDeclaration = token.Parent as IInterfaceDeclaration;

            if (interfaceDeclaration != null)
            {
                var @interface = interfaceDeclaration.DeclaredElement as IInterface;

                return((@interface != null) && (DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForInterface(@interface) != null));
            }

            var constructorDeclaration = token.Parent as IConstructorDeclaration;

            if (constructorDeclaration != null)
            {
                var @class = constructorDeclaration.GetContainingTypeDeclaration().DeclaredElement as IClass;

                return((@class != null) && (DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForClass(@class) != null));
            }

            return(false);
        }