Beispiel #1
0
        private static IDeclaredElement FindDeclaredElement(IPsiView psiView, out IDeclaration declarationUnderCaret)
        {
            declarationUnderCaret = null;

            var referenceName = psiView.GetSelectedTreeNode <IReferenceName>();

            if (referenceName != null)
            {
                return(referenceName.Reference.Resolve().DeclaredElement);
            }

            var identifier = psiView.GetSelectedTreeNode <IShaderLabIdentifier>();

            declarationUnderCaret = PropertyDeclarationNavigator.GetByName(identifier);
            return(declarationUnderCaret?.DeclaredElement);
        }
        public IColorReference GetColorReference(ITreeNode element)
        {
            if (element is IVectorLiteral vectorLiteral)
            {
                var vectorPropertyValue = VectorPropertyValueNavigator.GetByVector(vectorLiteral);
                if (vectorPropertyValue != null)
                {
                    // Does the vector literal belong to a vector property or a color property?
                    var propertyDeclation = PropertyDeclarationNavigator.GetByPropertValue(vectorPropertyValue);
                    if (propertyDeclation == null)
                    {
                        return(null);
                    }

                    if (!(propertyDeclation.PropertyType is ISimplePropertyType simplePropertyType) ||
                        simplePropertyType.Keyword?.NodeType != ShaderLabTokenType.COLOR_KEYWORD)
                    {
                        return(null);
                    }
                }

                var values = vectorLiteral.Numbers;
                if (values.Count == 3 || values.Count == 4)
                {
                    var r = GetColorValue(values[0]);
                    var g = GetColorValue(values[1]);
                    var b = GetColorValue(values[2]);
                    // Technically, the colour should have 4 values, but show the highlight even if we're unfinished
                    var a            = values.Count == 4 ? GetColorValue(values[3]) : 255;
                    var colorElement = new ColorElement(Color.FromArgb(a, r, g, b));
                    var range        = GetDocumentRange(values[0], values.Last());
                    return(new ShaderLabColorReference(colorElement,
                                                       VectorPropertyValueNavigator.GetByVector(vectorLiteral),
                                                       ColorValueNavigator.GetByConstant(vectorLiteral), range));
                }
            }
            return(null);
        }
Beispiel #3
0
        private static IDeclaredElement FindDeclaredElement([NotNull] IPsiView psiView)
        {
            var referenceExpression = psiView.GetSelectedTreeNode <IReferenceExpression>();

            if (referenceExpression != null)
            {
                return(referenceExpression.Reference.Resolve().DeclaredElement);
            }

            var identifier = psiView.GetSelectedTreeNode <ICSharpIdentifier>();

            if (identifier != null)
            {
                var referenceName = ReferenceNameNavigator.GetByNameIdentifier(identifier);
                if (referenceName != null)
                {
                    return(referenceName.Reference.Resolve().DeclaredElement);
                }

                var declarationUnderCaret =
                    FieldDeclarationNavigator.GetByNameIdentifier(identifier) ??
                    PropertyDeclarationNavigator.GetByNameIdentifier(identifier) ??
                    MethodDeclarationNavigator.GetByNameIdentifier(identifier) ??
                    ConstructorDeclarationNavigator.GetByTypeName(identifier) ??
                    CSharpTypeDeclarationNavigator.GetByNameIdentifier(identifier) ??
                    EventDeclarationNavigator.GetByNameIdentifier(identifier) ??
                    ConstantDeclarationNavigator.GetByNameIdentifier(identifier) ??
                    VariableDeclarationNavigator.GetByNameIdentifier(identifier);

                return(declarationUnderCaret?.DeclaredElement);
            }

            var predefinedTypeUsage = psiView.GetSelectedTreeNode <IPredefinedTypeUsage>();

            return(predefinedTypeUsage?.ScalarPredefinedTypeName.Reference.Resolve().DeclaredElement);
        }