@Override public List<IConstructorLinkingCandidate> getLinkingCandidates(XConstructorCall constructorCall) { IConstructorLinkingCandidate result = reentrantTypeResolver.getScopeProviderAccess().getKnownConstructor(constructorCall, this, resolvedTypes); if(result != null) { return Collections.singletonList(result); } EObject proxyOrResolved = (EObject) constructorCall.eGet(XbasePackage.Literals.XCONSTRUCTOR_CALL__CONSTRUCTOR, false); Iterable<IEObjectDescription> descriptions = reentrantTypeResolver.getScopeProviderAccess().getCandidateDescriptions( constructorCall, XbasePackage.Literals.XCONSTRUCTOR_CALL__CONSTRUCTOR, proxyOrResolved, featureScopeSession, resolvedTypes); List<IConstructorLinkingCandidate> resultList = Lists.newArrayList(); for(IEObjectDescription description: descriptions) { resultList.add(createCandidate(constructorCall, toIdentifiableDescription(description))); } if (resultList.isEmpty()) { resultList.add(new NullConstructorLinkingCandidate(constructorCall, this)); } return resultList; }
protected IConstructorLinkingCandidate getKnownConstructor(XConstructorCall constructorCall, AbstractTypeComputationState state, ResolvedTypes resolvedTypes) { IConstructorLinkingCandidate result = resolvedTypes.getConstructor(constructorCall); if (result != null) { return result; } EObject proxyOrResolved = (EObject) constructorCall.eGet(XbasePackage.Literals.XCONSTRUCTOR_CALL__CONSTRUCTOR, false); if (proxyOrResolved == null) { result = new NullConstructorLinkingCandidate(constructorCall, state); return result; } if (!proxyOrResolved.eIsProxy()) { result = state.createResolvedLink(constructorCall, (JvmConstructor) proxyOrResolved); return result; } if (!encoder.isCrossLinkFragment(constructorCall.eResource(), EcoreUtil.getURI(proxyOrResolved).fragment())) { JvmConstructor constructor = constructorCall.getConstructor(); if (!constructor.eIsProxy()) { return state.createResolvedLink(constructorCall, constructor); } } return null; }
public JvmDeclaredType getSuperTypeNonResolving(AnonymousClass anonymousClass, IScope typeScope) { XConstructorCall constructorCall = anonymousClass.getConstructorCall(); EObject constructorProxy = (EObject) constructorCall.eGet(XbasePackage.Literals.XCONSTRUCTOR_CALL__CONSTRUCTOR, false); IEObjectDescription description = null; if (constructorProxy != null) { if (!constructorProxy.eIsProxy()) { return getSuperType(anonymousClass); } String fragment = EcoreUtil.getURI(constructorProxy).fragment(); INode node = uriEncoder.getNode(constructorCall, fragment); String name = linkingHelper.getCrossRefNodeAsString(node, true); QualifiedName superTypeName = qualifiedNameConverter.toQualifiedName(name); description = typeScope.getSingleElement(superTypeName); } if (description == null || !EcoreUtil2.isAssignableFrom(TypesPackage.Literals.JVM_DECLARED_TYPE, description.getEClass())) { description = typeScope.getSingleElement(QualifiedName.create("java", "lang", "Object")); } if (description != null && EcoreUtil2.isAssignableFrom(TypesPackage.Literals.JVM_DECLARED_TYPE, description.getEClass())) { JvmDeclaredType type = (JvmDeclaredType) description.getEObjectOrProxy(); if (!type.eIsProxy()) return type; return (JvmDeclaredType) EcoreUtil.resolve(type, anonymousClass); } return null; }