Exemplo n.º 1
0
        static public Maybe <FuncResult <IXor4IdentifierOriginSyntax, SimpleControlFlowAnalysisError> > GetIdentifierDeclarationSyntax(IdentifierNameSyntax syntax, MethodBlockAnalysis methodAnalysis)
        {
            Maybe <FuncResult <IXor4IdentifierOriginSyntax, SimpleControlFlowAnalysisError> > __Ok(IXor4IdentifierOriginSyntax ok) => new FuncResult <IXor4IdentifierOriginSyntax, SimpleControlFlowAnalysisError>(ok);
            Maybe <FuncResult <IXor4IdentifierOriginSyntax, SimpleControlFlowAnalysisError> > __Error(SimpleControlFlowAnalysisError error) => new FuncResult <IXor4IdentifierOriginSyntax, SimpleControlFlowAnalysisError>(error);


            var loopLikeSyntax = syntax.Ancestors().FirstOrDefault(x => SyntaxOperations.IsLoopLike(x));

            if (loopLikeSyntax != null)
            {
                return(__Error(SimpleControlFlowAnalysisError.NotALinearControlFlow(loopLikeSyntax)));
            }
            else
            {
                var symbolInfo = methodAnalysis.SemanticModel.GetSymbolInfo(syntax);


                switch (symbolInfo.Symbol.Kind)
                {
                case SymbolKind.NamedType:
                case SymbolKind.Namespace:
                {
                    return(Maybe.NoValue);
                }

                case SymbolKind.Local:
                {
                    var declaratorSyntax = (VariableDeclaratorSyntax)symbolInfo.Symbol.DeclaringSyntaxReferences.Single().GetSyntax();
                    var delarationSyntax = declaratorSyntax.Ancestors().OfType <LocalDeclarationStatementSyntax>().First();
                    return(__Ok(new Xor4IdentifierOriginSyntax(delarationSyntax)));
                }

                case SymbolKind.Field:
                {
                    var declaringSyntax = (FieldDeclarationSyntax)symbolInfo.Symbol.DeclaringSyntaxReferences.Single().GetSyntax();
                    return(__Ok(new Xor4IdentifierOriginSyntax(declaringSyntax)));
                }

                case SymbolKind.Property:
                {
                    var declaringSyntax = (PropertyDeclarationSyntax)symbolInfo.Symbol.DeclaringSyntaxReferences.Single().GetSyntax();
                    return(__Ok(new Xor4IdentifierOriginSyntax(declaringSyntax)));
                }

                case SymbolKind.Parameter:
                {
                    var declaringSyntax = (ParameterSyntax)symbolInfo.Symbol.DeclaringSyntaxReferences.Single().GetSyntax();
                    return(__Ok(new Xor4IdentifierOriginSyntax(declaringSyntax)));
                }

                default:
                    throw NotPreparedForThatCase.UnexpectedEnumException(symbolInfo.Symbol.Kind);
                }
            }
        }
        static public Xor7ExpressionSyntax FromExpression(SyntaxNode syntaxueSyntax)
        {
            switch (syntaxueSyntax)
            {
            case ParenthesizedExpressionSyntax parenthesizedExprSyntax:
            {
                return(new Xor7ExpressionSyntax(parenthesizedExprSyntax));
            }

            case InvocationExpressionSyntax invoSyntax:
            {
                return(new Xor7ExpressionSyntax(invoSyntax));
            }

            case BinaryExpressionSyntax binaryExprSyntax:
            {
                return(new Xor7ExpressionSyntax(binaryExprSyntax));
            }

            case CastExpressionSyntax castExprSyntax:
            {
                return(new Xor7ExpressionSyntax(castExprSyntax));
            }

            case MemberAccessExpressionSyntax memberAccessExpr:
            {
                return(new Xor7ExpressionSyntax(memberAccessExpr));
            }

            case IdentifierNameSyntax identifierSyntax:
            {
                return(new Xor7ExpressionSyntax(identifierSyntax));
            }

            case LiteralExpressionSyntax literalSyntax:
            {
                return(new Xor7ExpressionSyntax(literalSyntax));
            }

            case ArgumentSyntax argSyntax:
            {
                throw NotPreparedForThatCase.CannotHappenException;
            }

            default:
                throw NotPreparedForThatCase.UnexpectedTypeException(syntaxueSyntax.GetType());
            }
        }
Exemplo n.º 3
0
        private static IReadOnlyList <MetadataReference> _GetAssemblies(params WellKnownAssembliesEnum[] assemblies)
        => assemblies.Select
        (

            x =>
        {
            switch (x)
            {
            case WellKnownAssembliesEnum.MsCoreLib:
                {
                    return(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\mscorlib.dll");
                }

            default:
                throw NotPreparedForThatCase.UnexpectedEnumException(x);
            }
        }
        )
        .Select(x => MetadataReference.CreateFromFile(x))
        .ToArray();