blob: 71498a3ea7621d98c0aaef2d1e06268a7715ed63 [file] [log] [blame]
package com.siyeh.igtest.performance;
import java.awt.Container;
import java.io.IOException;
public class TailRecursionInspection {
public TailRecursionInspection() {
}
public static int foo() throws IOException
{
return foo();
}
public int factorial(int val) {
return factorial(val, 1);
}
private int factorial(int val, int runningVal) {
if (val == 1) {
return runningVal;
} else {
return factorial(val - 1, runningVal * val);
}
}
private static boolean hasParent(Container child, Container parent) {
if (child == null) {
return false;
}
if (parent == null) {
return true;
}
if (child.getParent() == parent) {
return true;
}
return hasParent(child.getParent(), parent);
}
private TailRecursionInspection getRootSO() {
if (getParent() instanceof TailRecursionInspection)
{
return ((TailRecursionInspection) getParent()).getRootSO();
}
return this;
}
public Object getParent() {
return null;
}
}
class TailRecursion
{
private boolean duplicate;
private Something something;
private TailRecursion original;
public Something getSomething() {
if (something == null) {
if (isDuplicate()) {
final TailRecursion recursion = getOriginal();
return recursion.getSomething();
} else {
something = new Something();
}
}
return something;
}
public Something foo() {
if (!duplicate) {
return something;
} else {
return getOriginal().foo();
}
}
private TailRecursion getOriginal() {
return original;
}
private boolean isDuplicate() {
return duplicate;
}
public static class Something {}
}