-
Bug
-
Resolution: Duplicate
-
P3
-
None
-
1.0.2, 1.1
-
sparc
-
solaris_2.4
Name: vsC45997 Date: 11/26/96
If I recompile a class which was public on the previous compilation but
now it is not public then I cannot obtain IllegalAccessError on JDK 1.1
if a pre-existing binary is linked that needs but no longer has access
to the class type. JDK 1.0.2 works OK in this situation and throws the
needed IllegalAccessError.
The section "13.4.3 public Classes" of The JLS contains the following:
"If a class that was declared public is changed to not be declared public,
then an IllegalAccessError is thrown if a pre-existing binary is linked
that needs but no longer has access to the class type"
Therefore, I guess IllegalAccessError must be thrown.
Lets consider my test on binary compatibility.
The test consist of three files.
// FILE: binc00601a.java
package javasoft.sqe.tests.lang.binc006.binc00601.binc00601b;
public class binc00601a {
int a = 5;
}
// FILE: binc00601.java
package javasoft.sqe.tests.lang.binc006.binc00601;
import java.io.PrintStream;
import javasoft.sqe.tests.lang.binc006.binc00601.binc00601b.binc00601a;
public class binc00601 {
public static void main(String argv[])
{
System.exit(run(argv, System.out) + 95/*STATUS_TEMP*/);
}
public static int run(String argv[],PrintStream out) {
binc00601a ncli;
try {
ncli = new binc00601a ();
}
catch (IllegalAccessError e) {
out.println (e);
return 0;
}
out.println ("failed");
return 2;
}
}
// FILE: binc00601b.java
package javasoft.sqe.tests.lang.binc006.binc00601.binc00601b;
class binc00601a {
int a1 = 5;
}
After separate compilations and execution with -verify option we have
on 1.1 compiler:
javac -d . binc00601a.java
javac -d . binc00601.java
javac -d . binc00601b.java
novo31% /export/ld32/jdk_1.1M/bin/java -verify javasoft.sqe.tests.lang.binc006.binc00601.binc00601
failed
On 1.0.2 compiler we have correct result:
jdk_1.0.2/bin/javac -d . binc00601a.java
jdk_1.0.2/bin/javac -d . binc00601.java
jdk_1.0.2/bin/javac -d . binc00601b.java
jdk_1.0.2/bin/java -verify javasoft.sqe.tests.lang.binc006.binc00601.binc00601
java.lang.IllegalAccessError: javasoft/sqe/tests/lang/binc006/binc00601/binc00601b/binc00601a
======================================================================
- duplicates
-
JDK-4066506 the VM disables certain access checks for locally loaded classes.
- Closed