From c0aebe4aec6b0a5661d6e1ea51b56c9bb03f72b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Lars=C3=A9n?= Date: Sun, 15 Mar 2020 17:15:06 +0100 Subject: [PATCH] [fix] Properly merge implicitness of values #43 --- src/main/java/se/kth/spork/spoon/Spoon3dmMerge.java | 12 ++++++++++++ .../clean/both_modified/implicitness/Base.java | 5 +++++ .../clean/both_modified/implicitness/Expected.java | 6 ++++++ .../clean/both_modified/implicitness/Left.java | 6 ++++++ .../clean/both_modified/implicitness/Right.java | 6 ++++++ 5 files changed, 35 insertions(+) create mode 100644 src/test/resources/clean/both_modified/implicitness/Base.java create mode 100644 src/test/resources/clean/both_modified/implicitness/Expected.java create mode 100644 src/test/resources/clean/both_modified/implicitness/Left.java create mode 100644 src/test/resources/clean/both_modified/implicitness/Right.java diff --git a/src/main/java/se/kth/spork/spoon/Spoon3dmMerge.java b/src/main/java/se/kth/spork/spoon/Spoon3dmMerge.java index 6ea92b9b..8a7f974d 100644 --- a/src/main/java/se/kth/spork/spoon/Spoon3dmMerge.java +++ b/src/main/java/se/kth/spork/spoon/Spoon3dmMerge.java @@ -172,6 +172,10 @@ public RoledValues apply(SpoonNode wrapper) { CtElement elem = wrapper.getElement(); RoledValues rvs = new RoledValues(); + // general values + rvs.add(CtRole.IS_IMPLICIT, elem.isImplicit()); + + // element-specific values if (elem instanceof CtLiteral) { CtLiteral lit = (CtLiteral) elem; rvs.add(CtRole.VALUE, lit.getValue()); @@ -263,6 +267,14 @@ private static void handleContentConflicts(TStar delta) break; case COMMENT_CONTENT: merged = mergeComments(baseValOpt.orElse(""), leftVal, rightVal); + break; + case IS_IMPLICIT: + if (baseValOpt.isPresent()) { + merged = Optional.of(!(Boolean) baseValOpt.get()); + } else { + // when in doubt, discard implicitness + merged = Optional.of(false); + } default: // pass } diff --git a/src/test/resources/clean/both_modified/implicitness/Base.java b/src/test/resources/clean/both_modified/implicitness/Base.java new file mode 100644 index 00000000..0497f3bf --- /dev/null +++ b/src/test/resources/clean/both_modified/implicitness/Base.java @@ -0,0 +1,5 @@ +class Cls { + public static void main(String[] args) { + System.out.println(args); + } +} \ No newline at end of file diff --git a/src/test/resources/clean/both_modified/implicitness/Expected.java b/src/test/resources/clean/both_modified/implicitness/Expected.java new file mode 100644 index 00000000..0698e2c8 --- /dev/null +++ b/src/test/resources/clean/both_modified/implicitness/Expected.java @@ -0,0 +1,6 @@ +class Cls { + public static void main(String[] args) { + java.lang.String s = args[0]; + System.out.println(s); + } +} \ No newline at end of file diff --git a/src/test/resources/clean/both_modified/implicitness/Left.java b/src/test/resources/clean/both_modified/implicitness/Left.java new file mode 100644 index 00000000..6f088f8e --- /dev/null +++ b/src/test/resources/clean/both_modified/implicitness/Left.java @@ -0,0 +1,6 @@ +class Cls { + public static void main(String[] args) { + String s = args[0]; + System.out.println(s); + } +} \ No newline at end of file diff --git a/src/test/resources/clean/both_modified/implicitness/Right.java b/src/test/resources/clean/both_modified/implicitness/Right.java new file mode 100644 index 00000000..0698e2c8 --- /dev/null +++ b/src/test/resources/clean/both_modified/implicitness/Right.java @@ -0,0 +1,6 @@ +class Cls { + public static void main(String[] args) { + java.lang.String s = args[0]; + System.out.println(s); + } +} \ No newline at end of file