Example usage for com.google.common.collect ImmutableBiMap inverse

List of usage examples for com.google.common.collect ImmutableBiMap inverse

Introduction

In this page you can find the example usage for com.google.common.collect ImmutableBiMap inverse.

Prototype

public abstract ImmutableBiMap<V, K> inverse();

Source Link

Usage

From source file:net.tsquery.data.hbase.IDMap.java

private static String getEqual(ImmutableBiMap<String, ID> map, ID id) {
    for (ID valueID : map.inverse().keySet()) {
        if (valueID.compareTo(id) == 0) {
            return map.inverse().get(valueID);
        }/*from   www.j  a v  a  2s.c o m*/
    }
    return null;
}

From source file:org.fcrepo.kernel.impl.rdf.converters.PropertyConverter.java

/**
 * Get the JCR property name for an RDF predicate
 *
 * @param namespaceRegistry the namespace registry
 * @param predicate the predicate to map to a property name
 * @param namespaceMapping the namespace mapping
 * @return JCR property name for an RDF predicate
 * @throws RepositoryException if repository exception occurred
 *//*from www.ja  va2 s  . co  m*/
public static String getPropertyNameFromPredicate(final NamespaceRegistry namespaceRegistry,
        final Resource predicate, final Map<String, String> namespaceMapping) throws RepositoryException {

    // reject if update request contains any fcr namespaces
    if (namespaceMapping != null && namespaceMapping.containsKey("fcr")) {
        throw new FedoraInvalidNamespaceException("Invalid fcr namespace properties " + predicate + ".");
    }

    final String rdfNamespace = predicate.getNameSpace();

    // log warning if the user-supplied namespace doesn't match value from predicate.getNameSpace(),
    // e.g., if the Jena method returns "http://" for "http://myurl.org" (no terminating character).
    if (namespaceMapping != null && !namespaceMapping.containsValue(rdfNamespace)) {
        LOGGER.warn("The namespace of predicate: {} was possibly misinterpreted as: {}.", predicate,
                rdfNamespace);
    }

    final String rdfLocalname = predicate.getLocalName();

    final String prefix;

    assert (namespaceRegistry != null);

    final String namespace = getJcrNamespaceForRDFNamespace(rdfNamespace);

    if (namespaceRegistry.isRegisteredUri(namespace)) {
        LOGGER.debug("Discovered namespace: {} in namespace registry.", namespace);
        prefix = namespaceRegistry.getPrefix(namespace);
    } else {
        LOGGER.debug("Didn't discover namespace: {} in namespace registry.", namespace);
        final ImmutableBiMap<String, String> nsMap = ImmutableBiMap.copyOf(namespaceMapping);
        if (nsMap.containsValue(namespace)) {
            LOGGER.debug("Discovered namespace: {} in namespace map: {}.", namespace, nsMap);
            prefix = nsMap.inverse().get(namespace);
            namespaceRegistry.registerNamespace(prefix, namespace);
        } else {
            prefix = namespaceRegistry.registerNamespace(namespace);
        }
    }

    final String propertyName = prefix + ":" + rdfLocalname;

    LOGGER.debug("Took RDF predicate {} and translated it to JCR property {}", namespace, propertyName);

    return propertyName;

}

From source file:org.fcrepo.kernel.modeshape.rdf.converters.PropertyConverter.java

/**
 * Get the JCR property name for an RDF predicate
 *
 * @param namespaceRegistry the namespace registry
 * @param predicate the predicate to map to a property name
 * @param namespaceMapping the namespace mapping
 * @return JCR property name for an RDF predicate
 * @throws RepositoryException if repository exception occurred
 */// w w  w  .j a va2 s  . c o m
