RFR: JDK-8193367: Annotated type variable bounds crash javac
    B. Blaser 
    bsrbnd at gmail.com
       
    Thu Jan 24 15:49:36 UTC 2019
    
    
  
On Thu, 24 Jan 2019 at 15:30, Maurizio Cimadamore
<maurizio.cimadamore at oracle.com> wrote:
>
> I'm a bit confused (but it could also be because I'm misremembering) - wasn't the whole point of the exercise to have cloned type variables to piggy back on the clonee's getUpperBound?
>
> In the patch I see this:
>
> @Override
> 1640         public TypeVar cloneWithMetadata(TypeMetadata md) {
> 1641             return new TypeVar(tsym, getUpperBound(), lower, md) {
> 1642                 @Override
> 1643                 public Type baseType() { return TypeVar.this.baseType(); }
> 1644             };
> 1645         }
>
>
> Which doesn't seem better than the current code - e.g. the upper bound is fetched when the cloned var is created, so, if the bound is updated after the fact, such changes will not be reflected in the clones var?
The current getUpperBound() sets the clone's bound to the clonee's
bound (tsym.type.getUpperBound()) at every invocation while still
unset (null or tag=NONE):
http://hg.openjdk.java.net/jdk/jdk/file/525f212f1bda/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java#l1659
which is exactly what we need in our issue (see Types::getBounds).
Overriding the accessor in cloneWithMetadata() is then no more
necessary.
This fixes the issue and tests are clean.
Do we agree?
Bernard
    
    
More information about the compiler-dev
mailing list