/* * 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; }