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;
 }
Example #2
0
 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);
 }
Example #3
0
  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;
  }