8187247: canonical import check compares classes by simple name

Reviewed-by: jlahoda
This commit is contained in:
Liam Miller-Cushon 2017-10-23 14:11:04 +02:00
parent 6a0b70e242
commit ed0ea37394
5 changed files with 95 additions and 1 deletions

View File

@ -3584,7 +3584,7 @@ public class Check {
private boolean isCanonical(JCTree tree) {
while (tree.hasTag(SELECT)) {
JCFieldAccess s = (JCFieldAccess) tree;
if (s.sym.owner.name != TreeInfo.symbol(s.selected).name)
if (s.sym.owner.getQualifiedName() != TreeInfo.symbol(s.selected).getQualifiedName())
return false;
tree = s.selected;
}

View File

@ -0,0 +1,40 @@
/*
* Copyright (c) 2017, Google Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8187247
* @summary canonical import check compares classes by simple name
* @author cushon
*
* @compile p1/A.java p2/A.java
* @compile/fail/ref=ImportCanonicalSameName.out -XDrawDiagnostics ImportCanonicalSameName.java
*/
package p1;
import p1.A.I;
class T {
I i;
}

View File

@ -0,0 +1,2 @@
ImportCanonicalSameName.java:36:12: compiler.err.import.requires.canonical: p2.A.I
1 error

View File

@ -0,0 +1,25 @@
/*
* Copyright (c) 2017, Google Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package p1;
public class A extends p2.A {}

View File

@ -0,0 +1,27 @@
/*
* Copyright (c) 2017, Google Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package p2;
public class A {
public static class I {}
}