8000 7033677: potential cast error in MemberEnter · openjdk/jdk@a917fb3 · GitHub
[go: up one dir, main page]

Skip to content

Commit a917fb3

Browse files
archiecobbsVicente Romero
authored andcommitted
7033677: potential cast error in MemberEnter
Reviewed-by: vromero, jlahoda
1 parent 6120319 commit a917fb3

File tree

8 files changed

+24
-18
lines changed

8 files changed

+24
-18
lines changed

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ public Type attribType(JCTree node, TypeSymbol sym) {
393393

394394
public Type attribImportQualifier(JCImport tree, Env<AttrContext> env) {
395395
// Attribute qualifying package or class.
396-
JCFieldAccess s = (JCFieldAccess)tree.qualid;
396+
JCFieldAccess s = tree.qualid;
397397
return attribTree(s.selected, env,
398398
new ResultInfo(tree.staticImport ?
399399
KindSelector.TYP : KindSelector.TYP_PCK,

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4068,7 +4068,7 @@ public void checkImportsResolvable(final JCCompilationUnit toplevel) {
40684068
for (final JCImport imp : toplevel.getImports()) {
40694069
if (!imp.staticImport || !imp.qualid.hasTag(SELECT))
40704070
continue;
4071-
final JCFieldAccess select = (JCFieldAccess) imp.qualid;
4071+
final JCFieldAccess select = imp.qualid;
40724072
final Symbol origin;
40734073
if (select.name == names.asterisk || (origin = TreeInfo.symbol(select.selected)) == null || origin.kind != TYP)
40744074
continue;
@@ -4091,7 +4091,7 @@ public void checkImportsResolvable(final JCCompilationUnit toplevel) {
40914091
public void checkImportedPackagesObservable(final JCCompilationUnit toplevel) {
40924092
OUTER: for (JCImport imp : toplevel.getImports()) {
40934093
if (!imp.staticImport && TreeInfo.name(imp.qualid) == names.asterisk) {
4094-
TypeSymbol tsym = ((JCFieldAccess)imp.qualid).selected.type.tsym;
4094+
TypeSymbol tsym = imp.qualid.selected.type.tsym;
40954095
if (tsym.kind == PCK && tsym.members().isEmpty() &&
40964096
!(Feature.IMPORT_ON_DEMAND_OBSERVABLE_PACKAGES.allowedInSource(source) && tsym.exists())) {
40974097
log.error(DiagnosticFlag.RESOLVE_ERROR, imp.pos, Errors.DoesntExist(tsym));

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,8 @@ private void resolveImports(JCCompilationUnit tree, Env<AttrContext> env) {
353353
log.error(Errors.NoJavaLang);
354354
throw new Abort();
355355
}
356-
importAll(make.at(tree.pos()).Import(make.QualIdent(javaLang), false), javaLang, env);
356+
importAll(make.at(tree.pos()).Import(make.Select(make.QualIdent(javaLang.owner), javaLang), false),
357+
javaLang, env);
357358

358359
JCModuleDecl decl = tree.getModuleDecl();
359360

@@ -406,7 +407,7 @@ private void checkClassPackageClash(JCPackageDecl tree) {
406407
}
407408

408409
private void doImport(JCImport tree) {
409-
JCFieldAccess imp = (JCFieldAccess)tree.qualid;
410+
JCFieldAccess imp = tree.qualid;
410411
Name name = TreeInfo.name(imp);
411412

412413
// Create a local environment pointing to this tree to disable

src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4020,7 +4020,7 @@ protected JCTree importDeclaration() {
40204020
}
40214021
} while (token.kind == DOT);
40224022
accept(SEMI);
4023-
return toP(F.at(pos).Import(pid, importStatic));
4023+
return toP(F.at(pos).Import((JCFieldAccess)pid, importStatic));
40244024
}
40254025

40264026
/** TypeDeclaration = ClassOrInterfaceOrEnumDeclaration

src/jdk.compiler/share/classes/com/sun/tools/javac/tree/JCTree.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -667,9 +667,9 @@ public Tag getTag() {
667667
public static class JCImport extends JCTree implements ImportTree {
668668
public boolean staticImport;
669669
/** The imported class(es). */
670-
public JCTree qualid;
670+
public JCFieldAccess qualid;
671671
public com.sun.tools.javac.code.Scope importScope;
672-
protected JCImport(JCTree qualid, boolean importStatic) {
672+
protected JCImport(JCFieldAccess qualid, boolean importStatic) {
673673
this.qualid = qualid;
674674
this.staticImport = importStatic;
675675
}
@@ -679,7 +679,7 @@ protected JCImport(JCTree qualid, boolean importStatic) {
679679
@DefinedBy(Api.COMPILER_TREE)
680680
public boolean isStatic() { return staticImport; }
681681
@DefinedBy(Api.COMPILER_TREE)
682-
public JCTree getQualifiedIdentifier() { return qualid; }
682+
public JCFieldAccess getQualifiedIdentifier() { return qualid; }
683683

684684
@DefinedBy(Api.COMPILER_TREE)
685685
public Kind getKind() { return Kind.IMPORT; }
@@ -3403,7 +3403,7 @@ public interface Factory {
34033403
JCCompilationUnit TopLevel(List<JCTree> defs);
34043404
JCPackageDecl PackageDecl(List<JCAnnotation> annotations,
34053405
JCExpression pid);
3406-
JCImport Import(JCTree qualid, boolean staticImport);
3406+
JCImport Import(JCFieldAccess qualid, boolean staticImport);
34073407
JCClassDecl ClassDef(JCModifiers mods,
9E81
34083408
Name name,
34093409
List<JCTypeParameter> typarams,

src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeCopier.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ public JCTree visitIf(IfTree node, P p) {
257257
@DefinedBy(Api.COMPILER_TREE)
258258
public JCTree visitImport(ImportTree node, P p) {
259259
JCImport t = (JCImport) node;
260-
JCTree qualid = copy(t.qualid, p);
260+
JCFieldAccess qualid = copy(t.qualid, p);
261261
return M.at(t.pos).Import(qualid, t.staticImport);
262262
}
263263

src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeMaker.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ public JCPackageDecl PackageDecl(List<JCAnnotation> annotations,
148148
return tree;
149149
}
150150

151-
public JCImport Import(JCTree qualid, boolean importStatic) {
151+
public JCImport Import(JCFieldAccess qualid, boolean importStatic) {
152152
JCImport tree = new JCImport(qualid, importStatic);
153153
tree.pos = pos;
154154
return tree;
@@ -723,8 +723,8 @@ public JCIdent Ident(Symbol sym) {
723723
/** Create a selection node from a qualifier tree and a symbol.
724724
* @param base The qualifier tree.
725725
*/
726-
public JCExpression Select(JCExpression base, Symbol sym) {
727-
return new JCFieldAccess(base, sym.name, sym).setPos(pos).setType(sym.type);
726+
public JCFieldAccess Select(JCExpression base, Symbol sym) {
727+
return (JCFieldAccess)new JCFieldAccess(base, sym.name, sym).setPos(pos).setType(sym.type);
728728
}
729729

730730
/** Create a qualified identifier from a symbol, adding enough qualifications

test/langtools/jdk/javadoc/tool/sampleapi/lib/sampleapi/generator/PackageGenerator.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -275,10 +275,15 @@ ListBuffer<JCTree>[] processBases(Element baseTag, HashMap<String, Integer> scop
275275
}
276276
break;
277277
case "import":
278-
imports.append(
279-
make.Import(
280-
make.Ident(names.fromString(element.getTextContent())),
281-
false));
278+
String[] idents = element.getTextContent().split("\\.");
279+
if (idents.length < 2)
280+
throw new IllegalStateException("Invalid import: " + element.getTextContent());
281+
JCFieldAccess select = make.Select(
282+
make.Ident(names.fromString(idents[0])), names.fromString(idents[1]));
283+
for (int j = 2; j < idents.length; j++)
284+
select = make.Select(select, names.fromString(idents[j]));
285+
imports.append(make.Import(select, false));
286+
break;
282287
}
283288
}
284289

0 commit comments

Comments
 (0)
0