If CPD is determining which files to analyze, it also uses symbolic links. Furthermore if symbolic links are broken, they fail afterwards, when CPD tries to load the code ("FileNotFoundException").
Stacktrace:
java.io.FileNotFoundException: /path/to/symlink.h (No such file or directory) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:137) at net.sourceforge.pmd.cpd.SourceCode$FileCodeLoader.getReader(SourceCode.java:70) at net.sourceforge.pmd.cpd.SourceCode$CodeLoader.load(SourceCode.java:43) at net.sourceforge.pmd.cpd.SourceCode$CodeLoader.getCode(SourceCode.java:32) at net.sourceforge.pmd.cpd.SourceCode.getCodeBuffer(SourceCode.java:118) at net.sourceforge.pmd.cpd.CPPTokenizer.tokenize(CPPTokenizer.java:18) at net.sourceforge.pmd.cpd.CPD.add(CPD.java:103) at net.sourceforge.pmd.cpd.CPD.add(CPD.java:69) at net.sourceforge.pmd.cpd.CPD.addDirectory(CPD.java:79) at net.sourceforge.pmd.cpd.CPD.addRecursively(CPD.java:64) at net.sourceforge.pmd.cpd.CPD.main(CPD.java:143) java.lang.RuntimeException: Problem while reading /path/to/symlink.h:/path/to/symlink.h (No such file or directory) at net.sourceforge.pmd.cpd.SourceCode$CodeLoader.load(SourceCode.java:52) at net.sourceforge.pmd.cpd.SourceCode$CodeLoader.getCode(SourceCode.java:32) at net.sourceforge.pmd.cpd.SourceCode.getCodeBuffer(SourceCode.java:118) at net.sourceforge.pmd.cpd.CPPTokenizer.tokenize(CPPTokenizer.java:18) at net.sourceforge.pmd.cpd.CPD.add(CPD.java:103) at net.sourceforge.pmd.cpd.CPD.add(CPD.java:69) at net.sourceforge.pmd.cpd.CPD.addDirectory(CPD.java:79) at net.sourceforge.pmd.cpd.CPD.addRecursively(CPD.java:64) at net.sourceforge.pmd.cpd.CPD.main(CPD.java:143)
Now on my Windows 7 system all(!) source files are skipped "since it appears to be a symlink" :-(
Alright, I see the problem. I unfortunately assumed that an operating system would use case sensitive file systems by default and would support symbolic links - unfortunately Windows does neither.
However, I have a simple workaround for you: When specifying the path to the directory, that CPD should scan, please specify an absolute, and in the java way canonoized pathname - this means, make sure to use an upper case drive letter, and resolve all "." and ".." relative path names, e.g.
instead of
I have created a follow-up bug that will be fixed for 5.0.4:
https://sourceforge.net/p/pmd/bugs/1081/