Example #1
0
        public void MakeCallShared(IReference reference)
        {
            var referenceExpression1 = reference.GetTreeNode() as IReferenceExpression;

            if (referenceExpression1 == null || !reference.Resolve().Result.IsExtensionMethod())
            {
                return;
            }

            var byExpression = IndexExpressionNavigator.GetByExpression(referenceExpression1);

            if (byExpression == null)
            {
                return;
            }

            var substitution         = reference.Resolve().Result.Substitution;
            var referenceExpression2 = byExpression.Expression as IReferenceExpression;

            if (referenceExpression2 == null)
            {
                return;
            }

            var instance     = VBElementFactory.GetInstance(referenceExpression1.GetPsiModule());
            var vbExpression = referenceExpression2.QualifierExpression ?? instance.CreateExpression("me", new object[0]);

            byExpression.AddArgumentAfter(instance.CreateArgument(vbExpression), null);
            //byExpression.SetExpression(instance.CreateReferenceExpression(this.Executer.Method.ShortName, new object[0]));
            //((IReferenceExpression)byExpression.Expression).Reference.BindTo((IDeclaredElement)this.Executer.Method);
            //if (((IReferenceExpression)byExpression.Expression).Reference.BindTo((IDeclaredElement)this.Workflow.Method, substitution).CheckResolveResult() == ResolveErrorType.OK) return;

            //this.Driver.AddConflict((IConflict)ReferenceConflict.CreateError(reference, "{0} can not be transformed correctly"));
        }
Example #2
0
        private static bool IsStringConcatOperatorReference([CanBeNull] IReference reference)
        {
            if (reference == null)
            {
                return(false);
            }

            var @operator = reference.Resolve().DeclaredElement as IOperator;

            if (@operator == null || [email protected])
            {
                return(false);
            }

            var parameters = @operator.Parameters;

            if (parameters.Count != 2)
            {
                return(false);
            }

            IType lhsType = parameters[0].Type, rhsType = parameters[1].Type;

            if (lhsType.IsString())
            {
                return(rhsType.IsString() || rhsType.IsObject());
            }
            if (rhsType.IsString())
            {
                return(lhsType.IsString() || lhsType.IsObject());
            }

            return(false);
        }
        public static T GetResolved <T> (this IReference reference)
            where T : IDeclaredElement
        {
            var resolveResult = reference.Resolve();

            return(resolveResult.DeclaredElement is T ? (T)resolveResult.DeclaredElement : default(T));
        }
Example #4
0
 public ResolveResultWithInfo Resolve()
 {
     if (!myInitReference)
     {
         myReference     = new PsiVariableReference(this);
         myInitReference = true;
     }
     return(myReference.Resolve());
 }
Example #5
0
        public static ResolveResultWithInfo GetResolveResult(this IReference reference)
        {
            if (reference.CurrentResolveResult != null)
            {
                return(reference.CurrentResolveResult);
            }

            return(reference.Resolve());
        }
