@Override public StringBuilder doVisitInnerTypeReference(JvmInnerTypeReference reference, StringBuilder param) { JvmType type = reference.getType(); if (type == null || type.eIsProxy()) { return null; } param = reference.getOuter().accept(this, param); if (param == null) return null; param.append("."); return doVisitParameterizedTypeReference(reference, param); }
@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; }
@Override public LightweightTypeReference doVisitFunctionTypeReference(XFunctionTypeRef reference) { JvmTypeReference equivalent = reference.getEquivalent(); if (equivalent == null) { return super.doVisitFunctionTypeReference(reference); } FunctionTypeReference result; // constructors used below to avoid subsequent checks for isInner which was supposed to be done by // the computation of the equivalent if (equivalent.eClass() == TypesPackage.Literals.JVM_INNER_TYPE_REFERENCE) { JvmParameterizedTypeReference outer = ((JvmInnerTypeReference) equivalent).getOuter(); LightweightTypeReference outerEquivalent = outer.accept(this); result = new InnerFunctionTypeReference(owner, outerEquivalent, reference.getType()); } else { result = new FunctionTypeReference(owner, reference.getType()); } if (equivalent instanceof JvmParameterizedTypeReference) { for(JvmTypeReference argument: ((JvmParameterizedTypeReference)equivalent).getArguments()) { result.addTypeArgument(visit(argument)); } } for(JvmTypeReference parameter: reference.getParamTypes()) { result.addParameterType(visit(parameter)); } if (reference.getReturnType() != null) { result.setReturnType(visit(reference.getReturnType())); } return result; }