public static String getPropertyNameFromPredicate(final NamespaceRegistry namespaceRegistry,
        final Resource predicate, final Map<String, String> namespaceMapping) throws RepositoryException {

    // reject if update request contains any fcr namespaces
    if (namespaceMapping != null && namespaceMapping.containsKey("fcr")) {
        throw new FedoraInvalidNamespaceException("Invalid fcr namespace properties " + predicate + ".");
    }

    final String rdfNamespace = predicate.getNameSpace();

    // log warning if the user-supplied namespace doesn't match value from predicate.getNameSpace(),
    // e.g., if the Jena method returns "http://" for "http://myurl.org" (no terminating character).
    if (namespaceMapping != null && namespaceMapping.size() > 0
            && !namespaceMapping.containsValue(rdfNamespace)) {
        LOGGER.warn("The namespace of predicate: {} was possibly misinterpreted as: {}.", predicate,
                rdfNamespace);
    }

    final String rdfLocalname = predicate.getLocalName();

    final String prefix;

    assert (namespaceRegistry != null);

    final String namespace = getJcrNamespaceForRDFNamespace(rdfNamespace);

    if (namespaceRegistry.isRegisteredUri(namespace)) {
        LOGGER.debug("Discovered namespace: {} in namespace registry.", namespace);
        prefix = namespaceRegistry.getPrefix(namespace);
    } else {
        LOGGER.debug("Didn't discover namespace: {} in namespace registry.", namespace);
        final ImmutableBiMap<String, String> nsMap = ImmutableBiMap.copyOf(namespaceMapping);
        if (nsMap.containsValue(namespace)) {
            LOGGER.debug("Discovered namespace: {} in namespace map: {}.", namespace, nsMap);
            prefix = nsMap.inverse().get(namespace);
            namespaceRegistry.registerNamespace(prefix, namespace);
        } else {
            prefix = namespaceRegistry.registerNamespace(namespace);
        }
    }

    final String propertyName = prefix + ":" + rdfLocalname;

    LOGGER.debug("Took RDF predicate {} and translated it to JCR property {}", namespace, propertyName);

    return propertyName;

}

From source file:org.cspoker.client.common.gamestate.AbstractGameState.java

public final PlayerState getNextSeatedPlayerAfter(PlayerId startPlayer) {
    ImmutableBiMap<SeatId, PlayerId> seatMap = getSeatMap();
    int maxNbPlayers = getTableConfiguration().getMaxNbPlayers();
    SeatId currentSeat = seatMap.inverse().get(startPlayer);
    PlayerId currentPlayer;//from   w  w w . j a  v  a 2 s.c  o  m
    do {
        currentSeat = new SeatId((currentSeat.getId() + 1) % maxNbPlayers);
        currentPlayer = seatMap.get(currentSeat);
    } while (currentPlayer == null);
    if (currentPlayer.equals(startPlayer)) {
        return null;
    }
    return getPlayer(currentPlayer);
}

From source file:com.facebook.buck.js.JsLibraryDescription.java

@Override
public BuildRule createBuildRule(TargetGraph targetGraph, BuildRuleParams params, BuildRuleResolver resolver,
        CellPathResolver cellRoots, Arg args) throws NoSuchBuildTargetException {

    params.getBuildTarget().getBasePath();
    // this params object is used as base for the JsLibrary build rule, but also for all dynamically
    // created JsFile rules.
    // For the JsLibrary case, we want to propagate flavors to library dependencies
    // For the JsFile case, we only want to depend on the worker, not on any libraries
    params = JsUtil.withWorkerDependencyOnly(params, resolver, args.worker);

    final WorkerTool worker = resolver.getRuleWithType(args.worker, WorkerTool.class);
    final SourcePathRuleFinder ruleFinder = new SourcePathRuleFinder(resolver);
    final SourcePathResolver sourcePathResolver = new SourcePathResolver(ruleFinder);
    final ImmutableBiMap<Either<SourcePath, Pair<SourcePath, String>>, Flavor> sourcesToFlavors = mapSourcesToFlavors(
            sourcePathResolver, args.srcs);
    final Optional<Either<SourcePath, Pair<SourcePath, String>>> file = JsFlavors
            .extractSourcePath(sourcesToFlavors.inverse(), params.getBuildTarget().getFlavors().stream());

    if (file.isPresent()) {
        return params.getBuildTarget().getFlavors().contains(JsFlavors.RELEASE)
                ? createReleaseFileRule(params, resolver, args, worker)
                : createDevFileRule(params, ruleFinder, sourcePathResolver, args, file.get(), worker);
    } else {//  w  ww. j a  v  a 2s  .com
        return new LibraryBuilder(targetGraph, resolver, params, sourcesToFlavors).setSources(args.srcs)
                .setLibraryDependencies(args.libs).build(worker);
    }
}