Example #6
0
        private static DeclaredElementInstance TryResolveReference([CanBeNull] IReference reference)
        {
            IResolveResult resolveResult = reference?.Resolve().Result;

            if (resolveResult?.DeclaredElement != null)
            {
                return(new DeclaredElementInstance(resolveResult.DeclaredElement, resolveResult.Substitution));
            }
            return(null);
        }
        public override MethodInvocation ProcessUsage(IReference reference)
        {
            var referenceExpression = reference.GetTreeNode() as IReferenceExpression;

            if (referenceExpression == null)
            {
                Driver.AddConflict(ReferenceConflict.CreateError(reference, "{0} can not be updated correctly.", "Usage"));
                return(null);
            }

            bool isExtensionMethod           = referenceExpression.IsExtensionMethod();
            IInvocationExpression invocation = InvocationExpressionNavigator.GetByInvokedExpression(referenceExpression);

            if (invocation == null)
            {
                Driver.AddConflict(ReferenceConflict.CreateError(reference, "{0} can not be updated correctly.", "Usage"));
                return(null);
            }

            ITreeNode element = GetArgument(invocation, isExtensionMethod);

            var   argument = element as ICSharpArgument;
            IType type     = argument != null?GetTypeOfValue(argument.Value) : GetTypeOfValue(element);

            if (type == null || !type.CanUseExplicitly(invocation))
            {
                Driver.AddConflict(ReferenceConflict.CreateError(
                                       reference, "Argument of {0} is not valid 'typeof' expression.", "usage"));
                return(null);
            }

            // we can rely on resolve result since method declaration is not yet changed.
            ResolveResultWithInfo resolveResult = reference.Resolve();
            ISubstitution         substitution  = resolveResult.Result.Substitution;
            var method = resolveResult.DeclaredElement as IMethod;

            if (method == null)
            {
                return(null);
            }

            if (argument != null)
            {
                invocation.RemoveArgument(argument);
                return(new MethodInvocation(reference, type, method, substitution));
            }

            CSharpElementFactory factory = CSharpElementFactory.GetInstance(invocation.GetPsiModule());
            IReferenceExpression newInvokedExpression =
                invocation.InvokedExpression.ReplaceBy(factory.CreateReferenceExpression("$0", Executer.Method));

            return(new MethodInvocation(newInvokedExpression.Reference, type, method, substitution));
        }
        public void MakeCallShared(IReference reference)
        {
            var referenceExpression1 = reference.GetTreeNode() as IReferenceExpression;
            if (referenceExpression1 == null || !reference.Resolve().Result.IsExtensionMethod()) return;

            var byExpression = IndexExpressionNavigator.GetByExpression(referenceExpression1);
            if (byExpression == null) return;

            var substitution = reference.Resolve().Result.Substitution;
            var referenceExpression2 = byExpression.Expression as IReferenceExpression;
            if (referenceExpression2 == null) return;

            var instance = VBElementFactory.GetInstance(referenceExpression1.GetPsiModule());
            var vbExpression = referenceExpression2.QualifierExpression ?? instance.CreateExpression("me", new object[0]);
            byExpression.AddArgumentAfter(instance.CreateArgument(vbExpression), null);
            //byExpression.SetExpression(instance.CreateReferenceExpression(this.Executer.Method.ShortName, new object[0]));
            //((IReferenceExpression)byExpression.Expression).Reference.BindTo((IDeclaredElement)this.Executer.Method);
            //if (((IReferenceExpression)byExpression.Expression).Reference.BindTo((IDeclaredElement)this.Workflow.Method, substitution).CheckResolveResult() == ResolveErrorType.OK) return;

            //this.Driver.AddConflict((IConflict)ReferenceConflict.CreateError(reference, "{0} can not be transformed correctly"));
        }
Example #9
0
        private static IDeclaredType GetCSharpPropertyScalarType(IReference reference)
        {
            var info = reference.Resolve();

            if (info.DeclaredElement.IsCSharpProperty() == false)
            {
                return(null);
            }
            var property = info.DeclaredElement as IProperty;

            return(property?.ReturnType.GetScalarType());
        }
    public override MethodInvocation ProcessUsage(IReference reference)
    {
      var referenceExpression = reference.GetTreeNode() as IReferenceExpression;
      if (referenceExpression == null)
      {
        Driver.AddConflict(ReferenceConflict.CreateError(reference, "{0} can not be updated correctly.", "Usage"));
        return null;
      }

      bool isExtensionMethod = referenceExpression.IsExtensionMethod();
      IInvocationExpression invocation = InvocationExpressionNavigator.GetByInvokedExpression(referenceExpression);
      if (invocation == null)
      {
        Driver.AddConflict(ReferenceConflict.CreateError(reference, "{0} can not be updated correctly.", "Usage"));
        return null;
      }

      ITreeNode element = GetArgument(invocation, isExtensionMethod);

      var argument = element as ICSharpArgument;
      IType type = argument != null ? GetTypeOfValue(argument.Value) : GetTypeOfValue(element);
      if (type == null || !type.CanUseExplicitly(invocation))
      {
        Driver.AddConflict(ReferenceConflict.CreateError(
          reference, "Arguemnt of {0} is not valid 'typeof' expression.", "usage"));
        return null;
      }

      // we can rely on resolve result since method declaration is not yet changed. 
      ResolveResultWithInfo resolveResult = reference.Resolve();
      ISubstitution substitution = resolveResult.Result.Substitution;
      var method = resolveResult.DeclaredElement as IMethod;
      if (method == null)
        return null;

      if (argument != null)
      {
        invocation.RemoveArgument(argument);
        return new MethodInvocation(reference, type, method, substitution);
      }

      CSharpElementFactory factory = CSharpElementFactory.GetInstance(invocation.GetPsiModule());
      IReferenceExpression newInvokedExpression =
        invocation.InvokedExpression.ReplaceBy(factory.CreateReferenceExpression("$0", Executer.Method));
      return new MethodInvocation(newInvokedExpression.Reference, type, method, substitution);
    }
