Beispiel #1
0
        private static IEnumerable <AutoCompleteItem> GetAutoCompleteItemsFromSymbols(ReadOnlyArray <ISymbol> symbols,
                                                                                      bool forNewKeyword, bool isStaticContext)
        {
            var autoCompleteItemsQuery = symbols.ToList().AsParallel();

            //if for new keyowrd - get only named types or namespaces
            //if in staticcontext - get static members only
            if (forNewKeyword)
            {
                autoCompleteItemsQuery =
                    autoCompleteItemsQuery.Where(
                        s =>
                        !s.IsStatic && !s.IsVirtual && !s.IsAbstract &&
                        (s.Kind == CommonSymbolKind.NamedType || s.Kind == CommonSymbolKind.Namespace));
            }
            else
            {
                autoCompleteItemsQuery =
                    autoCompleteItemsQuery.Where(s => s.IsStatic == isStaticContext);
            }

            var autoCompleteItems = autoCompleteItemsQuery.SelectMany(i => GetAutoCompleteItem(i, !forNewKeyword));

            return(autoCompleteItems.Distinct(new AutoCompleteItemEqualityComparer()));
        }
		private static IEnumerable<AutoCompleteItem> GetAutoCompleteItemsFromSymbols(ReadOnlyArray<ISymbol> symbols,
		                                                                             bool forNewKeyword, bool isStaticContext)
		{
			var autoCompleteItemsQuery = symbols.ToList().AsParallel();

			//if for new keyowrd - get only named types or namespaces
			//if in staticcontext - get static members only
			if (forNewKeyword)
			{
				autoCompleteItemsQuery =
					autoCompleteItemsQuery.Where(
						s =>
						!s.IsStatic && !s.IsVirtual && !s.IsAbstract &&
						(s.Kind == CommonSymbolKind.NamedType || s.Kind == CommonSymbolKind.Namespace));
			}
			else
			{
				autoCompleteItemsQuery =
					autoCompleteItemsQuery.Where(s => s.IsStatic==isStaticContext);
			}

			var autoCompleteItems = autoCompleteItemsQuery.SelectMany(i => GetAutoCompleteItem(i, !forNewKeyword));

			return autoCompleteItems.Distinct(new AutoCompleteItemEqualityComparer());
		}
        internal override CommonCompilation CreateCompilation(IText code, string path, bool isInteractive, Session session, Type returnType, DiagnosticBag diagnostics)
        {
            Debug.Assert(code != null && path != null && diagnostics != null);

            Compilation previousSubmission = (session != null) ? (Compilation)session.LastSubmission : null;

            IEnumerable <MetadataReference> references = GetReferences(session);
            ReadOnlyArray <string>          usings     = GetImportedNamespaces(session);

            // TODO (tomat): BaseDirectory should be a property on ScriptEngine?
            var fileResolver = Session.GetFileResolver(session, Directory.GetCurrentDirectory());

            // parse:
            var parseOptions = isInteractive ? DefaultInteractive : DefaultScript;
            var tree         = SyntaxTree.ParseText(code, path, parseOptions);

            diagnostics.Add(tree.GetDiagnostics());
            if (diagnostics.HasAnyErrors())
            {
                return(null);
            }

            // create compilation:
            string assemblyName, submissionTypeName;

            GenerateSubmissionId(out assemblyName, out submissionTypeName);

            var compilation = Compilation.CreateSubmission(
                assemblyName,
                new CompilationOptions(
                    outputKind: OutputKind.DynamicallyLinkedLibrary,
                    mainTypeName: null,
                    scriptClassName: submissionTypeName,
                    usings: usings.ToList(),
                    optimize: false,                    // TODO (tomat)
                    checkOverflow: true,                // TODO (tomat)
                    allowUnsafe: false,                 // TODO (tomat)
                    cryptoKeyContainer: null,
                    cryptoKeyFile: null,
                    delaySign: null,
                    fileAlignment: 0,
                    baseAddress: 0L,
                    platform: Platform.AnyCPU,
                    generalWarningOption: ReportWarning.Default,
                    warningLevel: 4,
                    specificWarningOptions: null,
                    highEntropyVirtualAddressSpace: false
                    ),
                tree,
                previousSubmission,
                references,
                fileResolver,
                this.metadataFileProvider,
                returnType,
                (session != null) ? session.HostObjectType : null
                );

            ValidateReferences(compilation, diagnostics);
            if (diagnostics.HasAnyErrors())
            {
                return(null);
            }

            return(compilation);
        }
        internal override CommonCompilation CreateCompilation(IText code, string path, bool isInteractive, Session session, Type returnType, DiagnosticBag diagnostics)
        {
            Compilation previousSubmission = (Compilation)session.LastSubmission;
            IEnumerable <MetadataReference> referencesForCompilation = session.GetReferencesForCompilation();
            ReadOnlyArray <string>          namespacesForCompilation = session.GetNamespacesForCompilation();
            ParseOptions options    = isInteractive ? ScriptEngine.DefaultInteractive : ScriptEngine.DefaultScript;
            SyntaxTree   syntaxTree = SyntaxTree.ParseText(code, path, options, new CancellationToken());

            diagnostics.Add((IEnumerable <CommonDiagnostic>)syntaxTree.GetDiagnostics(new CancellationToken()));
            if (diagnostics.HasAnyErrors())
            {
                return((CommonCompilation)null);
            }
            string assemblyName;
            string typeName;

            this.GenerateSubmissionId(out assemblyName, out typeName);
            Compilation submission = Compilation.CreateSubmission(assemblyName, new CompilationOptions(OutputKind.DynamicallyLinkedLibrary, (string)null, typeName, (IEnumerable <string>)namespacesForCompilation.ToList(), DebugInformationKind.None, false, true, false, true, (string)null, (string)null, new bool?(), 0, 0UL, Platform.AnyCPU, ReportWarning.Default, 4, (IReadOnlyDictionary <int, ReportWarning>)null, false, new SubsystemVersion()), syntaxTree, previousSubmission, referencesForCompilation, session.FileResolver, this.metadataFileProvider, returnType, session.HostObjectType);

            this.ValidateReferences((CommonCompilation)submission, diagnostics);
            if (diagnostics.HasAnyErrors())
            {
                return((CommonCompilation)null);
            }
            else
            {
                return((CommonCompilation)submission);
            }
        }