diff options
author | Evgeny Mandrikov <Godin@users.noreply.github.com> | 2017-04-22 12:39:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-22 12:39:30 +0200 |
commit | e93053e8a54540f5394fe0938752f7421e2222ad (patch) | |
tree | d2c14bfed5730c09125531404c669b6a7e006375 /org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java | |
parent | 0e72710a54657200a17ade56501463294860baff (diff) | |
download | jacoco-e93053e8a54540f5394fe0938752f7421e2222ad.tar.gz |
Add filter for try-with-resources statement (#500)
Diffstat (limited to 'org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java')
-rw-r--r-- | org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java | 39 |
1 files changed, 11 insertions, 28 deletions
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java index 655226e7..eec00948 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java @@ -38,9 +38,8 @@ public final class SynchronizedFilter implements IFilter { } } - private static class Matcher { + private static class Matcher extends AbstractMatcher { private final AbstractInsnNode start; - private AbstractInsnNode cursor; private Matcher(final AbstractInsnNode start) { this.start = start; @@ -55,36 +54,20 @@ public final class SynchronizedFilter implements IFilter { private boolean nextIsJavac() { cursor = start; - return nextIs(Opcodes.ASTORE) && nextIs(Opcodes.ALOAD) - && nextIs(Opcodes.MONITOREXIT) && nextIs(Opcodes.ALOAD) - && nextIs(Opcodes.ATHROW); + nextIsVar(Opcodes.ASTORE, "t"); + nextIs(Opcodes.ALOAD); + nextIs(Opcodes.MONITOREXIT); + nextIsVar(Opcodes.ALOAD, "t"); + nextIs(Opcodes.ATHROW); + return cursor != null; } private boolean nextIsEcj() { cursor = start; - return nextIs(Opcodes.ALOAD) && nextIs(Opcodes.MONITOREXIT) - && nextIs(Opcodes.ATHROW); - } - - /** - * Moves {@link #cursor} to next instruction and returns - * <code>true</code> if it has given opcode. - */ - private boolean nextIs(int opcode) { - next(); - return cursor != null && cursor.getOpcode() == opcode; - } - - /** - * Moves {@link #cursor} to next instruction. - */ - private void next() { - do { - cursor = cursor.getNext(); - } while (cursor != null - && (cursor.getType() == AbstractInsnNode.FRAME - || cursor.getType() == AbstractInsnNode.LABEL - || cursor.getType() == AbstractInsnNode.LINE)); + nextIs(Opcodes.ALOAD); + nextIs(Opcodes.MONITOREXIT); + nextIs(Opcodes.ATHROW); + return cursor != null; } } |