rikvdkleij / intellij-haskell

IntelliJ plugin for Haskell
https://rikvdkleij.github.io/intellij-haskell/
Apache License 2.0
1.31k stars 96 forks source link

java.lang.IllegalArgumentException #643

Open extesy opened 3 years ago

extesy commented 3 years ago

Plugin version: 1.0.0-beta85

Stacktrace:

java.lang.IllegalArgumentException: Argument for @NotNull parameter 'endElement' of com/intellij/codeInspection/ProblemDescriptorBase.<init> must not be null
    at com.intellij.codeInspection.ProblemDescriptorBase.$$$reportNull$$$0(ProblemDescriptorBase.java)
    at com.intellij.codeInspection.ProblemDescriptorBase.<init>(ProblemDescriptorBase.java)
    at intellij.haskell.inspection.HLintInspectionTool.$anonfun$checkFile$6(HLintInspectionTool.scala:96)
    at scala.Option.map(Option.scala:242)
    at intellij.haskell.inspection.HLintInspectionTool.$anonfun$checkFile$5(HLintInspectionTool.scala:74)
    at scala.collection.Iterator$$anon$10.nextCur(Iterator.scala:585)
    at scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:599)
    at scala.collection.immutable.List.prependedAll(List.scala:152)
    at scala.collection.immutable.List$.from(List.scala:651)
    at scala.collection.immutable.List$.from(List.scala:648)
    at scala.collection.IterableOps$WithFilter.flatMap(Iterable.scala:888)
    at intellij.haskell.inspection.HLintInspectionTool.checkFile(HLintInspectionTool.scala:71)
    at com.intellij.codeInspection.LocalInspectionTool$1.visitFile(LocalInspectionTool.java:145)
    at com.intellij.extapi.psi.PsiFileBase.accept(PsiFileBase.java:60)
    at com.intellij.codeInspection.InspectionEngine.acceptElements(InspectionEngine.java:65)
    at com.intellij.codeInspection.InspectionEngine.createVisitorAndAcceptElements(InspectionEngine.java:56)
    at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.runToolOnElements(LocalInspectionsPass.java:309)
    at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.lambda$visitPriorityElementsAndInit$3(LocalInspectionsPass.java:275)
    at com.intellij.codeInspection.ex.InspectionEventsKt.reportWhenInspectionFinished(inspectionEvents.kt:9)
    at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.lambda$visitPriorityElementsAndInit$4(LocalInspectionsPass.java:270)
    at com.intellij.util.AstLoadingFilter.forceAllowTreeLoading(AstLoadingFilter.java:156)
    at com.intellij.util.AstLoadingFilter.forceAllowTreeLoading(AstLoadingFilter.java:148)
    at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.lambda$visitPriorityElementsAndInit$5(LocalInspectionsPass.java:266)
    at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:127)
    at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:116)
    at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.lambda$visitPriorityElementsAndInit$6(LocalInspectionsPass.java:266)
    at com.intellij.concurrency.ApplierCompleter.execAndForkSubTasks(ApplierCompleter.java:136)
    at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1097)
    at com.intellij.concurrency.ApplierCompleter.lambda$wrapInReadActionAndIndicator$1(ApplierCompleter.java:92)
    at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:688)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:634)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:63)
    at com.intellij.concurrency.ApplierCompleter.wrapInReadActionAndIndicator(ApplierCompleter.java:104)
    at com.intellij.concurrency.ApplierCompleter.lambda$compute$0(ApplierCompleter.java:83)
    at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:167)
    at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:178)
    at com.intellij.concurrency.ApplierCompleter.compute(ApplierCompleter.java:83)
    at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

The code that triggers it:

module Main where

main :: IO ()
main = do
  input <- readInput
  print $ sum2To2020 input
  print $ sum3To2020 input

readInput :: IO [Int]
readInput = do
  fileContent <- readFile "1.input" --[1721, 979, 366, 299, 675, 1456]
  let fileLines = map read . lines $ fileContent
  return fileLines

sum2To2020 :: [Int] -> Int
--sum2To2020 list = head [i * j | i <- list, j <- list, i + j == 2020]
sum2To2020 list = head [i * j | (i:j:[]) <- subsequencesOfSize 2 list, i + j == 2020]

sum3To2020 :: [Int] -> Int
--sum3To2020 list = head [i * j * k | i <- list, j <- list, k <- list, i + j + k == 2020]
sum3To2020 list = head [i * j * k | (i:j:k:[]) <- subsequencesOfSize 3 list, i + j + k == 2020]

chooseK :: Int -> [a] -> [[a]]
chooseK 0  _     = [[]]
chooseK _ []     =  []
chooseK k (x:xs) = map (x:) (chooseK (k-1) xs) ++ chooseK k xs

subsequencesOfSize :: Int -> [a] -> [[a]]
subsequencesOfSize n xs = let l = length xs
                          in if n>l then [] else subsequencesBySize xs !! (l-n)
  where
    subsequencesBySize :: [a] -> [[[a]]]
    subsequencesBySize [] = [[[]]]
    subsequencesBySize (x:xs) = let next = subsequencesBySize xs                        -- [         s3,   s2,   s1 ]
                                    prependHead = map (x:)
                                    prependHeadToSubElements = map prependHead
                                    withoutHead = [[]] ++ next                          -- [ [[]],   s3,   s2,   s1 ]
                                    withHead = prependHeadToSubElements next ++ [[]]    -- [ x:s3, x:s2, x:s1, [[]] ]
                                in zipWith (++) withoutHead withHead
rikvdkleij commented 3 years ago

Thanks for reporting!