From source file:com.facebook.buck.features.js.JsLibraryDescription.java

@Override
public BuildRule createBuildRule(BuildRuleCreationContextWithTargetGraph context, BuildTarget buildTarget,
        BuildRuleParams params, JsLibraryDescriptionArg args) {
    ActionGraphBuilder graphBuilder = context.getActionGraphBuilder();

    SourcePathRuleFinder ruleFinder = new SourcePathRuleFinder(graphBuilder);
    SourcePathResolver sourcePathResolver = DefaultSourcePathResolver.from(ruleFinder);
    ImmutableBiMap<Either<SourcePath, Pair<SourcePath, String>>, Flavor> sourcesToFlavors;
    try {// w  w  w .ja v  a  2 s  .  c o m
        sourcesToFlavors = sourcesToFlavorsCache.get(args.getSrcs(),
                () -> mapSourcesToFlavors(sourcePathResolver, args.getSrcs()));
    } catch (ExecutionException e) {
        throw new RuntimeException(e);
    }
    Optional<Either<SourcePath, Pair<SourcePath, String>>> file = JsFlavors
            .extractSourcePath(sourcesToFlavors.inverse(), buildTarget.getFlavors().stream());

    ProjectFilesystem projectFilesystem = context.getProjectFilesystem();
    CellPathResolver cellRoots = context.getCellPathResolver();
    BuildTarget workerTarget = args.getWorker();
    WorkerTool worker = graphBuilder.getRuleWithType(workerTarget, WorkerTool.class);

    // this params object is used as base for the JsLibrary build rule, but also for all dynamically
    // created JsFile rules.
    // For the JsLibrary case, we want to propagate flavors to library dependencies
    // For the JsFile case, we only want to depend on the worker, not on any libraries
    Predicate<BuildTarget> isWorker = workerTarget::equals;
    Predicate<BuildTarget> extraDepsFilter = args.getExtraJson().map(StringWithMacros::getMacros)
            .map(RichStream::from).map(JsLibraryDescription::getMacroTargets)
            .map(macroTargets -> isWorker.or(macroTargets::contains)).orElse(isWorker);
    ImmutableSortedSet<BuildRule> workerAndMacrosExtraDeps = params.getExtraDeps().get().stream()
            .filter(x -> extraDepsFilter.test(x.getBuildTarget()))
            .collect(ImmutableSortedSet.toImmutableSortedSet(Ordering.natural()));
    BuildRuleParams baseParams = params.withoutDeclaredDeps().withExtraDeps(workerAndMacrosExtraDeps);

    if (file.isPresent()) {
        return buildTarget.getFlavors().contains(JsFlavors.RELEASE)
                ? createReleaseFileRule(buildTarget, projectFilesystem, baseParams, graphBuilder, cellRoots,
                        args, worker)
                : createDevFileRule(buildTarget, projectFilesystem, baseParams, ruleFinder, sourcePathResolver,
                        graphBuilder, cellRoots, args, file.get(), worker);
    } else if (buildTarget.getFlavors().contains(JsFlavors.LIBRARY_FILES)) {
        return new LibraryFilesBuilder(graphBuilder, buildTarget, baseParams, sourcesToFlavors)
                .setSources(args.getSrcs()).build(projectFilesystem, worker);
    } else {
        // We allow the `deps_query` to contain different kinds of build targets, but filter out
        // all targets that don't refer to a JsLibrary rule.
        // That prevents users from having to wrap every query into "kind(js_library, ...)".
        Stream<BuildTarget> queryDeps = args.getDepsQuery().map(Query::getResolvedQuery)
                .orElseGet(ImmutableSortedSet::of).stream()
                .filter(target -> JsUtil.isJsLibraryTarget(target, context.getTargetGraph()));
        Stream<BuildTarget> declaredDeps = args.getDeps().stream();
        Stream<BuildTarget> deps = Stream.concat(declaredDeps, queryDeps);
        return new LibraryBuilder(context.getTargetGraph(), graphBuilder, buildTarget, baseParams)
                .setLibraryDependencies(deps).build(projectFilesystem, worker);
    }
}

