From 4694823478f8dfc4c1ffbd5d2f93f8b87da2dc1c Mon Sep 17 00:00:00 2001 From: Ulrich Gabor Date: Fri, 9 Jun 2017 13:58:52 +0200 Subject: [PATCH] Fix for non-existing type labels in source tree context, which are only present in dst tree context --- .../gumtreediff/client/diff/AbstractDiffClient.java | 1 + .../com/github/gumtreediff/client/diff/web/DiffView.java | 1 + .../github/gumtreediff/client/diff/web/ScriptView.java | 1 + .../java/com/github/gumtreediff/tree/TreeContext.java | 8 ++++++++ 4 files changed, 11 insertions(+) diff --git a/client.diff/src/main/java/com/github/gumtreediff/client/diff/AbstractDiffClient.java b/client.diff/src/main/java/com/github/gumtreediff/client/diff/AbstractDiffClient.java index 1cfcc209b..09922761b 100644 --- a/client.diff/src/main/java/com/github/gumtreediff/client/diff/AbstractDiffClient.java +++ b/client.diff/src/main/java/com/github/gumtreediff/client/diff/AbstractDiffClient.java @@ -105,6 +105,7 @@ protected Matcher matchTrees() { ? matchers.getMatcher(getSrcTreeContext().getRoot(), getDstTreeContext().getRoot()) : matchers.getMatcher(opts.matcher, getSrcTreeContext().getRoot(), getDstTreeContext().getRoot()); matcher.match(); + getSrcTreeContext().importTypeLabels(getDstTreeContext()); return matcher; } diff --git a/client.diff/src/main/java/com/github/gumtreediff/client/diff/web/DiffView.java b/client.diff/src/main/java/com/github/gumtreediff/client/diff/web/DiffView.java index 2e6541378..2c5491e1c 100644 --- a/client.diff/src/main/java/com/github/gumtreediff/client/diff/web/DiffView.java +++ b/client.diff/src/main/java/com/github/gumtreediff/client/diff/web/DiffView.java @@ -49,6 +49,7 @@ public DiffView(File fSrc, File fDst) throws IOException { TreeContext dst = Generators.getInstance().getTree(fDst.getAbsolutePath()); Matcher matcher = Matchers.getInstance().getMatcher(src.getRoot(), dst.getRoot()); matcher.match(); + src.importTypeLabels(dst); diffs = new HtmlDiffs(fSrc, fDst, src, dst, matcher); diffs.produce(); } diff --git a/client.diff/src/main/java/com/github/gumtreediff/client/diff/web/ScriptView.java b/client.diff/src/main/java/com/github/gumtreediff/client/diff/web/ScriptView.java index b161372a7..ebc857a15 100644 --- a/client.diff/src/main/java/com/github/gumtreediff/client/diff/web/ScriptView.java +++ b/client.diff/src/main/java/com/github/gumtreediff/client/diff/web/ScriptView.java @@ -60,6 +60,7 @@ public ScriptView(File fSrc, File fDst) throws IOException { dst = Generators.getInstance().getTree(fDst.getAbsolutePath()); Matcher matcher = Matchers.getInstance().getMatcher(src.getRoot(), dst.getRoot()); matcher.match(); + src.importTypeLabels(dst); mappings = matcher.getMappings(); ActionGenerator g = new ActionGenerator(src.getRoot(), dst.getRoot(), mappings); g.generate(); diff --git a/core/src/main/java/com/github/gumtreediff/tree/TreeContext.java b/core/src/main/java/com/github/gumtreediff/tree/TreeContext.java index 411367846..22315ccda 100644 --- a/core/src/main/java/com/github/gumtreediff/tree/TreeContext.java +++ b/core/src/main/java/com/github/gumtreediff/tree/TreeContext.java @@ -73,6 +73,14 @@ else if (!typeLabel.equals(name)) throw new RuntimeException(String.format("Redefining type %d: '%s' with '%s'", type, typeLabel, name)); } + public void importTypeLabels(TreeContext ctx) { + for (Map.Entry label : ctx.typeLabels.entrySet()) { + if (!typeLabels.containsValue(label.getValue())) { + typeLabels.put(label.getKey(), label.getValue()); + } + } + } + public ITree createTree(int type, String label, String typeLabel) { registerTypeLabel(type, typeLabel); return new Tree(type, label);