HabchiSarra / SmellDetector

GNU Affero General Public License v3.0
3 stars 1 forks source link

[tazapp] NullPointerException on Class processor. #15

Closed aveuiller closed 5 years ago

aveuiller commented 5 years ago

While analyzing woffs/tazapp-android we stumble into an unknown java file path in our ClassProcessor:

java.lang.NullPointerException
    at fr.inria.sniffer.detector.analyzer.ClassProcessor.process(ClassProcessor.java:41)
    at fr.inria.sniffer.detector.analyzer.ClassProcessor.process(ClassProcessor.java:25)
    at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:70)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:165)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:139)
    at spoon.reflect.visitor.CtScanner.visitCtPackage(CtScanner.java:641)
    at spoon.support.reflect.declaration.CtPackageImpl.accept(CtPackageImpl.java:86)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:173)
    at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:66)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:165)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:139)
    at spoon.reflect.visitor.CtScanner.visitCtPackage(CtScanner.java:640)
    at spoon.support.reflect.declaration.CtPackageImpl.accept(CtPackageImpl.java:86)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:173)
    at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:66)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:165)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:139)
    at spoon.reflect.visitor.CtScanner.visitCtPackage(CtScanner.java:640)
    at spoon.support.reflect.declaration.CtPackageImpl.accept(CtPackageImpl.java:86)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:173)
    at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:66)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:165)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:139)
    at spoon.reflect.visitor.CtScanner.visitCtPackage(CtScanner.java:640)
    at spoon.support.reflect.declaration.CtPackageImpl.accept(CtPackageImpl.java:86)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:173)
    at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:66)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:165)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:139)
    at spoon.reflect.visitor.CtScanner.visitCtPackage(CtScanner.java:640)
    at spoon.support.reflect.declaration.CtPackageImpl.accept(CtPackageImpl.java:86)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:173)
    at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:66)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:165)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:139)
    at spoon.reflect.visitor.CtScanner.visitCtPackage(CtScanner.java:640)
    at spoon.support.reflect.declaration.CtPackageImpl.accept(CtPackageImpl.java:86)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:173)
    at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:66)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:165)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:139)
    at spoon.reflect.visitor.CtScanner.visitCtPackage(CtScanner.java:640)
    at spoon.support.reflect.declaration.CtPackageImpl.accept(CtPackageImpl.java:86)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:173)
    at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:66)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:165)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:139)
    at spoon.reflect.visitor.CtScanner.visitCtPackage(CtScanner.java:640)
    at spoon.support.reflect.declaration.CtPackageImpl.accept(CtPackageImpl.java:86)
    at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:173)
    at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:66)
    at spoon.support.QueueProcessingManager.process(QueueProcessingManager.java:118)
    at spoon.support.QueueProcessingManager.process(QueueProcessingManager.java:137)
    at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.process(JDTBasedSpoonCompiler.java:185)
    at spoon.Launcher.process(Launcher.java:770)
    at fr.inria.sniffer.detector.analyzer.MainProcessor.process(MainProcessor.java:59)
    at fr.inria.sniffer.detector.analyzer.Main.runAnalysis(Main.java:90)
    at fr.inria.sniffer.detector.analyzer.Main.main(Main.java:55)

This is the faulty call is ctType.getPosition().getFile() returning null in some cases.

This issue does not appear with some other projects and should be handled.

aveuiller commented 5 years ago

The class inner class ViewHolder of UserTocAdapter is created as a virtual input by JDT (hence no physical file). Could that be related to the fact that it is a public inner class ?

Cf. https://github.com/woffs/tazapp-android/blob/master/tazapp/src/main/java/de/thecode/android/tazreader/reader/usertoc/UserTocAdapter.java#L180

aveuiller commented 5 years ago

This issue is related to spoon apparently, tracked in https://github.com/INRIA/spoon/issues/3052