public IType getActualTypeInContainer(IFeatureInfo container, IType type) { IType ownerType = container.getOwnersType(); if (ownerType.isParameterizedType()) { TypeVarToTypeMap actualParamByVarName = TypeLord.mapTypeByVarName(ownerType, ownerType); if (container instanceof IGenericMethodInfo) { for (IGenericTypeVariable tv : ((IGenericMethodInfo) container).getTypeVariables()) { if (actualParamByVarName.isEmpty()) { actualParamByVarName = new TypeVarToTypeMap(); } actualParamByVarName.put( tv.getTypeVariableDefinition().getType(), tv.getTypeVariableDefinition().getType()); } type = TypeLord.getActualType(type, actualParamByVarName, true); } } return type; }
public IType getReturnType() { ArrayList returnStatements = new ArrayList<ReturnStatement>(); ArrayList<IType> returnTypes = new ArrayList<IType>(); getContainedParsedElementsByTypesWithIgnoreSet( returnStatements, new HashSet(getExcludedReturnTypeElements()), ReturnStatement.class); for (int i = 0; i < returnStatements.size(); i++) { ReturnStatement returnStmt = (ReturnStatement) returnStatements.get(i); returnTypes.add(returnStmt.getValue().getType()); } return TypeLord.findLeastUpperBound(returnTypes); }
private IGosuClass createJavaProxyImmediately(IJavaTypeInternal type) { IGosuClassInternal gsAdapterClass; if (type.getEnclosingType() != null) { // Ensure enclosing type is proxied; it contains the gosu source for the inner type IGosuClass outerProxy = (IGosuClass) TypeSystem.getByFullName( getProxyName((IJavaType) TypeLord.getOuterMostEnclosingClass(type))); outerProxy.getInnerClasses(); if (!outerProxy.isCompilingDeclarations()) { gsAdapterClass = (IGosuClassInternal) outerProxy.getInnerClass( type.getRelativeName().substring(type.getRelativeName().indexOf('.') + 1)); if (gsAdapterClass == null) { TypeSystem.refresh((ITypeRef) outerProxy, true); gsAdapterClass = (IGosuClassInternal) outerProxy.getInnerClass( type.getRelativeName().substring(type.getRelativeName().indexOf('.') + 1)); } } else { return null; } } else { if (type.isInterface()) { gsAdapterClass = (IGosuClassInternal) createJavaInterfaceProxy(type); } else { gsAdapterClass = (IGosuClassInternal) createJavaClassProxy(type); } } type.setAdapterClass(gsAdapterClass); gsAdapterClass.setJavaType(type); return gsAdapterClass; }