@Override public InnerFunctionTypeReference newFunctionTypeReference(LightweightTypeReference outer, JvmType type) { if (!factory.isInner(type)) { throw new IllegalArgumentException(String.valueOf(type)); } return new InnerFunctionTypeReference(this, outer, type); }
@Override public InnerTypeReference newParameterizedTypeReference(LightweightTypeReference outer, JvmType type) { if (!factory.isInner(type)) { throw new IllegalArgumentException(String.valueOf(type)); } return new InnerTypeReference(this, outer, type); }
@Override public FunctionTypeReference newFunctionTypeReference(JvmType type) { FunctionTypeReference result; if (factory.isInner(type)) { ParameterizedTypeReference outer = newParameterizedTypeReference((JvmDeclaredType)type.eContainer()); result = new InnerFunctionTypeReference(this, outer, type); } else { result = new FunctionTypeReference(this, type); } return result; }
@Override public ParameterizedTypeReference newParameterizedTypeReference(JvmType type) { ParameterizedTypeReference result; if (factory.isInner(type)) { ParameterizedTypeReference outer = newParameterizedTypeReference((JvmDeclaredType)type.eContainer()); result = new InnerTypeReference(this, outer, type); } else { result = new ParameterizedTypeReference(this, type); } return result; }
@Override public LightweightTypeReference doVisitInnerTypeReference(JvmInnerTypeReference reference) { JvmType type = getType(reference); if (type == null || type.eIsProxy()) { return createUnknownTypeReference(reference); } if (!isInner(type)) { return doVisitParameterizedTypeReference(reference); } JvmParameterizedTypeReference outer = reference.getOuter(); if (outer == null) return doVisitParameterizedTypeReference(reference); ParameterizedTypeReference lightweightOuter = (ParameterizedTypeReference) outer.accept(this); // constructor call instead of owner.newParameterized to avoid second check for isInner(..) InnerTypeReference result = new InnerTypeReference(owner, lightweightOuter, type); for(JvmTypeReference argument: reference.getArguments()) { result.addTypeArgument(visit(argument).getWrapperTypeIfPrimitive()); } return result; }