/** @since 2.4 */
  protected PackageFragmentRootData initializeData(final IPackageFragmentRoot root) {
    final PackageFragmentRootData data =
        new PackageFragmentRootData(computeModificationStamp(root));
    data.addRoot(root);
    try {
      final SourceAttachmentPackageFragmentRootWalker<Void> walker =
          new SourceAttachmentPackageFragmentRootWalker<Void>() {

            @Override
            protected URI getURI(
                IFile file,
                org.eclipse.xtext.ui.resource.PackageFragmentRootWalker.TraversalState state) {
              if (!uriValidator.isPossiblyManaged(file)) return null;
              return super.getURI(file, state);
            }

            @Override
            protected URI getURI(
                IJarEntryResource jarEntry,
                org.eclipse.xtext.ui.resource.PackageFragmentRootWalker.TraversalState state) {
              if (!uriValidator.isPossiblyManaged(jarEntry)) return null;
              final URI uri = locator.getURI(root, jarEntry, state);
              if (!uriValidator.isValid(uri, jarEntry)) return null;
              return uri;
            }

            @Override
            protected Void handle(
                URI uri,
                IStorage storage,
                org.eclipse.xtext.ui.resource.PackageFragmentRootWalker.TraversalState state) {
              data.uri2Storage.put(uri, storage);
              return null;
            }
          };
      walker.traverse(root, false);
      if (walker.getBundleSymbolicName() != null)
        data.uriPrefix = URI.createPlatformResourceURI(walker.getBundleSymbolicName() + "/", true);
    } catch (RuntimeException e) {
      log.error(e.getMessage(), e);
    } catch (JavaModelException e) {
      log.debug(e.getMessage(), e);
    }
    return data;
  }