Example #11
0
        public static void AppendCandidates([NotNull] this CSharpColorizer colorizer, [CanBeNull] IReference reference)
        {
            if (reference == null)
            {
                return;
            }

            IResolveResult           resolveResult = reference.Resolve().Result;
            IList <IDeclaredElement> candidates    = resolveResult.Candidates;
            IList <ISubstitution>    substitutions = resolveResult.CandidateSubstitutions;

            for (int i = 0; i < candidates.Count; ++i)
            {
                colorizer.AppendPlainText(Environment.NewLine);
                colorizer.AppendPlainText("  ");
                colorizer.AppendDeclaredElement(candidates[i].EliminateDelegateInvokeMethod(), substitutions[i], PresenterOptions.FullWithoutParameterNames, reference.GetTreeNode());
            }
        }
Example #12
0
        protected virtual void HighlightReference(IElement element, IReference reference)
        {
            if (reference.ReferenceType == ReferenceType.TEXT
                || reference.ReferenceType == ReferenceType.REFERENCE_NAME
                || reference.ReferenceType == ReferenceType.LABEL)
            {
                ResolveResult resolveResult = reference.Resolve();

            //                TODO resolveResult.DeclaredElement == null property@name !!!

                if (resolveResult.DeclaredElement != null)
                {
                    DocumentRange range = reference.GetDocumentRange();
                    DocumentRange footerRange = XMLPSIUtils.GetFooterTagRange(element, range);
                    Highlight(range, resolveResult.DeclaredElement);
                    if (footerRange != DocumentRange.InvalidRange)
                        Highlight(footerRange, resolveResult.DeclaredElement);
                }
            }
        }
Example #13
0
        private static IType TryGetClosedReturnTypeFromReference(IReference reference)
        {
            var resolveResultWithInfo = GetResolveResult(reference);

            if (reference.CurrentResolveResult == null)
            {
                reference.Resolve();
            }

            var declaredElement = resolveResultWithInfo.DeclaredElement;
            var parametersOwner = declaredElement as IParametersOwner;

            if (parametersOwner != null)
            {
                var returnType = parametersOwner.ReturnType;
                return(returnType.IsOpenType ? GetClosedType(resolveResultWithInfo, returnType) : returnType);
            }

            return(null);
        }
        public IHighlighting Run(IReference reference)
        {
            var resolveResult = reference.Resolve();

            if (resolveResult.Result.Candidates.Count > 1)
            {
                var candidates = resolveResult.Result.Candidates;
                var result     = new List <string>();
                foreach (var candidate in candidates)
                {
                    result.Add(Environment.NewLine + "  " + DeclaredElementPresenter.Format(ShaderLabLanguage.Instance,
                                                                                            ShaderLabDeclaredElementPresenterStyles.CANDIDATE_PRESENTER, candidate));
                }
                result.Sort();
                var message = result.AggregateString("");
                var range   = reference.GetDocumentRange();
                return(new MultipleResolveCandidatesError(range, message, reference));
            }

            return(null);
        }
Example #15
0
        public static void AppendCandidates([NotNull] this CSharpColorizer colorizer, [CanBeNull] IReference reference)
        {
            if (reference == null)
            {
                return;
            }

            IResolveResult resolveResult       = reference.Resolve().Result;
            var            liftedResolveResult = resolveResult as LiftedResolveResult;

            // ReSharper disable once CoVariantArrayConversion
            IList <IDeclaredElement> candidates = liftedResolveResult != null ? liftedResolveResult.LiftedCandidates : resolveResult.Candidates;

            IList <ISubstitution> substitutions = resolveResult.CandidateSubstitutions;

            for (int i = 0; i < candidates.Count; ++i)
            {
                colorizer.AppendPlainText(Environment.NewLine);
                colorizer.AppendPlainText("  ");
                colorizer.AppendDeclaredElement(candidates[i].EliminateDelegateInvokeMethod(), substitutions[i], PresenterOptions.FullWithoutParameterNames);
            }
        }
 protected virtual IResolveResult Resolve(IReference reference)
 {
     return(reference.Resolve().Result);
 }
Example #17
0
 public static ResolveResultWithInfo GetResolveResult(this IReference reference)
 {
     return(reference.CurrentResolveResult ?? reference.Resolve());
 }
        private static string GetMethodName([CanBeNull] IReference reference)
        {
            var info = reference?.Resolve();

            return(info?.ResolveErrorType == ResolveErrorType.OK ? info.DeclaredElement?.ShortName : null);
        }
Example #19
0
 public static bool IsStringConcatOperatorReference([CanBeNull] this IReference reference)
 {
     if (reference?.Resolve() is (ISignOperator {
         IsPredefined : true, Parameters : { Count : 2 } parameters
     }, _))
Example #20
0
 private static DeclaredElementInstance?TryResolveReference(IReference?reference)
 => reference?.Resolve().Result is
 {