aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java
diff options
context:
space:
mode:
authorEvgeny Mandrikov <Godin@users.noreply.github.com>2017-04-22 12:39:30 +0200
committerGitHub <noreply@github.com>2017-04-22 12:39:30 +0200
commite93053e8a54540f5394fe0938752f7421e2222ad (patch)
treed2c14bfed5730c09125531404c669b6a7e006375 /org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java
parent0e72710a54657200a17ade56501463294860baff (diff)
downloadjacoco-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.java39
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;
}
}