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