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(); } }
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); }
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); }