Lines 18-23
Link Here
|
18 |
import java.awt.event.*; |
18 |
import java.awt.event.*; |
19 |
import java.beans.*; |
19 |
import java.beans.*; |
20 |
import java.io.*; |
20 |
import java.io.*; |
|
|
21 |
import java.lang.reflect.Constructor; |
21 |
import java.lang.reflect.Method; |
22 |
import java.lang.reflect.Method; |
22 |
import java.net.URL; |
23 |
import java.net.URL; |
23 |
import java.util.Enumeration; |
24 |
import java.util.Enumeration; |
Lines 40-45
Link Here
|
40 |
import org.openide.filesystems.*; |
41 |
import org.openide.filesystems.*; |
41 |
import org.openide.filesystems.FileSystem; |
42 |
import org.openide.filesystems.FileSystem; |
42 |
import org.openide.filesystems.JarFileSystem; |
43 |
import org.openide.filesystems.JarFileSystem; |
|
|
44 |
import org.openide.modules.Dependency; |
45 |
import org.openide.modules.SpecificationVersion; |
43 |
import org.openide.options.ControlPanel; |
46 |
import org.openide.options.ControlPanel; |
44 |
import org.openide.windows.WindowManager; |
47 |
import org.openide.windows.WindowManager; |
45 |
import org.openide.windows.OutputWriter; |
48 |
import org.openide.windows.OutputWriter; |
Lines 59-71
Link Here
|
59 |
import org.netbeans.core.windows.WindowManagerImpl; |
62 |
import org.netbeans.core.windows.WindowManagerImpl; |
60 |
import org.netbeans.core.compiler.CompilationEngineImpl; |
63 |
import org.netbeans.core.compiler.CompilationEngineImpl; |
61 |
import org.netbeans.core.perftool.StartLog; |
64 |
import org.netbeans.core.perftool.StartLog; |
|
|
65 |
import org.netbeans.core.modules.ModuleManager; |
62 |
import org.netbeans.core.modules.ModuleSystem; |
66 |
import org.netbeans.core.modules.ModuleSystem; |
63 |
import org.openide.modules.Dependency; |
|
|
64 |
import org.openide.modules.SpecificationVersion; |
65 |
|
67 |
|
66 |
/** This class is a TopManager for Corona environment. |
68 |
/** This class is a TopManager for Corona environment. |
67 |
* |
69 |
* |
68 |
* @author Ales Novak, Jaroslav Tulach, Ian Formanek, Petr Hamernik, Jan Jancura |
70 |
* @author Ales Novak, Jaroslav Tulach, Ian Formanek, Petr Hamernik, Jan Jancura, Jesse Glick |
69 |
*/ |
71 |
*/ |
70 |
public abstract class NbTopManager extends TopManager { |
72 |
public abstract class NbTopManager extends TopManager { |
71 |
/* masks to define the interactivity level */ |
73 |
/* masks to define the interactivity level */ |
Lines 150-156
Link Here
|
150 |
// Set up module-versioning properties, which logger prints. |
152 |
// Set up module-versioning properties, which logger prints. |
151 |
Package p = Package.getPackage ("org.openide"); // NOI18N |
153 |
Package p = Package.getPackage ("org.openide"); // NOI18N |
152 |
|
154 |
|
153 |
putSystemProperty ("org.openide.specification.version", p.getSpecificationVersion (), "1.1.6"); // NOI18N |
155 |
putSystemProperty ("org.openide.specification.version", p.getSpecificationVersion (), "2.3"); // NOI18N |
154 |
putSystemProperty ("org.openide.version", p.getImplementationVersion (), "OwnBuild"); // NOI18N |
156 |
putSystemProperty ("org.openide.version", p.getImplementationVersion (), "OwnBuild"); // NOI18N |
155 |
putSystemProperty ("org.openide.major.version", p.getSpecificationTitle (), "IDE/1"); // NOI18N |
157 |
putSystemProperty ("org.openide.major.version", p.getSpecificationTitle (), "IDE/1"); // NOI18N |
156 |
putSystemProperty ("netbeans.buildnumber", p.getImplementationVersion (), "OwnBuild"); // NOI18N |
158 |
putSystemProperty ("netbeans.buildnumber", p.getImplementationVersion (), "OwnBuild"); // NOI18N |
Lines 938-955
Link Here
|
938 |
public Lkp () { |
940 |
public Lkp () { |
939 |
super (new Lookup[] { |
941 |
super (new Lookup[] { |
940 |
new org.netbeans.core.lookup.TMLookup(), |
942 |
new org.netbeans.core.lookup.TMLookup(), |
|
|
943 |
// #14722: pay attention also to META-INF/services/class.Name resources: |
944 |
createMetaInfServicesLookup(false), |
941 |
createInitialErrorManagerLookup(), |
945 |
createInitialErrorManagerLookup(), |
942 |
}); |
946 |
}); |
943 |
//System.err.println("creating default lookup"); |
947 |
//System.err.println("creating default lookup"); |
944 |
} |
948 |
} |
945 |
|
949 |
|
|
|
950 |
/** @param modules if true, use module classloader, else not */ |
951 |
private static Lookup createMetaInfServicesLookup(boolean modules) { |
952 |
try { |
953 |
Class clazz = Class.forName("org.openide.util.MetaInfServicesLookup"); // NOI18N |
954 |
Constructor c = clazz.getDeclaredConstructor(new Class[] {ClassLoader.class}); |
955 |
c.setAccessible(true); |
956 |
ClassLoader loader; |
957 |
if (modules) { |
958 |
loader = get().getModuleSystem().getManager().getClassLoader(); |
959 |
} else { |
960 |
loader = Lkp.class.getClassLoader(); |
961 |
} |
962 |
return (Lookup)c.newInstance(new Object[] {loader}); |
963 |
} catch (Exception e) { |
964 |
e.printStackTrace(); |
965 |
return Lookup.EMPTY; |
966 |
} |
967 |
} |
968 |
|
946 |
private static Lookup createInitialErrorManagerLookup() { |
969 |
private static Lookup createInitialErrorManagerLookup() { |
947 |
InstanceContent c = new InstanceContent(); |
970 |
InstanceContent c = new InstanceContent(); |
948 |
c.add(Boolean.TRUE, new InitialErrorManagerConvertor()); |
971 |
c.add(Boolean.TRUE, new ConvertorListener()); |
949 |
return new AbstractLookup(c); |
972 |
return new AbstractLookup(c); |
950 |
} |
973 |
} |
951 |
|
974 |
|
952 |
private static final class InitialErrorManagerConvertor implements InstanceContent.Convertor, TaskListener { |
975 |
private static final class ConvertorListener |
|
|
976 |
implements InstanceContent.Convertor, TaskListener, PropertyChangeListener { |
953 |
public Object convert(Object obj) { |
977 |
public Object convert(Object obj) { |
954 |
//System.err.println("IEMC.convert"); |
978 |
//System.err.println("IEMC.convert"); |
955 |
return getDefaultErrorManager(); |
979 |
return getDefaultErrorManager(); |
Lines 972-990
Link Here
|
972 |
if (lookup instanceof Lkp) { |
996 |
if (lookup instanceof Lkp) { |
973 |
Lkp lkp = (Lkp)lookup; |
997 |
Lkp lkp = (Lkp)lookup; |
974 |
Lookup[] old = lkp.getLookups(); |
998 |
Lookup[] old = lkp.getLookups(); |
975 |
if (old.length != 5) throw new IllegalStateException(); |
999 |
if (old.length != 6) throw new IllegalStateException(); |
976 |
Lookup[] nue = new Lookup[] { |
1000 |
Lookup[] nue = new Lookup[] { |
977 |
old[0], // TMLookup |
1001 |
old[0], // TMLookup |
|
|
1002 |
old[1], // metaInfServicesLookup |
978 |
// do NOT include initialErrorManagerLookup; this is now replaced by the layer entry |
1003 |
// do NOT include initialErrorManagerLookup; this is now replaced by the layer entry |
979 |
// Services/Hidden/org-netbeans-core-default-error-manager.instance |
1004 |
// Services/Hidden/org-netbeans-core-default-error-manager.instance |
980 |
old[2], // NbTM.instanceLookup |
1005 |
old[3], // NbTM.instanceLookup |
981 |
old[3], // FolderLookup |
1006 |
old[4], // FolderLookup |
982 |
old[4], // moduleLookup |
1007 |
old[5], // moduleLookup |
983 |
}; |
1008 |
}; |
984 |
lkp.setLookups(nue); |
1009 |
lkp.setLookups(nue); |
985 |
} |
1010 |
} |
986 |
} |
1011 |
} |
987 |
|
1012 |
public void propertyChange(PropertyChangeEvent evt) { |
|
|
1013 |
//System.err.println("modules changed; changing metaInfServicesLookup"); |
1014 |
if (ModuleManager.PROP_ENABLED_MODULES.equals(evt.getPropertyName())) { |
1015 |
// Time to refresh META-INF/services/ lookup; modules turned on or off. |
1016 |
Lookup lookup = Lookup.getDefault(); |
1017 |
if (lookup instanceof Lkp) { |
1018 |
Lkp lkp = (Lkp)lookup; |
1019 |
Lookup[] old = lkp.getLookups(); |
1020 |
Lookup[] nue = (Lookup[])old.clone(); |
1021 |
nue[1] = createMetaInfServicesLookup(true); |
1022 |
lkp.setLookups(nue); |
1023 |
//System.err.println("lookups: " + java.util.Arrays.asList(arr)); |
1024 |
} |
1025 |
} |
1026 |
} |
988 |
} |
1027 |
} |
989 |
|
1028 |
|
990 |
/** When all module classes are accessible thru systemClassLoader, this |
1029 |
/** When all module classes are accessible thru systemClassLoader, this |
Lines 1011-1025
Link Here
|
1011 |
StartLog.logProgress ("Got Services folder"); // NOI18N |
1050 |
StartLog.logProgress ("Got Services folder"); // NOI18N |
1012 |
|
1051 |
|
1013 |
FolderLookup folder = new FolderLookup (df, "SL["); // NOI18N |
1052 |
FolderLookup folder = new FolderLookup (df, "SL["); // NOI18N |
1014 |
folder.addTaskListener(new InitialErrorManagerConvertor()); |
1053 |
folder.addTaskListener(new ConvertorListener()); |
1015 |
StartLog.logProgress ("created FolderLookup"); // NOI18N |
1054 |
StartLog.logProgress ("created FolderLookup"); // NOI18N |
1016 |
|
1055 |
|
1017 |
// extend the lookup |
1056 |
// extend the lookup |
1018 |
Lookup[] arr = new Lookup[] { |
1057 |
Lookup[] arr = new Lookup[] { |
1019 |
lkp.getLookups ()[0], |
1058 |
lkp.getLookups ()[0], // TMLookup |
|
|
1059 |
// replace metaInfServicesLookup with a new one from modules |
1060 |
createMetaInfServicesLookup(true), |
1020 |
// Include initialErrorManagerLookup provisionally, until the folder lookup |
1061 |
// Include initialErrorManagerLookup provisionally, until the folder lookup |
1021 |
// is actually ready and usable |
1062 |
// is actually ready and usable |
1022 |
lkp.getLookups()[1], |
1063 |
lkp.getLookups()[2], // initialErrorManagerLookup |
1023 |
NbTopManager.get ().getInstanceLookup (), |
1064 |
NbTopManager.get ().getInstanceLookup (), |
1024 |
folder.getLookup (), |
1065 |
folder.getLookup (), |
1025 |
NbTopManager.get().getModuleSystem().getManager().getModuleLookup(), |
1066 |
NbTopManager.get().getModuleSystem().getManager().getModuleLookup(), |
Lines 1028-1033
Link Here
|
1028 |
|
1069 |
|
1029 |
lkp.setLookups (arr); |
1070 |
lkp.setLookups (arr); |
1030 |
StartLog.logProgress ("Lookups set"); // NOI18N |
1071 |
StartLog.logProgress ("Lookups set"); // NOI18N |
|
|
1072 |
|
1073 |
// Also listen for changes in modules, as META-INF/services/ would change: |
1074 |
get().getModuleSystem().getManager().addPropertyChangeListener(new ConvertorListener()); |
1031 |
} catch (java.io.IOException ex) { |
1075 |
} catch (java.io.IOException ex) { |
1032 |
ex.printStackTrace(); |
1076 |
ex.printStackTrace(); |
1033 |
throw new IllegalStateException ("Cannot initialize folder Services"); // NOI18N |
1077 |
throw new IllegalStateException ("Cannot initialize folder Services"); // NOI18N |