/*
* Copyright ( C ) 2022 The Android Open Source Project
*
* Licensed under the Apache License , Version 2 . 0 ( the " License " ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an " AS IS " BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
*/
public class Main {
// Testcase 1: the superclass has a package private version in the same package.
static Interface s = new SubClass();
// Testcase 2: the class has a package private version.
static Interface s2;
// Testcase 3: the superclass has a package private version in a different package.
static Interface s3 = new SubClassFromPkg();
// Testcase 4: there is no implementation in the hierarchy.
static Interface s4 = new SubClassNoFoo();
// Testcase 5: there is a private method in the hierarchy.
static Interface s5 = new SubClassPrivateFoo();
// Testcase 6: there is a static method in the hierarchy.
static Interface s6 = new SubClassStaticFoo();
static {
try {
s2 = (Interface ) Class .forName("SubClass2" ).newInstance();
} catch (Exception e) {
throw new Error(e);
}
}
public static void assertEquals(Object expected, Object actual) {
if (expected != actual) {
throw new Error("Expected " + expected + ", got " + actual);
}
}
public static void assertTrue(boolean value) {
if (!value) {
throw new Error("" );
}
}
public static void main(String[] args) throws Exception {
assertEquals(SuperClass.class , ((SubClass) s).foo());
assertEquals(SuperClass.class , ((SuperClass) s).foo());
try {
s.foo();
throw new Error("Expected IllegalAccessError" );
} catch (IllegalAccessError ie) {
// expected
}
assertEquals(null , ((SuperClass) s2).foo());
try {
s2.foo();
throw new Error("Expected IllegalAccessError" );
} catch (IllegalAccessError ie) {
// expected
}
try {
((pkg.PkgSuperClass) s3).foo();
throw new Error("Expected IllegalAccessError" );
} catch (IllegalAccessError ie) {
// expected
}
try {
((SubClassFromPkg) s3).foo();
throw new Error("Expected IllegalAccessError" );
} catch (IllegalAccessError ie) {
// expected
}
try {
s3.foo();
throw new Error("Expected IllegalAccessError" );
} catch (IllegalAccessError ie) {
// expected
}
try {
((SuperClassNoFoo) s4).foo();
throw new Error("Expected NoSuchMethodError" );
} catch (NoSuchMethodError e) {
// expected
}
try {
((SubClassNoFoo) s4).foo();
throw new Error("Expected AbstractMethodError" );
} catch (AbstractMethodError e) {
// expected
}
try {
s4.foo();
throw new Error("Expected AbstractMethodError" );
} catch (AbstractMethodError e) {
// expected
}
try {
((SuperClassPrivateFoo) s5).foo();
throw new Error("Expected IllegalAccessError" );
} catch (IllegalAccessError e) {
// expected
}
try {
((SubClassPrivateFoo) s5).foo();
throw new Error("Expected IllegalAccessError" );
} catch (IllegalAccessError e) {
// expected
}
try {
s5.foo();
throw new Error("Expected AbstractMethodError on RI, IllegalAccessError on ART" );
} catch (AbstractMethodError | IllegalAccessError e) {
// expected
}
try {
((SuperClassStaticFoo) s6).foo();
throw new Error("Expected IncompatibleClassChangeError" );
} catch (IncompatibleClassChangeError e) {
// expected
}
try {
((SubClassStaticFoo) s6).foo();
throw new Error("Expected IncompatibleClassChangeError" );
} catch (IncompatibleClassChangeError e) {
// expected
}
try {
s6.foo();
throw new Error("Expected AbstractMethodError" );
} catch (AbstractMethodError e) {
// expected
}
}
}
interface Interface {
public Class <?> foo();
}
class SubClass extends SuperClass implements Interface {
}
class SubClassFromPkg extends pkg.PkgSuperClass implements Interface {
}
class SubClassNoFoo extends SuperClassNoFoo implements Interface {
}
class SubClassPrivateFoo extends SuperClassPrivateFoo implements Interface {
}
class SubClassStaticFoo extends SuperClassStaticFoo implements Interface {
}
Messung V0.5 in Prozent C=90 H=91 G=90
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet am 2026-06-29)
¤
*© Formatika GbR, Deutschland