eclipse-xtext / eclipse-xtext/xtext

type error for double arrow operator

Open
#2,302 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug confirmed
Dominant language
Java
Stars
831
Forks
330
Avg merge
3d 7h
Merged PRs (30d)
12

Description

class MySup { 
    
}

class MySub extends MySup{
    
}

class LazyExtension {
    def <T> T lazy(T t, ()=>T init) {
        var result = t
        if(result==null)
            result = init.apply()
        return result
    }
}

class TestLazy{
    extension LazyExtension  = new LazyExtension()
    MySup o
    def MySup testLazy() {
        return o.lazy[
//            val  a =  new MySub()=>[]
//            return a
            return new MySub()=>[] 
        ]
    }
}

Now the generated Java code has a compilation error in the type cast:

public class TestLazy {
  @Extension
  private LazyExtension _lazyExtension = new LazyExtension();
  
  private MySup o;
  
  public MySup testLazy() {
    final Function0<MySup> _function = () -> {
      MySub _mySub = new MySub();
      final Procedure1<MySub> _function_1 = (MySub it) -> {
      };
      final Procedure1<MySub> _final_function_1 = _function_1;
      return ObjectExtensions.<MySup>operator_doubleArrow(_mySub, ((Procedure1<? super MySup>)_final_function_1));
    };
    return this._lazyExtension.<MySup>lazy(this.o, _function);
  }
}
 return new MySub()=>[] 

should have worked, but it is now worked around by:

          val  a =  new MySub()=>[]
          return a

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the Java reproducer and the generated TestLazy.testLazy output, focusing on the double arrow operator and the cast to Procedure1<? super MySup>. Compare this with the working local-variable variant; done means the direct return new MySub() => [] generates Java that compiles without the type error.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.