From source file:org.fcrepo.kernel.rdf.JcrRdfTools.java

/**
 * Get the JCR property name for an RDF predicate
 *
 * @param namespaceRegistry//from w w w.ja  v a2  s . co  m
 * @param rdfNamespace
 * @param rdfLocalname
 * @param namespaceMapping
 * @return
 * @throws RepositoryException
 */
private String getJcrNameForRdfNode(final NamespaceRegistry namespaceRegistry, final String rdfNamespace,
        final String rdfLocalname, final Map<String, String> namespaceMapping) throws RepositoryException {

    final String prefix;

    final String namespace = getJcrNamespaceForRDFNamespace(rdfNamespace);

    assert (namespaceRegistry != null);

    if (namespaceRegistry.isRegisteredUri(namespace)) {
        LOGGER.debug("Discovered namespace: {} in namespace registry.", namespace);
        prefix = namespaceRegistry.getPrefix(namespace);
    } else {
        LOGGER.debug("Didn't discover namespace: {} in namespace registry.", namespace);
        final ImmutableBiMap<String, String> nsMap = ImmutableBiMap.copyOf(namespaceMapping);
        if (nsMap.containsValue(namespace)) {
            LOGGER.debug("Discovered namespace: {} in namespace map: {}.", namespace, nsMap);
            prefix = nsMap.inverse().get(namespace);
            namespaceRegistry.registerNamespace(prefix, namespace);
        } else {
            prefix = namespaceRegistry.registerNamespace(namespace);
        }
    }

    final String propertyName = prefix + ":" + rdfLocalname;

    LOGGER.debug("Took RDF predicate {} and translated it to JCR property {}", namespace, propertyName);

    return propertyName;

}

From source file:com.google.devtools.build.lib.rules.java.JavaImport.java

