1eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov/*******************************************************************************
2b9d1b54e300318b470d9fedccc69d75187016444Evgeny Mandrikov * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
3eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov * All rights reserved. This program and the accompanying materials
4eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov * are made available under the terms of the Eclipse Public License v1.0
5eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov * which accompanies this distribution, and is available at
6eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov * http://www.eclipse.org/legal/epl-v10.html
7eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov *
8eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov * Contributors:
9eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov *    Evgeny Mandrikov - initial API and implementation
10eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov *
11eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov *******************************************************************************/
12eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikovpackage org.jacoco.core.test.filter.targets;
13eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
14eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikovimport static org.jacoco.core.test.validation.targets.Stubs.ex;
15eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikovimport static org.jacoco.core.test.validation.targets.Stubs.nop;
16eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
17eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikovimport org.jacoco.core.test.validation.targets.Stubs.StubException;
18eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
19eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov/**
20eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov * This test target is a synchronized statement.
21eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov */
22eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikovpublic class Synchronized {
23eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
24eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov	private static final Object lock = new Object();
25eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
26eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov	private static void normal() {
27eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		nop(); // $line-before$
28eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		synchronized (lock) { // $line-monitorEnter$
29eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov			nop(); // $line-body$
30eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		} // $line-monitorExit$
31eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		nop(); // $line-after$
32eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov	}
33eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
34eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov	private static void explicitException() {
35eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		synchronized (lock) { // $line-explicitException.monitorEnter$
36eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov			throw new StubException(); // $line-explicitException.exception$
37eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		} // $line-explicitException.monitorExit$
38eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov	}
39eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
40eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov	private static void implicitException() {
41eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		synchronized (lock) { // $line-implicitException.monitorEnter$
42eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov			ex(); // $line-implicitException.exception$
43eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		} // $line-implicitException.monitorExit$
44eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov	}
45eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
46eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov	public static void main(String[] args) {
47eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		normal();
48eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
49eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		try {
50eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov			explicitException();
51eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		} catch (StubException e) {
52eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		}
53eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
54eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		try {
55eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov			implicitException();
56eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		} catch (StubException e) {
57eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov		}
58eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov	}
59eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
60eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov}
61