package foo;
class Fruit {
private int value;
public class Seed { // Noncompliant [[sc=16;ec=20]]{{Make this a "static" inner class.}}
int germinationDays = 0;
public Seed(int germinationDays) {
this.germinationDays = germinationDays;
}
public int getGerminationDays() {
return germinationDays;
}
public class SeedI { // Compliant, inner classes cannot be static
int germinationDays = 0;
public SeedI(int germinationDays) {
this.germinationDays = germinationDays;
}
public int getGerminationDays() {
return germinationDays;
}
}
}
public static class StaticSeed {
int germinationDays = 0;
public StaticSeed(int germinationDays) {
this.germinationDays = germinationDays;
}
public int getGerminationDays() {
return germinationDays;
}
public static class StaticSeedI {
int germinationDays = 0;
public StaticSeedI(int germinationDays) {
this.germinationDays = germinationDays;
}
public int getGerminationDays() {
return germinationDays;
}
}
public class StaticSeedI2 { // Noncompliant {{Make this a "static" inner class.}}
}
}
public class Referencing {
public Referencing() {
value = 5;
}
public class ReferencingI {
public ReferencingI() {
value = 5;
}
}
}
public class Referencing2 {
public Referencing2() {
Fruit.this.value = 6;
}
public class Referencing2I {
public Referencing2I() {
Fruit.this.value = 6;
}
}
}
public class Referencing3 {
public void method() {
instance.toString(); // coverage
new Referencing2(); // Referencing2 accesses instance
}
}
private void fun() {
foo:
for (int i = 0; i < value; i++) {
continue foo;
}
Fruit fruit = new Fruit() { // compliant, we ignore anonymous classes
};
}
private static final Fruit.StaticSeed instance = new Fruit.StaticSeed(5){
};
public interface Interface {
}
public void noncompliant() {
class Seed implements Interface { // Noncompliant
public void foo() {
return;
}
}
Interface inter = new Interface() { // compliant, we ignore anonymous classes
public void foo() {
return;
}
};
}
}
public class Bar {
public int plop() {return 1;}
}
public class A {
private int fielda;
class B { // Compliant inner class refers to field.
Bar foo() {
return new String() {
public String toString() { return ""+fielda;}
};
}
}
class C { // Noncompliant
Object foo() {
return new Object();
}
}
class SubB extends B { // Compliant since super class is not static
Object foo() {
return new Object();
}
}
class SubSubB extends SubB { // Compliant since super class is not static
Object foo() {
return new Object();
}
}
class InnerObject extends Object { // Noncompliant
}
class InnerArrayList extends java.util.ArrayList<String> { // Noncompliant
}
}
public class Extendable {
protected int field;
}
public class Foo extends Extendable {
class Inner { // Compliant field is refered.
void plop(){
System.out.println(field);
}
}
}
public class A1 {
private int field;
class B { // Noncompliant
int foo;
class C {
Bar foo() {
return new String() {
public String toString() {
return "" + foo;
}
};
}
}
}
void usedInAnonymousClass() {
final String myString = "";
method(new toImplement() { // Compliant my String is used.
void fun(String s) {
myString.length();
}
});
}
interface toImplement {
void fun(String s);
}
void method(Object j) {}
}
class A2 extends A3 {
A2(Object o){}
}
class A3 {
class Inner extends A2 {
public Inner() {
super(A3.this);
}
}
}