openrewrite / rewrite-kotlin

Work-in-progress implementation of Kotlin language support for OpenRewrite.
Apache License 2.0
38 stars 12 forks source link

Error on quoted identifier #296

Closed knutwannheden closed 8 months ago

knutwannheden commented 10 months ago
    @Test
    void quotedIdentifier() {
        rewriteRun(
          kotlin(
            """
              val c = `Any`::class
              """
          )
        );
    }

results in:

java.lang.NullPointerException
    at org.openrewrite.kotlin.internal.KotlinParserVisitor.visitGetClassCall(KotlinParserVisitor.kt:1899)
    at org.openrewrite.kotlin.internal.KotlinParserVisitor.visitElement0(KotlinParserVisitor.kt:4548)
    at org.openrewrite.kotlin.internal.KotlinParserVisitor.visitElement(KotlinParserVisitor.kt:4509)
    at org.openrewrite.kotlin.internal.KotlinParserVisitor.convertToExpression(KotlinParserVisitor.kt:4945)
    at org.openrewrite.kotlin.internal.KotlinParserVisitor.visitProperty(KotlinParserVisitor.kt:2085)
    at org.openrewrite.kotlin.internal.KotlinParserVisitor.visitElement0(KotlinParserVisitor.kt:4552)
    at org.openrewrite.kotlin.internal.KotlinParserVisitor.visitElement(KotlinParserVisitor.kt:4509)
    at org.openrewrite.kotlin.internal.KotlinParserVisitor.visitFile(KotlinParserVisitor.kt:166)
    at org.openrewrite.kotlin.KotlinParser.lambda$parseInputs$3(KotlinParser.java:176)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)
    at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
    at org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:272)
traceyyoshima commented 9 months ago

I looked into this, and the error is caused by an issue in visitResolvedQualifier. The FirResolvedQualifier#packageFqName is returned as kotlin for Any, which causes a parsing error.

This should be fixed without changes in the PSI based parser.

traceyyoshima commented 8 months ago

Fixed in PSI parser