// assign to final
import java.io.*;
public class a21 {
final int fi;
{
fi = 4;
}
void f1(int i) {
final int j = 4;
j = 3;
}
void f2(final int i) {
final int j = 4;
i = 3;
}
void f3( int ip) {
fi = 3;
for (final int i = 0; i<3; i++) {
int k = 4;
}
final int i1 = 0;
i1++;
--i1;
int i2 = -i1 + ~i1;
final int j = (j=0) == 1 || j==0 ? 9 : j;
}
static final boolean DEBUG = false;
void f4() {
if (DEBUG && (fi < 3 || fi >4)) return;
}
void f5(final int i) {
(i) = 1;
}
void f6(final int i) {
(i)++;
}
void f7(final int i) {
++(i);
}
}
class B extends a21 {
public B() {
fi = 0;
}
void f() {
final Integer i;
new Runnable() {
public void run() {
i = new Integer(4);
}
};
}
}
class a21_2 {
final int i;
a21_2() {
i = 0;
new Runnable() {
public void run() {
i = 0;
}
};
}
}
class Foo {
private final Foo next;
public Foo(Foo previous) {
this.next = null;
if (previous != null) {
previous.next = this;
}
}
}
class T1 {
private final int i1;
private final int i2;
private final int i3;
private final int i4;
{
(i1)++;
++(i2);
i3 += 1;
(i4) = 1;
()++;
}
}
class T3 {
private final boolean b;
{
assert false : "" + (b = true); // if assignment reachable, assert will not complete normally
b = true; // compiles
System.out.println(b);
}
}
class T3a {
private final boolean b;
{
try {
assert false : "" + (b = true);
}
catch(IllegalArgumentException t) {}
b = true; // red
System.out.println(b);
}
}
class T29 {
// IDEA-186306
private final int j;
T29 (int b) {
do {
j = 34; // guaranteed to only be executed once
if (true) break;
} while (b == 1);
}
}
class T29a {
private final int j;
T29a (int b) {
do {
j = 34; // not guaranteed by JLS to only be executed once
if (j > 0) break;
} while (b == 1);
}
}
class TX {
private final int i;
private final int j;
private final int k;
TX() {
(i) = 1;
(i) = 1;
(j) = 1;
(j)++;
(k)++;
}
}
// IDEA-186321
class ForLoop {
private final int i;
{
i = 1;
for(;;i = 2, i = 3) {
break;
}
}
private final int j;
{
for(;;j = 2) {
j = 1;
break;
}
}
}
// IDEA-186305
class Asserts {
final int x;
{
x = 1;
assert true : x = 2;
}
final int x1;
{
x1 = 1;
assert false : x1 = 2;
}
final int y;
{
try {
assert true : y = 2;
}
catch (Throwable t) {}
// javac accepts this, though this looks strange
y = 1;
}
final int y1;
{
try {
assert false : y1 = 2;
}
catch (Throwable t) {}
y1 = 1;
}
}
// IDEA-186304
class IncrementInUnreachableBranch {
private final int i;
{
if (true) {
i = 2;
} else {
System.out.println(i); // unreachable
i++;
}
}
private final int j;
{
if (true) {
j = 2;
} else {
System.out.println(j); // unreachable
j = j + 1;
}
}
}
class AssignmentInUnreachablePolyadic {
private final boolean b;
{
if (false && (b = false)) ;
if (true && (b = false)) ;
}
private final boolean bb;
{
if (false && (bb = false) && (bb = true)) ;
}
private final boolean bbb;
{
if (false && (bbb = true)) {
} else {
bbb = false;
}
}
private final boolean bbbb;
{
if (false && (bbbb = false) && (bbbb = true)) ;
else if (true && (bbbb = false)) ;
}
}
class QualifiedThis {
final int x;
QualifiedThis() {
QualifiedThis.this.x = 5;
this.x = 5;
}
}
class ParenthesizedThis {
final int x;
final int y = (this).x + 1;
ParenthesizedThis() {
(this).x = 5; // javac disallows this -- probably a bug in javac
this.x = 6;
}
}
class NestedSwitch {
public static void main(String[] args) {
for(int i = 0; i < 8; i++) {
switch (i) {
case 0:
break;
default:
switch (i+1) {
default:
final int var;
var++;
}
}
}
}
}