コード例 #1
0
ファイル: Project.java プロジェクト: svn2github/RefactorIT
  /*
   *	Gets reference for current type.
   * FIXME: Quite strange feature - requires inner types to be referenced with $
   * like mypackage.MyClass$MyInner
   */
  public BinTypeRef getTypeRefForName(final String qName) {
    // RFC - types resolving for workspaces:
    // 1. find own defined source type
    // 2. find from dependant projects defined source type
    // 3. find from own already loaded binary types
    // 4. find from dependant projects already loaded binary types
    // 5. try to load binary types from own classpath
    // 6. try to load binary types from dependant projects classpath

    BinTypeRef foundType = findTypeRefForName(qName); // is that type declared in source...

    if (foundType != null) {
      if (classLoaderEntries == 0 && !foundType.isResolved()) {
        classLoaderEntries++;
        try {
          getProjectLoader().getClassLoader().findTypeForQualifiedName(qName);
        } catch (Exception e) {
          // e.printStackTrace(System.err);
        } finally {
          classLoaderEntries--;
        }

        foundType = findTypeRefForName(qName);
      }
    } else {
      if (classLoaderEntries == 0) {
        // we are getting a real classloaded BinTypeRef
        classLoaderEntries++;
        try {
          getProjectLoader().getClassLoader().findTypeForQualifiedName(qName);
        } catch (Exception e) {
          // e.printStackTrace(System.err);
        } finally {
          classLoaderEntries--;
        }
        foundType = findTypeRefForName(qName);
      } else {
        if (!getProjectLoader().getClassLoader().existsTypeForQualifiedName(qName)) {
          foundType = null;
        } else {
          foundType = new BinCITypeRef(qName, getProjectLoader().getClassLoader());
          addLoadedType(qName, foundType);
        }
      }
    }

    return foundType;
  }