PyFile (@NotNull PyFile file) { final Boolean hasSkeleton = file.getUserData(HAS_SKELETON); if (hasSkeleton != null && !hasSkeleton) { return null; } final VirtualFile moduleVirtualFile = file.getVirtualFile(); if (moduleVirtualFile != null) { String moduleName = QualifiedNameFinder.findShortestImportableName(file, moduleVirtualFile); if (moduleName != null) { final QualifiedName qName = QualifiedName.fromDottedString(moduleName); final QualifiedName restored = QualifiedNameFinder.canonizeQualifiedName(file, qName, null); if (restored != null) { moduleName = restored.toString(); } final PyFile skeletonFile = getUserSkeletonForModuleQName(moduleName, file); file.putUserData(HAS_SKELETON, skeletonFile != null); return skeletonFile; } } return null; }