Community
Participate
Working Groups
Build 20020212 When switching the default JRE (Preferences->Java->Installed JREs), there is a long delay after you press OK. Indexing seems to be taking all CPU. It should take minimal CPU (e.g. sleep for 1 second between each job). Only if a client is waiting for indexes, it should take maximum CPU. Other improvement would be to not even check if the index of a jar file is consistent if its timestamp has not changed. Right now we still open the jar to get all its entries and see if one is missing from the index.
We also need to improve the SetClasspathOperation involved in there. Having 5 projects in my workspace: P1 P2 prereqs P1 P3 prereqs P2, P1 P4 prereqs P2, P1 P5 prereqs P3, P2, P1 Changing JRE settings, trigger too many SetClasspathOperations (should be exactly 5 occurrences). SetClasspathOperation - classpath : { /P5/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P1[CPE_PROJECT][K_SOURCE][isExported:false], /P3 [CPE_PROJECT][K_SOURCE][isExported:false], /P2[CPE_PROJECT][K_SOURCE] [isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P4/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P2[CPE_PROJECT][K_SOURCE][isExported:false], /P1 [CPE_PROJECT][K_SOURCE][isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P3/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P1[CPE_PROJECT][K_SOURCE][isExported:false], /P2 [CPE_PROJECT][K_SOURCE][isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P2/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P1[CPE_PROJECT][K_SOURCE][isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P1/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P5/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P1[CPE_PROJECT][K_SOURCE][isExported:false], /P3 [CPE_PROJECT][K_SOURCE][isExported:false], /P2[CPE_PROJECT][K_SOURCE] [isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P4/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P2[CPE_PROJECT][K_SOURCE][isExported:false], /P1 [CPE_PROJECT][K_SOURCE][isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P3/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P1[CPE_PROJECT][K_SOURCE][isExported:false], /P2 [CPE_PROJECT][K_SOURCE][isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P2/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P1[CPE_PROJECT][K_SOURCE][isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P1/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P5/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P1[CPE_PROJECT][K_SOURCE][isExported:false], /P3 [CPE_PROJECT][K_SOURCE][isExported:false], /P2[CPE_PROJECT][K_SOURCE] [isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P4/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P2[CPE_PROJECT][K_SOURCE][isExported:false], /P1 [CPE_PROJECT][K_SOURCE][isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P3/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P1[CPE_PROJECT][K_SOURCE][isExported:false], /P2 [CPE_PROJECT][K_SOURCE][isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P2/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P1[CPE_PROJECT][K_SOURCE][isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P1/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P5/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P1[CPE_PROJECT][K_SOURCE][isExported:false], /P3 [CPE_PROJECT][K_SOURCE][isExported:false], /P2[CPE_PROJECT][K_SOURCE] [isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P4/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P2[CPE_PROJECT][K_SOURCE][isExported:false], /P1 [CPE_PROJECT][K_SOURCE][isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P3/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P1[CPE_PROJECT][K_SOURCE][isExported:false], /P2 [CPE_PROJECT][K_SOURCE][isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P2/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false], /P1[CPE_PROJECT][K_SOURCE][isExported:false] - output location : <Reuse Existing Output Location> SetClasspathOperation - classpath : { /P1/src[CPE_SOURCE][K_SOURCE][isExported:false], JRE_LIB [CPE_VARIABLE][K_SOURCE][sourcePath:JRE_SRC][rootPath:JRE_SRCROOT] [isExported:false] - output location : <Reuse Existing Output Location>
New traces show 15 classpath settings instead of 20 (?). Anyway, 15 updates is 3 var x 5 projects, due to the JRE var trio. These variables should be allowed to be set simultaneously to avoid multiple refreshes.
Added facility to update multiple variables at once, when using it, the number of classpath setting operations is down to 5 (once per project).
Also fixed the JRE variable updating scenario to avoid updating cycle markers if variable could not denote a project name. Fixed