@Override
public ConfiguredTarget create(RuleContext ruleContext) throws InterruptedException, RuleErrorException {
    ImmutableList<Artifact> srcJars = ImmutableList.of();
    ImmutableList<Artifact> jars = collectJars(ruleContext);
    Artifact srcJar = ruleContext.getPrerequisiteArtifact("srcjar", Mode.TARGET);

    if (ruleContext.hasErrors()) {
        return null;
    }// w  ww.  jav a  2  s  .co m

    ImmutableList<TransitiveInfoCollection> targets = ImmutableList.<TransitiveInfoCollection>builder()
            .addAll(ruleContext.getPrerequisites("deps", Mode.TARGET))
            .addAll(ruleContext.getPrerequisites("exports", Mode.TARGET)).build();
    final JavaCommon common = new JavaCommon(ruleContext, semantics, /*srcs=*/ImmutableList.<Artifact>of(),
            targets, targets, targets);
    semantics.checkRule(ruleContext, common);

    // No need for javac options - no compilation happening here.
    ImmutableBiMap.Builder<Artifact, Artifact> compilationToRuntimeJarMapBuilder = ImmutableBiMap.builder();
    ImmutableList<Artifact> interfaceJars = processWithIjar(jars, ruleContext,
            compilationToRuntimeJarMapBuilder);

    JavaCompilationArtifacts javaArtifacts = collectJavaArtifacts(jars, interfaceJars);
    common.setJavaCompilationArtifacts(javaArtifacts);

    CppCompilationContext transitiveCppDeps = common.collectTransitiveCppDeps();
    NestedSet<LinkerInput> transitiveJavaNativeLibraries = common.collectTransitiveJavaNativeLibraries();
    boolean neverLink = JavaCommon.isNeverLink(ruleContext);
    JavaCompilationArgs javaCompilationArgs = common.collectJavaCompilationArgs(false, neverLink, false);
    JavaCompilationArgs recursiveJavaCompilationArgs = common.collectJavaCompilationArgs(true, neverLink,
            false);
    NestedSet<Artifact> transitiveJavaSourceJars = collectTransitiveJavaSourceJars(ruleContext, srcJar);
    if (srcJar != null) {
        srcJars = ImmutableList.of(srcJar);
    }

    // The "neverlink" attribute is transitive, so if it is enabled, we don't add any
    // runfiles from this target or its dependencies.
    Runfiles runfiles = neverLink ? Runfiles.EMPTY
            : new Runfiles.Builder(ruleContext.getWorkspaceName(),
                    ruleContext.getConfiguration().legacyExternalRunfiles())
                            // add the jars to the runfiles
                            .addArtifacts(javaArtifacts.getRuntimeJars())
                            .addTargets(targets, RunfilesProvider.DEFAULT_RUNFILES)
                            .addRunfiles(ruleContext, RunfilesProvider.DEFAULT_RUNFILES)
                            .addTargets(targets, JavaRunfilesProvider.TO_RUNFILES)
                            .add(ruleContext, JavaRunfilesProvider.TO_RUNFILES).build();

    CcLinkParamsStore ccLinkParamsStore = new CcLinkParamsStore() {
        @Override
        protected void collect(CcLinkParams.Builder builder, boolean linkingStatically, boolean linkShared) {
            builder.addTransitiveTargets(common.targetsTreatedAsDeps(ClasspathType.BOTH),
                    JavaCcLinkParamsProvider.TO_LINK_PARAMS, CcLinkParamsProvider.TO_LINK_PARAMS);
        }
    };
    RuleConfiguredTargetBuilder ruleBuilder = new RuleConfiguredTargetBuilder(ruleContext);
    NestedSetBuilder<Artifact> filesBuilder = NestedSetBuilder.stableOrder();
    filesBuilder.addAll(jars);

    ImmutableBiMap<Artifact, Artifact> compilationToRuntimeJarMap = compilationToRuntimeJarMapBuilder.build();
    semantics.addProviders(ruleContext, common, ImmutableList.<String>of(), null /* classJar */,
            srcJar /* srcJar */, null /* genJar */, null /* gensrcJar */, compilationToRuntimeJarMap,
            filesBuilder, ruleBuilder);

    NestedSet<Artifact> filesToBuild = filesBuilder.build();

    JavaSourceInfoProvider javaSourceInfoProvider = new JavaSourceInfoProvider.Builder().setJarFiles(jars)
            .setSourceJarsForJarFiles(srcJars).build();

    JavaRuleOutputJarsProvider.Builder ruleOutputJarsProviderBuilder = JavaRuleOutputJarsProvider.builder();
    for (Artifact jar : jars) {
        ruleOutputJarsProviderBuilder.addOutputJar(jar, compilationToRuntimeJarMap.inverse().get(jar), srcJar);
    }

    NestedSet<Artifact> proguardSpecs = new ProguardLibrary(ruleContext).collectProguardSpecs();

    JavaRuleOutputJarsProvider ruleOutputJarsProvider = ruleOutputJarsProviderBuilder.build();
    JavaSourceJarsProvider sourceJarsProvider = JavaSourceJarsProvider.create(transitiveJavaSourceJars,
            srcJars);
    JavaCompilationArgsProvider compilationArgsProvider = JavaCompilationArgsProvider
            .create(javaCompilationArgs, recursiveJavaCompilationArgs);
    JavaSkylarkApiProvider.Builder skylarkApiProvider = JavaSkylarkApiProvider.builder()
            .setRuleOutputJarsProvider(ruleOutputJarsProvider).setSourceJarsProvider(sourceJarsProvider)
            .setCompilationArgsProvider(compilationArgsProvider);
    common.addTransitiveInfoProviders(ruleBuilder, skylarkApiProvider, filesToBuild, null);
    return ruleBuilder.setFilesToBuild(filesToBuild)
            .addSkylarkTransitiveInfo(JavaSkylarkApiProvider.NAME, skylarkApiProvider.build())
            .add(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider)
            .add(JavaRuntimeJarProvider.class, new JavaRuntimeJarProvider(javaArtifacts.getRuntimeJars()))
            .add(JavaNeverlinkInfoProvider.class, new JavaNeverlinkInfoProvider(neverLink))
            .add(RunfilesProvider.class, RunfilesProvider.simple(runfiles))
            .add(CcLinkParamsProvider.class, new CcLinkParamsProvider(ccLinkParamsStore))
            .add(JavaCompilationArgsProvider.class, compilationArgsProvider)
            .add(JavaNativeLibraryProvider.class, new JavaNativeLibraryProvider(transitiveJavaNativeLibraries))
            .add(CppCompilationContext.class, transitiveCppDeps)
            .add(JavaSourceInfoProvider.class, javaSourceInfoProvider)
            .add(JavaSourceJarsProvider.class, sourceJarsProvider)
            .add(ProguardSpecProvider.class, new ProguardSpecProvider(proguardSpecs))
            .addOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP, transitiveJavaSourceJars)
            .addOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL, proguardSpecs).build();
}

