Skip to content

Var Recipes error on Unbounded or Generic Type Parameter #257

@MBoegers

Description

@MBoegers

What version of OpenRewrite are you using?

I am using Moderne.io, current.

How are you running OpenRewrite?

I am using Moderne.io and triggered UseVar Recipe.
And discovered the problem in various Spring Projects like spring-shell

What is the smallest, simplest way to reproduce the problem?

class A {
    static <T> void generic() {
        List<T> lst = new ArrayList<>();
    }
    void unbound() {
        List<?> lst = new ArrayList<>();
    }
    void inception() {
        List<List<Object>> lst = new ArrayList<>();
    }
}

What did you expect to see?

class A {
  static <T> void generic() {
      var lst = new ArrayList<T>();
  }
  void unbound() {
      var lst = new ArrayList<>();
  }
  void inception() {
      var lst = new ArrayList<List<Object>>();
  }
}

What did you see instead?

Generic

class org.openrewrite.java.tree.JavaType$GenericTypeVariable cannot be cast to class org.openrewrite.java.tree.JavaType$Class (org.openrewrite.java.tree.JavaType$GenericTypeVariable and org.openrewrite.java.tree.JavaType$Class are in unnamed module of loader 'app')

Unbound

class org.openrewrite.java.tree.JavaType$GenericTypeVariable cannot be cast to class org.openrewrite.java.tree.JavaType$Class (org.openrewrite.java.tree.JavaType$GenericTypeVariable and org.openrewrite.java.tree.JavaType$Class are in unnamed module of loader 'app')

Inception

class org.openrewrite.java.tree.JavaType$Parameterized cannot be cast to class org.openrewrite.java.tree.JavaType$Class (org.openrewrite.java.tree.JavaType$Parameterized and org.openrewrite.java.tree.JavaType$Class are in unnamed module of loader 'app')

What is the full stack trace of any errors you encountered?

Generic

java.lang.ClassCastException: class org.openrewrite.java.tree.JavaType$GenericTypeVariable cannot be cast to class org.openrewrite.java.tree.JavaType$Class (org.openrewrite.java.tree.JavaType$GenericTypeVariable and org.openrewrite.java.tree.JavaType$Class are in unnamed module of loader 'app')
org.openrewrite.java.migrate.lang.var.UseVarForGenericsConstructors$UseVarForGenericsVisitor.lambda$transformToVar$0(UseVarForGenericsConstructors.java:121)
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
...

Unbound

java.lang.ClassCastException: class org.openrewrite.java.tree.JavaType$GenericTypeVariable cannot be cast to class org.openrewrite.java.tree.JavaType$Class (org.openrewrite.java.tree.JavaType$GenericTypeVariable and org.openrewrite.java.tree.JavaType$Class are in unnamed module of loader 'app')
org.openrewrite.java.migrate.lang.var.UseVarForGenericsConstructors$UseVarForGenericsVisitor.lambda$transformToVar$0(UseVarForGenericsConstructors.java:121)
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
...

Inception

java.lang.ClassCastException: class org.openrewrite.java.tree.JavaType$Parameterized cannot be cast to class org.openrewrite.java.tree.JavaType$Class (org.openrewrite.java.tree.JavaType$Parameterized and org.openrewrite.java.tree.JavaType$Class are in unnamed module of loader 'app')
org.openrewrite.java.migrate.lang.var.UseVarForGenericsConstructors$UseVarForGenericsVisitor.lambda$transformToVar$0(UseVarForGenericsConstructors.java:121)
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
...

Are you interested in contributing a fix to OpenRewrite?

yup.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions