Ejemplo n.º 1
0
        internal CodexReferenceVisitor(
            CodexContext codex,
            CodexFile file,
            CodexDefinitionVisitor definitionVisitor)
        {
            m_codex             = codex;
            m_file              = file;
            m_definitionVisitor = definitionVisitor;

            m_currentReferenceKinds = new Stack <CodexId <CodexRefKind> >();
            m_currentReferenceKinds.Push(m_codex.Reference);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Performs the analysis.
        /// </summary>
        public override bool AnalyzeSourceFile(Workspace workspace, AbsolutePath path, ISourceFile sourceFile)
        {
            if (sourceFile.Text == null)
            {
                return(true);
            }

            var parsedModule = workspace.TryGetModuleBySpecFileName(path);

            var file = new CodexFile()
            {
                Path   = path.ToString(PathTable),
                Length = sourceFile.End,
                Hash   = path.ToString(PathTable),
            };

            m_codex.Store.Files.Add(file);

            var moduleName = parsedModule.Descriptor.DisplayName.Replace(Names.ConfigModuleName, "RootConfig");
            var project    = m_codex.Store.Projects.Add(new CodexProject()
            {
                Name        = $@"DominoScript_{moduleName}",
                Directory   = parsedModule.Definition.Root.ToString(PathTable),
                PrimaryFile = parsedModule.Definition.MainFile.ToString(PathTable),
            });

            var semanticModel = workspace.GetSemanticModel();

            var definitionVisitor = new CodexDefinitionVisitor(m_codex, file, project, parsedModule.Descriptor.DisplayName, semanticModel, sourceFile);

            definitionVisitor.VisitSourceFile();

            var visitor = new CodexReferenceVisitor(m_codex, file, definitionVisitor);

            visitor.VisitSourceFile(sourceFile);

            return(true);
        }