protected JvmTypeReference createLocalTypeReference(Type type, JvmTypeParameterDeclarator container, GenericDeclaration member) { if (type instanceof GenericArrayType) { GenericArrayType arrayType = (GenericArrayType) type; Type componentType = arrayType.getGenericComponentType(); return createLocalArrayTypeReference(componentType, container, member); } else if (type instanceof TypeVariable<?>) { TypeVariable<?> typeVariable = (TypeVariable<?>) type; JvmParameterizedTypeReference result = TypesFactory.eINSTANCE.createJvmParameterizedTypeReference(); int idx = Arrays.asList(member.getTypeParameters()).indexOf(typeVariable); result.setType(container.getTypeParameters().get(idx)); return result; } throw new IllegalArgumentException(type.toString()); }
protected JvmTypeReference createLocalTypeReference(Type type, JvmTypeParameterDeclarator container, GenericDeclaration member) { if (type instanceof GenericArrayType) { GenericArrayType arrayType = (GenericArrayType) type; Type componentType = arrayType.getGenericComponentType(); return createLocalArrayTypeReference(componentType, container, member); } else if (type instanceof TypeVariable<?>) { TypeVariable<?> typeVariable = (TypeVariable<?>) type; JvmParameterizedTypeReference result = TypesFactory.eINSTANCE.createJvmParameterizedTypeReference(); int idx = Arrays.asList(member.getTypeParameters()).indexOf(typeVariable); result.setType(container.getTypeParameters().get(idx)); return result; } throw new IllegalArgumentException(type.toString()); }
public JvmTypeReference getBoundArgument(JvmTypeParameter parameter) { if (isRawTypeContext()) { JvmParameterizedTypeReference demandCreated = typesFactory.createJvmParameterizedTypeReference(); demandCreated.setType(parameter); JvmTypeReference result = rawTypeHelper.getRawTypeReference(demandCreated, parameter.eResource()); return result; } JvmTypeReference result = boundParameters.get(parameter); if (result == null) { JvmParameterizedTypeReference demandCreated = typesFactory.createJvmParameterizedTypeReference(); demandCreated.setType(parameter); return demandCreated; } return result; }
protected JvmParameterizedTypeReference createSuperTypeReference(JvmType superType, XConstructorCall constructorCall) { JvmParameterizedTypeReference result = TypesFactory.eINSTANCE.createJvmParameterizedTypeReference(); result.setType(superType); for(JvmTypeReference typeReference: constructorCall.getTypeArguments()) { result.getArguments().add(typesBuilder.cloneWithProxies(typeReference)); } return result; }
@Override public JvmTypeReference toTypeReference() { JvmParameterizedTypeReference result = getTypesFactory().createJvmParameterizedTypeReference(); result.setType(type); if (typeArguments != null) { for(LightweightTypeReference typeArgument: typeArguments) { result.getArguments().add(typeArgument.toTypeReference()); } } return result; }
public JvmParameterizedTypeReference createTypeRef(final JvmType type, final JvmTypeReference... typeArgs) { if ((type == null)) { throw new NullPointerException("type"); } final JvmParameterizedTypeReference reference = TypesFactory.eINSTANCE.createJvmParameterizedTypeReference(); reference.setType(type); for (final JvmTypeReference typeArg : typeArgs) { reference.getArguments().add(EcoreUtil2.<JvmTypeReference>cloneIfContained(typeArg)); } if ((type instanceof JvmGenericType)) { final EList<JvmTypeParameter> list = ((JvmGenericType)type).getTypeParameters(); if (((!reference.getArguments().isEmpty()) && (list.size() != reference.getArguments().size()))) { String _identifier = ((JvmGenericType)type).getIdentifier(); String _plus = ("The type " + _identifier); String _plus_1 = (_plus + " expects "); int _size = list.size(); String _plus_2 = (_plus_1 + Integer.valueOf(_size)); String _plus_3 = (_plus_2 + " type arguments, but was "); int _size_1 = reference.getArguments().size(); String _plus_4 = (_plus_3 + Integer.valueOf(_size_1)); String _plus_5 = (_plus_4 + ". Either pass zero arguments (raw type) or the correct number."); throw new IllegalArgumentException(_plus_5); } } return reference; }
private JvmTypeReference newObjectReference() { JvmType objectType = typesFactory.createJvmGenericType(); String objectClassName = Object.class.getName(); ((InternalEObject) objectType).eSetProxyURI(URIHelperConstants.OBJECTS_URI.appendSegment(objectClassName).appendFragment(objectClassName)); JvmParameterizedTypeReference result = typesFactory.createJvmParameterizedTypeReference(); result.setType(objectType); return result; }
protected JvmTypeReference createObjectReference(Resource resource) { // no upper bound found - seems to be an invalid - assume object as upper bound JvmType objectType = factory.createJvmGenericType(); String objectClassName = Object.class.getName(); ((InternalEObject) objectType).eSetProxyURI(URIHelperConstants.OBJECTS_URI.appendSegment(objectClassName) .appendFragment(objectClassName)); if (resource != null) { objectType = (JvmType) EcoreUtil.resolve(objectType, resource); } JvmParameterizedTypeReference result = factory.createJvmParameterizedTypeReference(); result.setType(objectType); return result; } }
protected JvmTypeReference createObjectReference(Resource resource) { // no upper bound found - seems to be an invalid - assume object as upper bound JvmType objectType = factory.createJvmGenericType(); String objectClassName = Object.class.getName(); ((InternalEObject) objectType).eSetProxyURI(URIHelperConstants.OBJECTS_URI.appendSegment(objectClassName) .appendFragment(objectClassName)); if (resource != null) { objectType = (JvmType) EcoreUtil.resolve(objectType, resource); } JvmParameterizedTypeReference result = factory.createJvmParameterizedTypeReference(); result.setType(objectType); return result; } }
protected JvmTypeReference newRef(JvmType type) { if (type instanceof JvmArrayType) { JvmTypeReference componentType = newRef(((JvmArrayType) type).getComponentType()); JvmGenericArrayTypeReference reference = factory.createJvmGenericArrayTypeReference(); reference.setComponentType(componentType); return reference; } else { JvmParameterizedTypeReference reference = factory.createJvmParameterizedTypeReference(); reference.setType(type); return reference; } }
@Override public JvmTypeReference doVisitParameterizedTypeReference(JvmParameterizedTypeReference reference, Resource resource) { JvmType type = reference.getType(); if (type != null && !type.eIsProxy()) { if (type instanceof JvmTypeParameterDeclarator) { if (!((JvmTypeParameterDeclarator) type).getTypeParameters().isEmpty()) { JvmParameterizedTypeReference result = factory.createJvmParameterizedTypeReference(); result.setType(type); return result; } } else if (type instanceof JvmTypeParameter) { return getRawTypeFromConstraints(((JvmTypeParameter) type).getConstraints(), resource); } } return reference; }
@Override public JvmTypeReference doVisitParameterizedTypeReference(JvmParameterizedTypeReference reference, Resource resource) { JvmType type = reference.getType(); if (type != null && !type.eIsProxy()) { if (type instanceof JvmTypeParameterDeclarator) { if (!((JvmTypeParameterDeclarator) type).getTypeParameters().isEmpty()) { JvmParameterizedTypeReference result = factory.createJvmParameterizedTypeReference(); result.setType(type); return result; } } else if (type instanceof JvmTypeParameter) { return getRawTypeFromConstraints(((JvmTypeParameter) type).getConstraints(), resource); } } return reference; }
@Override public JvmTypeReference toJavaCompliantTypeReference(IVisibilityHelper visibilityHelper) { if (isTypeVisible(visibilityHelper)) { JvmParameterizedTypeReference result = getTypesFactory().createJvmParameterizedTypeReference(); result.setType(type); if (typeArguments != null) { for(LightweightTypeReference typeArgument: typeArguments) { result.getArguments().add(typeArgument.toJavaCompliantTypeReference()); } } return result; } else { return toJavaCompliantTypeReference(getSuperTypes(), visibilityHelper); } }
protected JvmTypeReference createObjectReference(Resource resource) { // no upper bound found - seems to be an invalid - assume object as upper bound URI objectURI = new ClassURIHelper().getFullURI(Object.class); JvmType objectType = factory.createJvmGenericType(); ((InternalEObject)objectType).eSetProxyURI(objectURI); if (resource != null) { objectType = (JvmType) EcoreUtil.resolve(objectType, resource); } JvmParameterizedTypeReference result = factory.createJvmParameterizedTypeReference(); result.setType(objectType); return result; } }
protected JvmTypeReference toTypeReference(final JvmType type, final int arrayDimensions) { if ((type == null)) { return null; } JvmParameterizedTypeReference _createJvmParameterizedTypeReference = TypesFactory.eINSTANCE.createJvmParameterizedTypeReference(); final Procedure1<JvmParameterizedTypeReference> _function = (JvmParameterizedTypeReference it) -> { it.setType(type); }; JvmTypeReference resultTypeRef = ObjectExtensions.<JvmParameterizedTypeReference>operator_doubleArrow(_createJvmParameterizedTypeReference, _function); ExclusiveRange _doubleDotLessThan = new ExclusiveRange(0, arrayDimensions, true); for (final Integer i : _doubleDotLessThan) { { final JvmGenericArrayTypeReference arrayRef = TypesFactory.eINSTANCE.createJvmGenericArrayTypeReference(); arrayRef.setComponentType(resultTypeRef); resultTypeRef = arrayRef; } } return resultTypeRef; }
@Override public JvmTypeReference doVisitParameterizedTypeReference(JvmParameterizedTypeReference reference, Pair<Resource, Set<JvmType>> context) { JvmType type = reference.getType(); if (type != null && !type.eIsProxy()) { if (type instanceof JvmTypeParameterDeclarator) { if (!((JvmTypeParameterDeclarator) type).getTypeParameters().isEmpty()) { JvmParameterizedTypeReference result = factory.createJvmParameterizedTypeReference(); result.setType(type); return result; } } else if (type instanceof JvmTypeParameter) { Set<JvmType> recursionGuard = context.getSecond(); if (recursionGuard.add(type)) { return getRawTypeFromConstraints(((JvmTypeParameter) type).getConstraints(), context); } else { return createObjectReference(context.getFirst()); } } } return reference; }
protected JvmTypeReference getJavaLangObjectTypeRef(JvmType rawType, TypesFactory typesFactory) { ResourceSet rs = EcoreUtil2.getResourceSet(rawType); JvmParameterizedTypeReference refToObject = typesFactory.createJvmParameterizedTypeReference(); if (rs != null) { EObject javaLangObject = rs.getEObject(javaLangObjectURI, true); if (javaLangObject instanceof JvmType) { JvmType objectDeclaration = (JvmType) javaLangObject; refToObject.setType(objectDeclaration); return refToObject; } } JvmGenericType proxy = typesFactory.createJvmGenericType(); ((InternalEObject)proxy).eSetProxyURI(javaLangObjectURI); refToObject.setType(proxy); return refToObject; }
protected JvmParameterizedTypeReference createEquivalentWithoutWildcards(JvmType rawType, boolean procedure) { TypesFactory typesFactory = TypesFactory.eINSTANCE; JvmParameterizedTypeReference result = typesFactory.createJvmParameterizedTypeReference(); result.setType(rawType); for(JvmTypeReference paramType: Lists.newArrayList(getParamTypes())) { JvmTypeReference wrapped = wrapIfNecessary(paramType); if (wrapped == null || wrapped.eContainer() != null) { JvmDelegateTypeReference delegate = typesFactory.createJvmDelegateTypeReference(); delegate.setDelegate(wrapped); result.getArguments().add(delegate); } else { result.getArguments().add(wrapped); } } { if (!procedure) { JvmTypeReference wrapped = wrapIfNecessary(getReturnType()); if (wrapped == null || wrapped.eContainer() != null) { JvmDelegateTypeReference delegate = typesFactory.createJvmDelegateTypeReference(); delegate.setDelegate(wrapped); result.getArguments().add(delegate); } else { result.getArguments().add(wrapped); } } } return result; }
@Override public JvmTypeReference doVisitParameterizedTypeReference(JvmParameterizedTypeReference reference, Boolean replaceWildcards) { if (replaceWildcards) { JvmType type = reference.getType(); if (type instanceof JvmTypeParameter) { if (isRawTypeContext() || boundParameters.containsKey(type)) { JvmTypeReference bound = getBoundArgument((JvmTypeParameter) type); if (isRecursive(type, bound)) { // TODO find the reason for this recursion // System.out.println("Recursion2"); return bound; } return visit(bound, replaceWildcards); } } JvmParameterizedTypeReference result = typesFactory.createJvmParameterizedTypeReference(); result.setType(type); if (!isRawTypeContext()) { for(JvmTypeReference argument: reference.getArguments()) { final JvmTypeReference visit = visit(argument, Boolean.FALSE); result.getArguments().add(visit); } } return result; } else { return super.doVisitParameterizedTypeReference(reference, replaceWildcards); } }
public boolean isVisible(final JvmMember jvmMember, JvmDeclaredType contextType) { if (jvmMember.getVisibility() == JvmVisibility.PUBLIC) return true; if (contextType == null) { return false; } else if (jvmMember.getVisibility() == JvmVisibility.DEFAULT) { if (jvmMember instanceof JvmDeclaredType) { return equal(((JvmDeclaredType) jvmMember).getPackageName(), contextType.getPackageName()); } else { JvmDeclaredType declaringType = jvmMember.getDeclaringType(); if (declaringType != null) return equal(declaringType.getPackageName(), contextType.getPackageName()); return true; } } else if (contextType.equals(jvmMember.getDeclaringType())) { return true; } else { JvmParameterizedTypeReference typeReference = typesFactory.createJvmParameterizedTypeReference(); typeReference.setType(contextType); Set<JvmType> rawTypes = superTypeCollector.collectSuperTypesAsRawTypes(typeReference); if (rawTypes.contains(jvmMember.getDeclaringType())) { return jvmMember.getVisibility() == JvmVisibility.PROTECTED; } return false; } } }