Javolution 6.0.0 java
Initializer.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.lang;
10 
11 import java.util.Vector;
13 
50 public class Initializer {
51 
57  @Override
58  protected Boolean getDefault() {
59  return false;
60  }
61  };
62 
64  private final ClassLoader classLoader;
65 
69  public Initializer(ClassLoader classLoader) {
70  this.classLoader = classLoader;
71  }
72 
77  @SuppressWarnings("unchecked")
78  public Class<?>[] loadedClasses() {
79  Class<?> cls = classLoader.getClass();
80  while (cls != java.lang.ClassLoader.class) {
81  cls = cls.getSuperclass();
82  }
83  try {
84  java.lang.reflect.Field fldClasses = cls
85  .getDeclaredField("classes");
86  fldClasses.setAccessible(true);
87  Vector<Class<?>> list = (Vector<Class<?>>) fldClasses
88  .get(classLoader);
89  Class<?>[] classes = new Class<?>[list.size()];
90  for (int i = 0; i < classes.length; i++) {
91  classes[i] = list.get(i);
92  }
93  return classes;
94  } catch (Throwable e) {
95  return null;
96  }
97  }
98 
103  public void loadClass(Class<?> cls) {
104  try {
105  classLoader.loadClass(cls.getName());
106  } catch (ClassNotFoundException e) {
107  LogContext.debug("Class " + cls + " not found.");
108  }
109  }
110 
119  public boolean initializeLoadedClasses() {
120  boolean isInitializationSuccessful = true;
121  int nbrClassesInitialized = 0;
122  while (true) {
123  Class<?>[] classes = loadedClasses();
124  if (classes == null) {
125  LogContext
126  .debug("Automatic class initialization not supported.");
127  return false;
128  }
129  if (nbrClassesInitialized >= classes.length)
130  break; // Done.
131  for (int i = nbrClassesInitialized; i < classes.length; i++) {
132  Class<?> cls = classes[i];
133  try {
134  if (SHOW_INITIALIZED.get())
135  LogContext.debug("Initialize ", cls.getName());
136  Class.forName(cls.getName(), true, classLoader);
137  } catch (ClassNotFoundException ex) {
138  isInitializationSuccessful = false;
139  LogContext.error(ex); // Should never happen.
140  }
141  }
142  nbrClassesInitialized = classes.length;
143  }
144  LogContext.debug("Initialization of ", nbrClassesInitialized,
145  " classes loaded by ", classLoader);
146  return isInitializationSuccessful;
147  }
148 
149 }
javolution.context.LogContext
Definition: LogContext.java:56
javolution
javolution.lang.Configurable< Boolean >
javolution.context
Definition: AbstractContext.java:9
javolution.lang.Initializer.SHOW_INITIALIZED
static final Configurable< Boolean > SHOW_INITIALIZED
Definition: Initializer.java:56
javolution.context.LogContext.debug
static void debug(Object... message)
Definition: LogContext.java:87
javolution.lang.Initializer.classLoader
final ClassLoader classLoader
Definition: Initializer.java:64
javolution.context.LogContext.error
static void error(Object... message)
Definition: LogContext.java:102
javolution.lang.Initializer.loadClass
void loadClass(Class<?> cls)
Definition: Initializer.java:103
javolution.lang.Initializer.loadedClasses
Class<?>[] loadedClasses()
Definition: Initializer.java:78
javolution.lang.Initializer
Definition: Initializer.java:50
javolution.lang.Initializer.initializeLoadedClasses
boolean initializeLoadedClasses()
Definition: Initializer.java:119
javolution.lang.Configurable.get
T get()
Definition: Configurable.java:170
javolution.lang.Initializer.Initializer
Initializer(ClassLoader classLoader)
Definition: Initializer.java:69