Not if you are talking about compilable java code, because as the article explains, there are things you can express in byte code which you can simply not express in java source code.
if (!new Exception().getStackTrace().getSha1sum().startsWith("0000")) alert("hello decompiler")
Your comment about java and turing completeness doesn't make sense unless you want the decompiler to basically output a java implementation of a JVM?