Skip to content

Fix type inferencing for outer class type parameter references #1369

@eric-milles

Description

@eric-milles

Consider the following (GROOVY-10646 excerpt):

interface Output<T> {
  T getT()
}
abstract class WhereDSL<Type> {
  abstract Type where()
}
abstract class Input<T> extends WhereDSL<ReferencesOuterClassTP> {
  class ReferencesOuterClassTP implements Output<T> {
    @Override T getT() {
      return null
    }
  }
}

class Model {
}

void m(Input<Model> input) {
  def output = input.where()
  def result = output.getT()
  //  ^^^^^^ expect Model
}

Override method getT() makes reference to outer class type parameter T. "output" infers as ReferencesOuterClassTP but "result" does not infer as Model.

image

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions