src/share/classes/com/sun/tools/javac/comp/Resolve.java

Print this page




1835         Symbol bestSoFar = typeNotFound;
1836         for (Scope.Entry e = scope.lookup(name); e.scope != null; e = e.next()) {
1837             Symbol sym = loadClass(env, e.sym.flatName());
1838             if (bestSoFar.kind == TYP && sym.kind == TYP &&
1839                 bestSoFar != sym)
1840                 return new AmbiguityError(bestSoFar, sym);
1841             else if (sym.kind < bestSoFar.kind)
1842                 bestSoFar = sym;
1843         }
1844         return bestSoFar;
1845     }
1846 
1847     /** Find an unqualified type symbol.
1848      *  @param env       The current environment.
1849      *  @param name      The type's name.
1850      */
1851     Symbol findType(Env<AttrContext> env, Name name) {
1852         Symbol bestSoFar = typeNotFound;
1853         Symbol sym;
1854         boolean staticOnly = false;

1855         for (Env<AttrContext> env1 = env; env1.outer != null; env1 = env1.outer) {
1856             if (isStatic(env1)) staticOnly = true;
1857             for (Scope.Entry e = env1.info.scope.lookup(name);
1858                  e.scope != null;
1859                  e = e.next()) {
1860                 if (e.sym.kind == TYP) {
1861                     if (staticOnly &&
1862                         e.sym.type.hasTag(TYPEVAR) &&
1863                         e.sym.owner.kind == TYP) return new StaticError(e.sym);

1864                     return e.sym;
1865                 }
1866             }
1867 
1868             sym = findMemberType(env1, env1.enclClass.sym.type, name,
1869                                  env1.enclClass.sym);
1870             if (staticOnly && sym.kind == TYP &&
1871                 sym.type.hasTag(CLASS) &&
1872                 sym.type.getEnclosingType().hasTag(CLASS) &&
1873                 env1.enclClass.sym.type.isParameterized() &&
1874                 sym.type.getEnclosingType().isParameterized())
1875                 return new StaticError(sym);
1876             else if (sym.exists()) return sym;
1877             else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
1878 
1879             JCClassDecl encl = env1.baseClause ? (JCClassDecl)env1.tree : env1.enclClass;
1880             if ((encl.sym.flags() & STATIC) != 0)
1881                 staticOnly = true;
1882         }


1883 
1884         if (!env.tree.hasTag(IMPORT)) {
1885             sym = findGlobalType(env, env.toplevel.namedImportScope, name);
1886             if (sym.exists()) return sym;
1887             else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
1888 
1889             sym = findGlobalType(env, env.toplevel.packge.members(), name);
1890             if (sym.exists()) return sym;
1891             else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
1892 
1893             sym = findGlobalType(env, env.toplevel.starImportScope, name);
1894             if (sym.exists()) return sym;
1895             else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
1896         }
1897 
1898         return bestSoFar;
1899     }
1900 
1901     /** Find an unqualified identifier which matches a specified kind set.
1902      *  @param env       The current environment.




1835         Symbol bestSoFar = typeNotFound;
1836         for (Scope.Entry e = scope.lookup(name); e.scope != null; e = e.next()) {
1837             Symbol sym = loadClass(env, e.sym.flatName());
1838             if (bestSoFar.kind == TYP && sym.kind == TYP &&
1839                 bestSoFar != sym)
1840                 return new AmbiguityError(bestSoFar, sym);
1841             else if (sym.kind < bestSoFar.kind)
1842                 bestSoFar = sym;
1843         }
1844         return bestSoFar;
1845     }
1846 
1847     /** Find an unqualified type symbol.
1848      *  @param env       The current environment.
1849      *  @param name      The type's name.
1850      */
1851     Symbol findType(Env<AttrContext> env, Name name) {
1852         Symbol bestSoFar = typeNotFound;
1853         Symbol sym;
1854         boolean staticOnly = false;
1855         Symbol staticError = null;
1856         for (Env<AttrContext> env1 = env; env1.outer != null; env1 = env1.outer) {
1857             if (isStatic(env1)) staticOnly = true;
1858             for (Scope.Entry e = env1.info.scope.lookup(name);
1859                  e.scope != null;
1860                  e = e.next()) {
1861                 if (e.sym.kind == TYP) {
1862                     if (staticOnly &&
1863                         e.sym.type.hasTag(TYPEVAR) &&
1864                         e.sym.owner.kind == TYP) staticError = e.sym;
1865                     else
1866                         return e.sym;
1867                 }
1868             }
1869 
1870             sym = findMemberType(env1, env1.enclClass.sym.type, name,
1871                                  env1.enclClass.sym);
1872             if (staticOnly && sym.kind == TYP &&
1873                 sym.type.hasTag(CLASS) &&
1874                 sym.type.getEnclosingType().hasTag(CLASS) &&
1875                 env1.enclClass.sym.type.isParameterized() &&
1876                 sym.type.getEnclosingType().isParameterized())
1877                 return new StaticError(sym);
1878             else if (sym.exists()) return sym;
1879             else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
1880 
1881             JCClassDecl encl = env1.baseClause ? (JCClassDecl)env1.tree : env1.enclClass;
1882             if ((encl.sym.flags() & STATIC) != 0)
1883                 staticOnly = true;
1884         }
1885         if (staticError != null)
1886             return new StaticError(staticError);
1887 
1888         if (!env.tree.hasTag(IMPORT)) {
1889             sym = findGlobalType(env, env.toplevel.namedImportScope, name);
1890             if (sym.exists()) return sym;
1891             else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
1892 
1893             sym = findGlobalType(env, env.toplevel.packge.members(), name);
1894             if (sym.exists()) return sym;
1895             else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
1896 
1897             sym = findGlobalType(env, env.toplevel.starImportScope, name);
1898             if (sym.exists()) return sym;
1899             else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
1900         }
1901 
1902         return bestSoFar;
1903     }
1904 
1905     /** Find an unqualified identifier which matches a specified kind set.
1906      *  @param env       The current environment.