Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArun Thondapu2017-05-31 07:14:10 +0000
committerArun Thondapu2017-05-31 09:56:31 +0000
commitdcd15a168596fb59b04dcb5896252b3429dff115 (patch)
tree96b9987f6855bac8f2c23633e25cbe191d8207cb
parenta99892a2d73a61e494bb0bfe06129cec40f9ffc4 (diff)
downloadrt.equinox.framework-dcd15a168596fb59b04dcb5896252b3429dff115.tar.gz
rt.equinox.framework-dcd15a168596fb59b04dcb5896252b3429dff115.tar.xz
rt.equinox.framework-dcd15a168596fb59b04dcb5896252b3429dff115.zip
Bug 517507: Remove Java 9 hacks that were added to the launcher in
Oxygen M7 Revert "Bug 493761: Platform won't launch on Java 9-ea builds (InjectionException: NoClassDefFoundError: javax/annotation/PostConstruct)" This reverts commit 4295e27d8e41283eadba7aa2e098126b22c5a7a9. This reverts commit 28ff351cfc1b33eb84c70b295e8a86bf8b70d21f. This reverts commit 2e0869c0e8cf5f4125a3237f22ed6f166a065fbb.
-rw-r--r--features/org.eclipse.equinox.executable.feature/library/cocoa/eclipseCocoa.c40
-rw-r--r--features/org.eclipse.equinox.executable.feature/library/eclipse.c54
-rw-r--r--features/org.eclipse.equinox.executable.feature/library/eclipseNix.c26
-rw-r--r--features/org.eclipse.equinox.executable.feature/library/eclipseOS.h4
-rw-r--r--features/org.eclipse.equinox.executable.feature/library/win32/eclipseWin.c31
5 files changed, 81 insertions, 74 deletions
diff --git a/features/org.eclipse.equinox.executable.feature/library/cocoa/eclipseCocoa.c b/features/org.eclipse.equinox.executable.feature/library/cocoa/eclipseCocoa.c
index 023223103..6bfa9def6 100644
--- a/features/org.eclipse.equinox.executable.feature/library/cocoa/eclipseCocoa.c
+++ b/features/org.eclipse.equinox.executable.feature/library/cocoa/eclipseCocoa.c
@@ -44,7 +44,7 @@ char *findCommand(char *command);
char* defaultVM = "java";
char* vmLibrary = "JavaVM";
char* shippedVMDir = "../../jre/Contents/Home/bin/"; // relative to launcher
-int isModularJVM = 0;
+int isSunMaxPermSizeVM = 0;
static void adjustLibraryPath(char * vmLibrary);
static char * findLib(char * command);
@@ -330,8 +330,7 @@ char** getArgVM( char* vm )
return result;
}
-/* set isModularJVM to 1 if the JVM version is >= 9, 0 otherwise */
-void checkJavaVersion(char* command) {
+char * getJavaVersion(char* command) {
FILE *fp;
char buffer[4096];
char *version = NULL, *firstChar;
@@ -339,7 +338,7 @@ void checkJavaVersion(char* command) {
sprintf(buffer,"%s -version 2>&1", command);
fp = popen(buffer, "r");
if (fp == NULL) {
- return;
+ return NULL;
}
while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) {
if (!version) {
@@ -355,20 +354,25 @@ void checkJavaVersion(char* command) {
version[numChars] = '\0';
}
}
- if (version != NULL) {
- char *str = version;
- /* According to the new Java version-string scheme, the first element is
- * the major version number, details at http://openjdk.java.net/jeps/223 */
- char *majorVersion = strtok(str, ".-");
- if (majorVersion != NULL && (strtol(majorVersion, NULL, 10) >= 9)) {
- isModularJVM = 1;
+ if (strstr(buffer, "Java HotSpot(TM)") || strstr(buffer, "OpenJDK")) {
+ if (version != NULL) {
+ _TCHAR *value = strtok(version, ".");
+ if (value != NULL && (strtol(value, NULL, 10) == 1)) {
+ value = strtok(NULL, ".");
+ if (strtol(value, NULL, 10) < 8) {
+ isSunMaxPermSizeVM = 1;
+ }
+ }
}
- free(version);
+ break;
+ }
+ if (strstr(buffer, "IBM") != NULL) {
+ isSunMaxPermSizeVM = 0;
+ break;
}
- break;
}
pclose(fp);
- return;
+ return version;
}
char * getJavaHome() {
@@ -425,8 +429,8 @@ char * findVMLibrary( char* command ) {
if (strstr(cmd, "/JavaVM.framework/") != NULL && (strstr(cmd, "/Current/") != NULL || strstr(cmd, "/A/") != NULL)) {
cmd = getJavaHome();
}
- // This is necessary to initialize isModularJVM
- checkJavaVersion(cmd);
+ // This is necessary to initialize isSunMaxPermSizeVM
+ getJavaVersion(cmd);
result = JAVA_FRAMEWORK;
if (strstr(cmd, "/JavaVM.framework/") == NULL) {
char * lib = findLib(cmd);
@@ -621,8 +625,8 @@ void processVMArgs(char **vmargs[] )
}
}
-int isModularVM( _TCHAR * javaVM, _TCHAR * jniLib ) {
- return isModularJVM;
+int isMaxPermSizeVM( _TCHAR * javaVM, _TCHAR * jniLib ) {
+ return isSunMaxPermSizeVM;
}
NSString* getApplicationSupport() {
diff --git a/features/org.eclipse.equinox.executable.feature/library/eclipse.c b/features/org.eclipse.equinox.executable.feature/library/eclipse.c
index fb01ab71c..fa7db0cfc 100644
--- a/features/org.eclipse.equinox.executable.feature/library/eclipse.c
+++ b/features/org.eclipse.equinox.executable.feature/library/eclipse.c
@@ -252,8 +252,6 @@ home directory.");
#define PERM_GEN _T_ECLIPSE("--launcher.XXMaxPermSize")
#define XXPERMGEN _T_ECLIPSE("-XX:MaxPermSize=")
-#define ADDMODULES _T_ECLIPSE("--add-modules")
-#define PERMIT_ILLEGAL_ACCESS _T_ECLIPSE("--permit-illegal-access")
#define ACTION_OPENFILE _T_ECLIPSE("openFile")
#define GTK_VERSION _T_ECLIPSE("--launcher.GTK_version")
@@ -1037,40 +1035,28 @@ static _TCHAR** mergeConfigurationFilesVMArgs() {
}
static void adjustVMArgs(_TCHAR *javaVM, _TCHAR *jniLib, _TCHAR **vmArgv[]) {
- /* JVMs whose version is >= 9 need an extra VM argument (--add-modules) to start eclipse but earlier versions
- * do not recognize this argument, remove it from the list of VM arguments when the JVM version is below 9 */
+ /* Sun/Oracle VMs below version 8 need some extra perm gen space */
+ /* Detecting Sun VM is expensive - only do so if necessary */
+ if (permGen != NULL) {
+ int specified = 0, i = -1;
+
+ /* first check to see if it is already specified */
+ while ((*vmArgv)[++i] != NULL) {
+ /* we are also counting the number of args here */
+ if (!specified && _tcsncmp((*vmArgv)[i], XXPERMGEN, _tcslen(XXPERMGEN)) == 0) {
+ specified = 1;
+ }
+ }
- int i = 0;
+ if (!specified && isMaxPermSizeVM(javaVM, jniLib)) {
+ _TCHAR ** oldArgs = *vmArgv;
+ _TCHAR *newArg = malloc((_tcslen(XXPERMGEN) + _tcslen(permGen) + 1) * sizeof(_TCHAR));
+ _stprintf(newArg, _T_ECLIPSE("%s%s"), XXPERMGEN, permGen);
- if (!isModularVM(javaVM, jniLib)) {
- while ((*vmArgv)[i] != NULL) {
- if (_tcsncmp((*vmArgv)[i], ADDMODULES, _tcslen(ADDMODULES)) == 0 || _tcsncmp((*vmArgv)[i], PERMIT_ILLEGAL_ACCESS, _tcslen(PERMIT_ILLEGAL_ACCESS)) == 0) {
- int j = 0, k = 0;
-
- if ((_tcschr((*vmArgv)[i], '=') != NULL) && ((*vmArgv)[i][13] == '=')) {
- /* --add-modules=<value> */
- j = i + 1;
- } else if (_tcslen(ADDMODULES) == _tcslen((*vmArgv)[i])) {
- /* --add-modules <value> OR --add-modules <end-of-vmArgv> */
- ((*vmArgv)[i + 1] != NULL) ? (j = i + 2) : (j = i + 1);
- } else if (_tcslen(PERMIT_ILLEGAL_ACCESS) == _tcslen((*vmArgv)[i])) {
- /* --permit-illegal-access */
- j = i + 1;
- } else {
- /* Probable new argument e.g. --add-modules-if-required or misspelled argument e.g. --add-modulesq */
- i++;
- continue;
- }
-
- /* shift all remaining arguments, but keep i, so that we can find repeated occurrences of --add-modules */
- k = i;
- (*vmArgv)[k] = (*vmArgv)[j];
- while ((*vmArgv)[j] != NULL) {
- (*vmArgv)[++k] = (*vmArgv)[++j];
- }
- } else {
- i++;
- }
+ *vmArgv = malloc((i + 2) * sizeof(_TCHAR *));
+ memcpy(*vmArgv, oldArgs, i * sizeof(_TCHAR *));
+ (*vmArgv)[i] = newArg;
+ (*vmArgv)[i + 1] = 0;
}
}
}
diff --git a/features/org.eclipse.equinox.executable.feature/library/eclipseNix.c b/features/org.eclipse.equinox.executable.feature/library/eclipseNix.c
index 5cfced7a0..bda8b3cb9 100644
--- a/features/org.eclipse.equinox.executable.feature/library/eclipseNix.c
+++ b/features/org.eclipse.equinox.executable.feature/library/eclipseNix.c
@@ -168,8 +168,7 @@ JavaResults* startJavaVM( _TCHAR* libPath, _TCHAR* vmArgs[], _TCHAR* progArgs[],
return startJavaJNI(libPath, vmArgs, progArgs, jarFile);
}
-/* returns 1 if the JVM version is >= 9, 0 otherwise */
-int isModularVM( _TCHAR * javaVM, _TCHAR * jniLib ) {
+int isMaxPermSizeVM( _TCHAR * javaVM, _TCHAR * jniLib ) {
if (javaVM == NULL) {
return 0;
}
@@ -195,17 +194,22 @@ int isModularVM( _TCHAR * javaVM, _TCHAR * jniLib ) {
version[numChars] = '\0';
}
}
- if (version != NULL) {
- _TCHAR *str = version;
- /* According to the new Java version-string scheme, the first element is
- * the major version number, details at http://openjdk.java.net/jeps/223 */
- _TCHAR *majorVersion = _tcstok(str, ".-");
- if (majorVersion != NULL && (_tcstol(majorVersion, NULL, 10) >= 9)) {
- result = 1;
+ if (_tcsstr(buffer, "Java HotSpot(TM)") || _tcsstr(buffer, "OpenJDK")) {
+ if (version != NULL) {
+ _TCHAR *value = _tcstok(version, ".");
+ if (value != NULL && (_tcstol(value, NULL, 10) == 1)) {
+ value = _tcstok(NULL, ".");
+ if (_tcstol(value, NULL, 10) < 8) {
+ result = 1;
+ }
+ }
}
- free(version);
+ break;
+ }
+ if (_tcsstr(buffer, "IBM") != NULL) {
+ result = 0;
+ break;
}
- break;
}
pclose(fp);
return result;
diff --git a/features/org.eclipse.equinox.executable.feature/library/eclipseOS.h b/features/org.eclipse.equinox.executable.feature/library/eclipseOS.h
index 0b2b6a782..7e78322b1 100644
--- a/features/org.eclipse.equinox.executable.feature/library/eclipseOS.h
+++ b/features/org.eclipse.equinox.executable.feature/library/eclipseOS.h
@@ -110,8 +110,8 @@ extern JavaResults* startJavaVM( _TCHAR* libPath, _TCHAR* vmArgs[], _TCHAR* prog
/* do any platform specific processing of the user vmargs */
extern void processVMArgs(_TCHAR **vmargs[] );
-/* is this a JVM whose version is >= 9 (then allow the --add-modules VM argument), returns 0 if we don't know */
-extern int isModularVM( _TCHAR * javaVM, _TCHAR * jniLib );
+/* is this a Sun/Oracle VM whose version is < 8 (then it needs extra perm gen space), returns 0 if we don't know */
+extern int isMaxPermSizeVM( _TCHAR * javaVM, _TCHAR * jniLib );
/* an array of paths that will need to be on the search path to load the vm shared library */
extern _TCHAR ** getVMLibrarySearchPath(_TCHAR * vmLibrary);
diff --git a/features/org.eclipse.equinox.executable.feature/library/win32/eclipseWin.c b/features/org.eclipse.equinox.executable.feature/library/win32/eclipseWin.c
index 73a394344..4df9e99dd 100644
--- a/features/org.eclipse.equinox.executable.feature/library/win32/eclipseWin.c
+++ b/features/org.eclipse.equinox.executable.feature/library/win32/eclipseWin.c
@@ -77,7 +77,10 @@ typedef struct {
WORD codepage;
} TRANSLATIONS;
+#define COMPANY_NAME_KEY _T_ECLIPSE("\\StringFileInfo\\%04x%04x\\CompanyName")
#define PRODUCT_VERSION_KEY _T_ECLIPSE("\\StringFileInfo\\%04x%04x\\ProductVersion")
+#define SUN_MICROSYSTEMS _T_ECLIPSE("Sun Microsystems")
+#define ORACLE _T_ECLIPSE("Oracle")
static void sendOpenFileMessage(HWND window) {
_TCHAR* id;
@@ -597,16 +600,16 @@ JavaResults* startJavaVM( _TCHAR* libPath, _TCHAR* vmArgs[], _TCHAR* progArgs[],
return startJavaJNI(libPath, vmArgs, progArgs, jarFile);
}
-/* returns 1 if the JVM version is >= 9, 0 otherwise */
-int isModularVM( _TCHAR * javaVM, _TCHAR * jniLib ) {
+int isMaxPermSizeVM( _TCHAR * javaVM, _TCHAR * jniLib ) {
_TCHAR *vm = (jniLib != NULL) ? jniLib : javaVM;
int result = 0;
DWORD infoSize;
DWORD handle;
void * info;
- _TCHAR *versionKey, *version, *majorVersion = NULL;
- int versionSize;
+ _TCHAR *key, *value, *versionKey, *version, *majorVersion = NULL;
+ size_t i;
+ int valueSize, versionSize;
if (vm == NULL)
return 0;
@@ -620,15 +623,25 @@ int isModularVM( _TCHAR * javaVM, _TCHAR * jniLib ) {
VerQueryValue(info, _T_ECLIPSE("\\VarFileInfo\\Translation"), (void *) &translations, &translationsSize);
/* this size is only right because %04x is 4 characters */
+ key = malloc((_tcslen(COMPANY_NAME_KEY) + 1) * sizeof(_TCHAR));
versionKey = malloc((_tcslen(PRODUCT_VERSION_KEY) + 1) * sizeof(_TCHAR));
- _stprintf(versionKey, PRODUCT_VERSION_KEY, translations[0].language, translations[0].codepage);
- VerQueryValue(info, versionKey, (void *)&version, &versionSize);
- if (versionSize >= 1) {
- majorVersion = _tcstok(version, ".-");
- if ((majorVersion != NULL) && (_tcstol(majorVersion, NULL, 10) >= 9)) {
+ for (i = 0; i < (translationsSize / sizeof(TRANSLATIONS)); i++) {
+ _stprintf(key, COMPANY_NAME_KEY, translations[i].language, translations[i].codepage);
+ VerQueryValue(info, key, (void *)&value, &valueSize);
+
+ if ((_tcsncmp(value, SUN_MICROSYSTEMS, _tcslen(SUN_MICROSYSTEMS)) == 0) || (_tcsncmp(value, ORACLE, _tcslen(ORACLE)) == 0)) {
+ _stprintf(versionKey, PRODUCT_VERSION_KEY, translations[i].language, translations[i].codepage);
+ VerQueryValue(info, versionKey, (void *)&version, &versionSize);
+ if (versionSize > 1) {
+ majorVersion = _tcstok(version, ".");
+ }
+ if ((majorVersion != NULL) && (_tcstol(majorVersion, NULL, 10) < 8)) {
result = 1;
}
+ break;
}
+ }
+ free(key);
free(versionKey);
}
free(info);

Back to the top