From source file:com.github.rinde.rinsim.central.arrays.ArraysSolverValidator.java

private static void validateCurrentSolutions(int v, int n, SolutionObject[] currentSolutions,
        int[] currentDestinations, Multimap<Integer, Integer> inventoriesMap,
        ImmutableBiMap<Integer, Integer> servicePairsMap) {
    checkArgument(currentSolutions.length == v,
            "The number of currentSolutions (%s) should equal the number of " + "vehicles (%s).",
            currentSolutions.length, v);

    for (int i = 0; i < currentSolutions.length; i++) {
        final List<Integer> route = ImmutableList.copyOf(Ints.asList(currentSolutions[i].route));

        checkArgument(route.get(0) == 0, "First item in route should always be 0, it is %s.", route.get(0));
        checkArgument(route.get(route.size() - 1) == n - 1,
                "Last item in route should always be depot (%s), it is %s.", n - 1,
                route.get(route.size() - 1));

        if (currentDestinations[i] > 0) {
            // there is a current destination
            checkArgument(currentDestinations[i] == route.get(1),
                    "The vehicle has a current destination (%s) but it is not the "
                            + "first item in its route: %s.",
                    currentDestinations[i], route);
        }/*from w  ww.jav  a  2  s.  co m*/
        final Collection<Integer> inventory = inventoriesMap.get(i);
        checkArgument(ImmutableSet.copyOf(route).containsAll(inventory),
                "The route should contain all locations in its inventory. Vehicle "
                        + "%s, route: %s, inventory: %s.",
                i, route, inventory);

        for (int j = 1; j < route.size() - 1; j++) {
            final Integer item = route.get(j);
            final int freq = Collections.frequency(route, item);
            checkArgument(freq == 1, "Vehicle %s: each location should occur only once, found %s "
                    + "instances of location %s. Route: %s.", i, freq, item, route);
            if (!inventoriesMap.containsEntry(i, item)) {
                // not in cargo, so the pair should appear in the route
                if (servicePairsMap.containsKey(item)) {
                    checkArgument(route.contains(servicePairsMap.get(item)),
                            "Couldn't find %s in regular mapping.", item);
                } else {
                    checkArgument(route.contains(servicePairsMap.inverse().get(item)),
                            "Couldn't find %s in inverse mapping.", item);
                }
            }
        }
    }
}

From source file:org.sosy_lab.cpachecker.cfa.postprocessing.global.singleloop.CFASingleLoopTransformation.java

