Exemple #1
0
        public IPsiSourceFile GetSourceFile(IHierarchyReference hierarchyReference, out Guid?guid)
        {
            guid = null;
            if (hierarchyReference == null)
            {
                return(null);
            }

            myShellLocks.AssertReadAccessAllowed();
            switch (hierarchyReference)
            {
            case LocalReference localReference:
                var sourceFile = myManager[localReference.OwningPsiPersistentIndex];
                guid = sourceFile != null?myMetaFileGuidCache.GetAssetGuid(sourceFile) : null;

                return(sourceFile);

            case ExternalReference externalReference:
                guid = externalReference.ExternalAssetGuid;
                var paths = myMetaFileGuidCache.GetAssetFilePathsFromGuid(guid.Value);
                if (paths.Count != 1)
                {
                    return(null);
                }

                return(myPsiModule.TryGetFileByPath(paths[0], out var result) ? result : null);

            default:
                throw new InvalidOperationException();
            }
        }
Exemple #2
0
        public static Guid?GetGuidFor(MetaFileGuidCache metaFileGuidCache, ITypeElement typeElement)
        {
            var sourceFile = typeElement.GetDeclarations().FirstOrDefault()?.GetSourceFile();

            if (sourceFile == null || !sourceFile.IsValid())
            {
                return(null);
            }

            if (typeElement.TypeParameters.Count != 0)
            {
                return(null);
            }

            if (typeElement.GetContainingType() != null)
            {
                return(null);
            }

            if (!typeElement.ShortName.Equals(sourceFile.GetLocation().NameWithoutExtension))
            {
                return(null);
            }

            var guid = metaFileGuidCache.GetAssetGuid(sourceFile);

            return(guid);
        }
Exemple #3
0
        public static Guid?GetGuidFor(MetaFileGuidCache metaFileGuidCache, ITypeElement typeElement)
        {
            // partial classes
            var declarations = typeElement.GetDeclarations();

            foreach (var declaration in declarations)
            {
                var sourceFile = declaration.GetSourceFile();
                if (sourceFile == null || !sourceFile.IsValid())
                {
                    continue;
                }

                if (!typeElement.ShortName.Equals(sourceFile.GetLocation().NameWithoutExtension))
                {
                    continue;
                }

                if (typeElement.TypeParameters.Count != 0)
                {
                    continue;
                }

                if (typeElement.GetContainingType() != null)
                {
                    continue;
                }

                var guid = metaFileGuidCache.GetAssetGuid(sourceFile);
                return(guid);
            }

            return(null);
        }
        public void InvalidateCacheFor(IPsiSourceFile sourceFile)
        {
            myShellLocks.AssertWriteAccessAllowed();
            var guid = myMetaFileGuidCache.GetAssetGuid(sourceFile);

            if (guid == null) // we have already clear content due to advice on GuidChanged in consructor
            {
                return;
            }

            var visited = new HashSet <Guid>();

            foreach (var deps in myDependencies.GetValuesSafe(guid.Value))
            {
                InvalidateImportCache(deps, visited);
            }

            InvalidateImportCache(guid.Value, visited);
        }
        public void Remove(IPsiSourceFile sourceFile, AssetDocumentHierarchyElement assetDocumentHierarchyElement)
        {
            myShellLocks.AssertWriteAccessAllowed();
            var guid = myMetaFileGuidCache.GetAssetGuid(sourceFile);

            if (guid == null) // we have already clear content due to advice on GuidChanged in consructor
            {
                return;
            }

            var visited = new HashSet <string>();

            foreach (var deps in myDependencies.GetValuesSafe(guid))
            {
                InvalidateImportCache(deps, visited);
            }

            InvalidateImportCache(guid, visited);
        }