* tests/regression/MinimalClassReflection.java: New file.
This adds tests for some reflection methods like
java.lang.Class.isLocal/.isMember/.isAnonymous/.getDeclaringClass etc.
* tests/regression/Makefile.am
(SOURCE_FILES): Added MinimalClassReflection.java.
(EXTRA_DIST): Added MinimalClassReflection.output.
(OUTPUT_JAVA_TESTS): Added MinimalClassReflection.
##
## Authors: Christian Thalinger
##
-## $Id: Makefile.am 7486 2007-03-08 13:50:07Z twisti $
+## $Id: Makefile.am 8338 2007-08-17 20:03:06Z panzi $
## Process this file with automake to produce Makefile.in
$(srcdir)/clinitexception.java \
$(srcdir)/LoadDisplacementOverflow.java \
$(srcdir)/FieldDisplacementOverflow.java \
- $(srcdir)/StackDisplacementOverflow.java
+ $(srcdir)/StackDisplacementOverflow.java \
+ $(srcdir)/MinimalClassReflection.java
EXTRA_DIST = \
$(SOURCE_FILES) \
clinitexception.2output \
LoadDisplacementOverflow.output \
FieldDisplacementOverflow.output \
- StackDisplacementOverflow.output
+ StackDisplacementOverflow.output \
+ MinimalClassReflection.output
CLEANFILES = \
*.class \
clinitexception \
LoadDisplacementOverflow \
FieldDisplacementOverflow \
- StackDisplacementOverflow
+ StackDisplacementOverflow \
+ MinimalClassReflection
check: build $(SIMPLE_JAVA_TESTS) $(OUTPUT_JAVA_TESTS)
--- /dev/null
+/* tests/regression/MinimalClassReflection.java - checks most some of the
+ reflective methods onto java.lang.Class
+
+ Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+ C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
+ E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
+ TU Wien
+
+ This file is part of CACAO.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2, or (at
+ your option) any later version.
+
+ This program 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 for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+ Contact: cacao@cacaojvm.org
+
+ Authors: Mathias Panzenböck
+
+ $Id$
+
+*/
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Constructor;
+
+public class MinimalClassReflection {
+ public static void printClassInfo(String header, Class<?> cls) {
+ Class<?> clazz;
+ Constructor<?> constr;
+ Method method;
+
+ p("---------------------- %s ----------------------", header);
+ p("is local: %s", cls.isLocalClass());
+ p("is anonymous: %s", cls.isAnonymousClass());
+ p("is member: %s", cls.isMemberClass());
+ p("name: %s", cls.getName());
+ p("simple name: %s", cls.getSimpleName());
+ p("canonical name: %s", cls.getCanonicalName());
+
+ clazz = cls.getSuperclass();
+ p("super class: %s",
+ (clazz == null ? "null" : clazz.getName()));
+
+ clazz = cls.getDeclaringClass();
+ p("declaring class: %s",
+ (clazz == null ? "null" : clazz.getName()));
+
+ clazz = cls.getEnclosingClass();
+ p("enclosing class: %s",
+ (clazz == null ? "null" : clazz.getName()));
+
+ constr = cls.getEnclosingConstructor();
+ p("enclosing constructor: %s",
+ (constr == null ? "null" :
+ constr.getDeclaringClass().getName() +
+ "." + constr.getName()));
+
+ method = cls.getEnclosingMethod();
+ p("enclosing method: %s",
+ (method == null ? "null" :
+ method.getDeclaringClass().getName() +
+ "." + method.getName()));
+
+ p();
+ }
+
+ public static void main(String[] args) {
+ class ALocalClass {
+ class AMemberClass {
+ }
+
+ public ALocalClass() {
+ class AnotherLocalClass {
+ }
+
+ printClassInfo(
+ "test a member class",
+ AMemberClass.class);
+
+ printClassInfo(
+ "test a anonymous class derived from a member class",
+ new AMemberClass() {}.getClass());
+
+ printClassInfo(
+ "test a local class (local to a constructor)",
+ AnotherLocalClass.class);
+
+ printClassInfo(
+ "test a anonymous class derived from a local " +
+ "class (local to a constructor)",
+ new AnotherLocalClass() {}.getClass());
+ }
+ }
+
+ printClassInfo(
+ "test a normal class",
+ MinimalClassReflection.class);
+
+ printClassInfo(
+ "test a local class (local to a method)",
+ ALocalClass.class);
+
+ printClassInfo(
+ "test a anonymous class",
+ new Object() {}.getClass());
+
+ printClassInfo(
+ "test a anonymous class derived from a local class" +
+ " (local to a method)",
+ new ALocalClass() {}.getClass());
+
+ new ALocalClass();
+ }
+
+ public static void p(String fmt, Object... args) {
+ System.out.printf(fmt + "\n", args);
+ }
+
+ public static <T> void p(T o) {
+ System.out.println(o);
+ }
+
+ public static void p() {
+ System.out.println();
+ }
+}
--- /dev/null
+---------------------- test a normal class ----------------------
+is local: false
+is anonymous: false
+is member: false
+name: MinimalClassReflection
+simple name: MinimalClassReflection
+canonical name: MinimalClassReflection
+super class: java.lang.Object
+declaring class: null
+enclosing class: null
+enclosing constructor: null
+enclosing method: null
+
+---------------------- test a local class (local to a method) ----------------------
+is local: true
+is anonymous: false
+is member: false
+name: MinimalClassReflection$1ALocalClass
+simple name: ALocalClass
+canonical name: null
+super class: java.lang.Object
+declaring class: null
+enclosing class: MinimalClassReflection
+enclosing constructor: null
+enclosing method: MinimalClassReflection.main
+
+---------------------- test a anonymous class ----------------------
+is local: false
+is anonymous: true
+is member: false
+name: MinimalClassReflection$1
+simple name:
+canonical name: null
+super class: java.lang.Object
+declaring class: null
+enclosing class: MinimalClassReflection
+enclosing constructor: null
+enclosing method: MinimalClassReflection.main
+
+---------------------- test a member class ----------------------
+is local: false
+is anonymous: false
+is member: true
+name: MinimalClassReflection$1ALocalClass$AMemberClass
+simple name: AMemberClass
+canonical name: null
+super class: java.lang.Object
+declaring class: MinimalClassReflection$1ALocalClass
+enclosing class: MinimalClassReflection$1ALocalClass
+enclosing constructor: null
+enclosing method: null
+
+---------------------- test a anonymous class derived from a member class ----------------------
+is local: false
+is anonymous: true
+is member: false
+name: MinimalClassReflection$1ALocalClass$1
+simple name:
+canonical name: null
+super class: MinimalClassReflection$1ALocalClass$AMemberClass
+declaring class: null
+enclosing class: MinimalClassReflection$1ALocalClass
+enclosing constructor: MinimalClassReflection$1ALocalClass.MinimalClassReflection$1ALocalClass
+enclosing method: null
+
+---------------------- test a local class (local to a constructor) ----------------------
+is local: true
+is anonymous: false
+is member: false
+name: MinimalClassReflection$1ALocalClass$1AnotherLocalClass
+simple name: AnotherLocalClass
+canonical name: null
+super class: java.lang.Object
+declaring class: null
+enclosing class: MinimalClassReflection$1ALocalClass
+enclosing constructor: MinimalClassReflection$1ALocalClass.MinimalClassReflection$1ALocalClass
+enclosing method: null
+
+---------------------- test a anonymous class derived from a local class (local to a constructor) ----------------------
+is local: false
+is anonymous: true
+is member: false
+name: MinimalClassReflection$1ALocalClass$2
+simple name:
+canonical name: null
+super class: MinimalClassReflection$1ALocalClass$1AnotherLocalClass
+declaring class: null
+enclosing class: MinimalClassReflection$1ALocalClass
+enclosing constructor: MinimalClassReflection$1ALocalClass.MinimalClassReflection$1ALocalClass
+enclosing method: null
+
+---------------------- test a anonymous class derived from a local class (local to a method) ----------------------
+is local: false
+is anonymous: true
+is member: false
+name: MinimalClassReflection$2
+simple name:
+canonical name: null
+super class: MinimalClassReflection$1ALocalClass
+declaring class: null
+enclosing class: MinimalClassReflection
+enclosing constructor: null
+enclosing method: MinimalClassReflection.main
+
+---------------------- test a member class ----------------------
+is local: false
+is anonymous: false
+is member: true
+name: MinimalClassReflection$1ALocalClass$AMemberClass
+simple name: AMemberClass
+canonical name: null
+super class: java.lang.Object
+declaring class: MinimalClassReflection$1ALocalClass
+enclosing class: MinimalClassReflection$1ALocalClass
+enclosing constructor: null
+enclosing method: null
+
+---------------------- test a anonymous class derived from a member class ----------------------
+is local: false
+is anonymous: true
+is member: false
+name: MinimalClassReflection$1ALocalClass$1
+simple name:
+canonical name: null
+super class: MinimalClassReflection$1ALocalClass$AMemberClass
+declaring class: null
+enclosing class: MinimalClassReflection$1ALocalClass
+enclosing constructor: MinimalClassReflection$1ALocalClass.MinimalClassReflection$1ALocalClass
+enclosing method: null
+
+---------------------- test a local class (local to a constructor) ----------------------
+is local: true
+is anonymous: false
+is member: false
+name: MinimalClassReflection$1ALocalClass$1AnotherLocalClass
+simple name: AnotherLocalClass
+canonical name: null
+super class: java.lang.Object
+declaring class: null
+enclosing class: MinimalClassReflection$1ALocalClass
+enclosing constructor: MinimalClassReflection$1ALocalClass.MinimalClassReflection$1ALocalClass
+enclosing method: null
+
+---------------------- test a anonymous class derived from a local class (local to a constructor) ----------------------
+is local: false
+is anonymous: true
+is member: false
+name: MinimalClassReflection$1ALocalClass$2
+simple name:
+canonical name: null
+super class: MinimalClassReflection$1ALocalClass$1AnotherLocalClass
+declaring class: null
+enclosing class: MinimalClassReflection$1ALocalClass
+enclosing constructor: MinimalClassReflection$1ALocalClass.MinimalClassReflection$1ALocalClass
+enclosing method: null
+