/**
 * All function call edges calling functions where the summary edge
 * successor, i.e. the node succeeding the function call predecessor in the
 * caller function, is now a successor of the artificial decision tree, need
 * to be fixed in that their summary edge must now point to a different
 * successor: The predecessor of the assignment edge assigning the program
 * counter value that leads to the old successor.
 *
 * @param pStartNode the start node of the new graph.
 * @param pNewSuccessorsToPC the successor nodes of program counter value
 * assume edges mapped to their respective program counter value.
 * @param pGlobalNewToOld the mapping of new control flow nodes to old control
 * flow nodes./*from w  w w.ja v  a 2  s  .c om*/
 *
 * @throws InterruptedException if a shutdown has been requested by the registered shutdown notifier.
 */
private void fixSummaryEdges(FunctionEntryNode pStartNode, ImmutableBiMap<Integer, CFANode> pNewSuccessorsToPC,
        Map<CFANode, CFANode> pGlobalNewToOld) throws InterruptedException {
    for (FunctionCallEdge fce : findEdges(FunctionCallEdge.class, pStartNode)) {
        FunctionEntryNode entryNode = fce.getSuccessor();
        FunctionExitNode exitNode = entryNode.getExitNode();
        FunctionSummaryEdge oldSummaryEdge = fce.getSummaryEdge();
        CFANode oldSummarySuccessor = fce.getSummaryEdge().getSuccessor();
        Integer pcValue = pNewSuccessorsToPC.inverse().get(oldSummarySuccessor);
        if (pcValue != null) {
            // Find the correct new successor
            for (CFANode potentialNewSummarySuccessor : CFAUtils.successorsOf(exitNode)) {
                if (potentialNewSummarySuccessor.getNumLeavingEdges() == 1) {
                    CFAEdge potentialPCValueAssignmentEdge = potentialNewSummarySuccessor.getLeavingEdge(0);
                    if (potentialPCValueAssignmentEdge instanceof ProgramCounterValueAssignmentEdge) {
                        ProgramCounterValueAssignmentEdge programCounterValueAssignmentEdge = (ProgramCounterValueAssignmentEdge) potentialPCValueAssignmentEdge;
                        if (programCounterValueAssignmentEdge.getProgramCounterValue() == pcValue) {
                            FunctionSummaryEdge newSummaryEdge = (FunctionSummaryEdge) copyCFAEdgeWithNewNodes(
                                    oldSummaryEdge, oldSummaryEdge.getPredecessor(),
                                    potentialNewSummarySuccessor, pGlobalNewToOld);
                            // Fix function summary statement edges
                            for (CFunctionSummaryStatementEdge edge : CFAUtils
                                    .leavingEdges(oldSummaryEdge.getPredecessor())
                                    .filter(CFunctionSummaryStatementEdge.class)) {
                                if (edge.getPredecessor() != newSummaryEdge.getPredecessor()
                                        || edge.getSuccessor() != newSummaryEdge.getSuccessor()) {
                                    removeFromNodes(edge);
                                    if (exitNode.getNumEnteringEdges() > 0) {
                                        CFAEdge newEdge = copyCFAEdgeWithNewNodes(edge,
                                                newSummaryEdge.getPredecessor(), newSummaryEdge.getSuccessor(),
                                                pGlobalNewToOld);
                                        addToNodes(newEdge);
                                    }
                                }
                            }
                            // Fix the function summary edge
                            removeSummaryEdgeFromNodes(oldSummaryEdge);
                            oldSummaryEdge = newSummaryEdge.getPredecessor().getLeavingSummaryEdge();
                            if (oldSummaryEdge != null) {
                                removeSummaryEdgeFromNodes(oldSummaryEdge);
                            }
                            newSummaryEdge.getPredecessor().addLeavingSummaryEdge(newSummaryEdge);
                            oldSummaryEdge = newSummaryEdge.getSuccessor().getEnteringSummaryEdge();
                            if (oldSummaryEdge != null) {
                                removeSummaryEdgeFromNodes(oldSummaryEdge);
                            }
                            newSummaryEdge.getSuccessor().addEnteringSummaryEdge(newSummaryEdge);
                            break;
                        }
                    }
                }
            }
        }
    }
}