`wire[ConcreteObjectExtendsTrait.ClassDefinedInTrait]` is being treated as `wire[Trait.ClassDefinedInTrait]`
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
Research direction
Start by reproducing both examples from the issue and compare the behavior of wire with the provided wireWith workaround. Trace how wire resolves ConcreteObject.Klass and its dependency types; done means the concrete nested types are preserved and both examples compile without the workaround.
Written by the indexing model from the issue text.
Description
trait ObjectMixIn {
class Klass()
}
object ConcreteObject extends ObjectMixIn
class App {
lazy val klass: ConcreteObject.Klass = wire[ConcreteObject.Klass]
}
Fails compilation with
Error:(10, 46) type mismatch;
found : ObjectMixIn.this.Klass
required: ConcreteObject.Klass
lazy val klass: ConcreteObject.Klass = wire[ConcreteObject.Klass]
The macro is returning the (abstract) ObjectMixIn.this.Klasss type rather than the concrete ConcreteObject.Klass
And
trait ObjectMixIn {
class Depedency
class Klass(depedency: Depedency)
}
object ConcreteObject extends ObjectMixIn
class App {
lazy val depedency: ConcreteObject.Depedency = new ConcreteObject.Depedency
lazy val klass = wire[ConcreteObject.Klass]
}
Fails compilation with
Error:(12, 24) Cannot find a value of type: [ObjectMixIn.this.Depedency]
lazy val klass = wire[ConcreteObject.Klass]
So, in this case, it appears that wire is looking for as ObjectMixIn.this.Depedency rather than ConcreteObject.Dependency (and thus isn't finding it)
Described in the general case, it appears that wire[ConcreteObjectExtendsTrait.ClassDefinedInTrait] is being treated as wire[Trait.ClassDefinedInTrait]
My current workaround is to use wireWith, which seems to pull in the full, concrete-type correctly
trait ObjectMixIn {
class Klass()
object Klass {
def apply() = new Klass()
}
}
object ConcreteObject extends ObjectMixIn
class App {
lazy val klass: ConcreteObject.Klass = wireWith(ConcreteObject.Klass.apply _)
}
Thankfully, this works without adding too much boilerplate
- Dominant language
- Scala
- Stars
- 1.3k
- Forks
- 77
- Avg merge
- 9m
- Merged PRs (30d)
- 4
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from softwaremill/macwire
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
softwaremill/macwire#412 · 3 comments ·
-
Difficulty 4/5 3-5 days Newbie friendliness 25/100
softwaremill/macwire#391 · 1 comment ·
-
Difficulty 5/5 Over a week Newbie friendliness 20/100
softwaremill/macwire#301 · 2 comments ·
-
Difficulty 5/5 Over a week Newbie friendliness 20/100
softwaremill/macwire#281 · 5 comments ·
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
softwaremill/macwire#278 · 3 comments ·
All issues in softwaremill/macwire
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
ergoplatform/ergodocs#614 ·
-
area:ci enhancement requires-triage
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
apache/datafusion-comet#6078 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
-
[VL] madvise(WILLNEED) call fails in MmapFileStream because of wrong calculation of fetching length Openbug triage
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
chipsalliance/rocket-chip#3831 ·