From: Alexander Kriegisch Date: Sat, 13 Mar 2021 17:09:02 +0000 (+0700) Subject: Fix 'ajdoc' tests for Java 15 build X-Git-Tag: java16-add-opens~34^2~7 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=2fd6804db8aebfe6634e4df7d5e5c71fe856d4f6;p=aspectj.git Fix 'ajdoc' tests for Java 15 build Signed-off-by: Alexander Kriegisch --- diff --git a/ajde.core/src/test/java/org/aspectj/ajde/core/TestCompilerConfiguration.java b/ajde.core/src/test/java/org/aspectj/ajde/core/TestCompilerConfiguration.java index d2081df15..0376836c1 100644 --- a/ajde.core/src/test/java/org/aspectj/ajde/core/TestCompilerConfiguration.java +++ b/ajde.core/src/test/java/org/aspectj/ajde/core/TestCompilerConfiguration.java @@ -1,11 +1,11 @@ /******************************************************************** - * Copyright (c) 2007 Contributors. All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://eclipse.org/legal/epl-v10.html - * - * Contributors: IBM Corporation - initial API and implementation + * Copyright (c) 2007 Contributors. All rights reserved. + * This program and the accompanying materials are made available + * under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution and is available at + * http://eclipse.org/legal/epl-v10.html + * + * Contributors: IBM Corporation - initial API and implementation * Helen Hawkins - initial version *******************************************************************/ package org.aspectj.ajde.core; @@ -61,7 +61,7 @@ public class TestCompilerConfiguration implements ICompilerConfiguration { public String getClasspath() { StringBuilder classpath = new StringBuilder(); classpath.append(projectPath); - if (LangUtil.is19VMOrGreater()) { + if (LangUtil.is9VMOrGreater()) { classpath.append(File.pathSeparator).append(LangUtil.getJrtFsFilePath()); } else { classpath.append(File.pathSeparator).append(System.getProperty("sun.boot.class.path")); diff --git a/ajde/src/test/java/org/aspectj/ajde/ui/utils/TestCompilerConfiguration.java b/ajde/src/test/java/org/aspectj/ajde/ui/utils/TestCompilerConfiguration.java index a6fec514d..4dd195aed 100644 --- a/ajde/src/test/java/org/aspectj/ajde/ui/utils/TestCompilerConfiguration.java +++ b/ajde/src/test/java/org/aspectj/ajde/ui/utils/TestCompilerConfiguration.java @@ -1,11 +1,11 @@ /******************************************************************** - * Copyright (c) 2007 Contributors. All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://eclipse.org/legal/epl-v10.html - * - * Contributors: IBM Corporation - initial API and implementation + * Copyright (c) 2007 Contributors. All rights reserved. + * This program and the accompanying materials are made available + * under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution and is available at + * http://eclipse.org/legal/epl-v10.html + * + * Contributors: IBM Corporation - initial API and implementation * Helen Hawkins - initial version (bug 148190) *******************************************************************/ package org.aspectj.ajde.ui.utils; @@ -67,7 +67,7 @@ public class TestCompilerConfiguration implements ICompilerConfiguration { public String getClasspath() { String cp = projectPath + File.pathSeparator + System.getProperty("sun.boot.class.path") + File.pathSeparator + TestUtil.aspectjrtClasspath(); - if (LangUtil.is19VMOrGreater()) { + if (LangUtil.is9VMOrGreater()) { cp = LangUtil.getJrtFsFilePath()+File.pathSeparator+cp; } return cp; diff --git a/ajdoc/pom.xml b/ajdoc/pom.xml index fa24692c9..e92109017 100644 --- a/ajdoc/pom.xml +++ b/ajdoc/pom.xml @@ -35,13 +35,11 @@ ${project.version} - - - com.github.olivergondza - maven-jdk-tools-wrapper - 0.1 - - + + com.github.olivergondza + maven-jdk-tools-wrapper + 0.1 + asm asm @@ -49,5 +47,45 @@ system ${project.basedir}/../lib/asm/asm-8.0.1.renamed.jar + + + + org.aspectj + org.eclipse.jdt.core + 1.0 + system + ${project.basedir}/../org.eclipse.jdt.core/jdtcore-for-aspectj.jar + + + org.aspectj + org.aspectj.matcher + ${project.version} + test + + + org.aspectj + weaver + ${project.version} + test + + + org.aspectj + bcel-builder + ${project.version} + test + + + org.aspectj + runtime + ${project.version} + test + + + org.aspectj + testing-util + ${project.version} + test + + diff --git a/ajdoc/src/main/java/org/aspectj/tools/ajdoc/HtmlDecorator.java b/ajdoc/src/main/java/org/aspectj/tools/ajdoc/HtmlDecorator.java index 42d029e06..3e3a05c07 100644 --- a/ajdoc/src/main/java/org/aspectj/tools/ajdoc/HtmlDecorator.java +++ b/ajdoc/src/main/java/org/aspectj/tools/ajdoc/HtmlDecorator.java @@ -31,6 +31,7 @@ import org.aspectj.asm.AsmManager; import org.aspectj.asm.HierarchyWalker; import org.aspectj.asm.IProgramElement; import org.aspectj.asm.IRelationship; +import org.aspectj.util.LangUtil; import org.aspectj.util.TypeSafeEnum; /** @@ -38,6 +39,10 @@ import org.aspectj.util.TypeSafeEnum; */ class HtmlDecorator { + public static final String TYPE_NAME_LABEL = LangUtil.is15VMOrGreater() + ? "type-name-label" + : (LangUtil.is1dot8VMOrGreater() ? "typeNameLabel" : "strong"); + private static final String POINTCUT_DETAIL = "Pointcut Detail"; private static final String ADVICE_DETAIL = "Advice Detail"; private static final String DECLARE_DETAIL = "Declare Detail"; @@ -267,19 +272,14 @@ class HtmlDecorator { } } else { - // Java8: - //
static class ClassA.InnerAspect
-					classStartIndex = fileContents.toString().indexOf("class ");
-					if (classStartIndex == -1) {
-						// Java7: 464604
-						// 
public class Azpect
-						classStartIndex = fileContents.toString().indexOf("class ");
-					}
+					// Java15: 
static class ClassA.InnerAspect
+					// Java8: 
static class ClassA.InnerAspect
+					// Java7 (464604): 
public class Azpect
+					classStartIndex = fileContents.toString().indexOf("class ");
 					int classEndIndex = fileContents.toString().indexOf("", classStartIndex);
 					if (classEndIndex != -1) {
-						// Convert it to "aspect ClassA.InnerAspect"
-						String classLine = fileContents.toString().substring(classStartIndex, classEndIndex);
-						String aspectLine = "aspect"+fileContents.substring(classStartIndex+5,classEndIndex);
+						// Convert it to "aspect ClassA.InnerAspect"
+						String aspectLine = "aspect" + fileContents.substring(classStartIndex + 5, classEndIndex);
 						fileContents.delete(classStartIndex, classEndIndex);
 						fileContents.insert(classStartIndex, aspectLine);
 					}
diff --git a/ajdoc/src/test/java/org/aspectj/tools/ajdoc/AjdocOutputChecker.java b/ajdoc/src/test/java/org/aspectj/tools/ajdoc/AjdocOutputChecker.java
index 431018401..3e69f4887 100644
--- a/ajdoc/src/test/java/org/aspectj/tools/ajdoc/AjdocOutputChecker.java
+++ b/ajdoc/src/test/java/org/aspectj/tools/ajdoc/AjdocOutputChecker.java
@@ -1,11 +1,11 @@
 /********************************************************************
- * Copyright (c) 2005 Contributors. All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: IBM Corporation - initial API and implementation 
+ * Copyright (c) 2005 Contributors. All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: IBM Corporation - initial API and implementation
  * 				 Helen Hawkins   - iniital version
  *******************************************************************/
 package org.aspectj.tools.ajdoc;
@@ -25,8 +25,8 @@ import org.aspectj.util.LangUtil;
 public class AjdocOutputChecker {
 
 	/**
-	 * Checks whether the given html file contains the required String. 
-	 * 
+	 * Checks whether the given html file contains the required String.
+	 *
 	 * @param htmlFile
 	 * @param requiredString
 	 * @return true if the file contains the given string or
@@ -53,12 +53,12 @@ public class AjdocOutputChecker {
 
 	/**
 	 * Returns those strings from the given array which aren't in the html file.
-	 * 
+	 *
 	 * @param htmlFile
 	 * @param an array of requiredStrings
 	 * @return a List of those strings not found
 	 * @throws Exception
-	 */	
+	 */
 	public static List getMissingStringsInFile(File htmlFile, String[] requiredStrings) throws Exception {
 		List missingStrings = new ArrayList<>();
 		for (String string : requiredStrings) {
@@ -68,16 +68,16 @@ public class AjdocOutputChecker {
 		}
 		return missingStrings;
 	}
-	
+
 	/**
 	 * Checks whether the section of the html file contains the
 	 * required String
-	 * 
+	 *
 	 * @param htmlFile
 	 * @param requiredString
 	 * @param sectionHeader
-	 * @return true if the file contains the given string within the 
-	 * required section or false otherwise (or if the file is null or 
+	 * @return true if the file contains the given string within the
+	 * required section or false otherwise (or if the file is null or
 	 * not an html file)
 	 * @throws Exception
 	 */
@@ -91,7 +91,7 @@ public class AjdocOutputChecker {
 		while (line != null) {
 			if (line.contains(sectionHeader)) {
 				String nextLine = reader.readLine();
-				while (nextLine != null && 
+				while (nextLine != null &&
 						(!nextLine.contains("========"))) {
 					if (nextLine.contains(requiredString)) {
 						reader.close();
@@ -107,11 +107,11 @@ public class AjdocOutputChecker {
 		reader.close();
 		return false;
 	}
-	
+
 	/**
 	 * Returns those strings from the given array which aren't in the
-	 * ajdoc html file	 
-	 *  
+	 * ajdoc html file
+	 *
 	 * @param htmlFile
 	 * @param an array of requiredStrings
 	 * @param sectionHeader
@@ -130,10 +130,10 @@ public class AjdocOutputChecker {
 	}
 
 	/**
-	 * Returns whether the class data section has the expected 
-	 * relationship and target i.e. have the relationships been 
+	 * Returns whether the class data section has the expected
+	 * relationship and target i.e. have the relationships been
 	 * applied to the type.
-	 * 
+	 *
 	 * @param the ajdoc html file
 	 * @param the detail sectionHeader, for example "DECLARE DETAIL SUMMARY"
 	 * @param the source of the relationship, for example "Point()"
@@ -143,7 +143,7 @@ public class AjdocOutputChecker {
 	 * false otherwise
 	 */
 	public static boolean classDataSectionContainsRel(File htmlFile,
-			HtmlDecorator.HtmlRelationshipKind relationship, 
+			HtmlDecorator.HtmlRelationshipKind relationship,
 			String target) throws Exception {
 		if (((htmlFile == null) || !htmlFile.getAbsolutePath().endsWith("html"))) {
 			return false;
@@ -154,7 +154,7 @@ public class AjdocOutputChecker {
 			if (line.contains("START OF CLASS DATA")) {
 				// found the required class data section
 				String subLine = reader.readLine();
-				while(subLine != null 
+				while(subLine != null
 						&& (!subLine.contains("========"))){
 					int relIndex = subLine.indexOf(relationship.toString());
 					int targetIndex = subLine.indexOf(target);
@@ -175,11 +175,11 @@ public class AjdocOutputChecker {
 		reader.close();
 		return false;
 	}
-	
+
 	/**
-	 * Returns whether the supplied source has the expected 
+	 * Returns whether the supplied source has the expected
 	 * relationship and target within the given detail section
-	 * 
+	 *
 	 * @param the ajdoc html file
 	 * @param the detail sectionHeader, for example "DECLARE DETAIL SUMMARY"
 	 * @param the source of the relationship, for example "Point()"
@@ -188,9 +188,9 @@ public class AjdocOutputChecker {
 	 * @return true if the section contains the expected source/relationship/target,
 	 * false otherwise
 	 */
-	public static boolean detailSectionContainsRel(File htmlFile, 
-			String sectionHeader, String source, 
-			HtmlDecorator.HtmlRelationshipKind relationship, 
+	public static boolean detailSectionContainsRel(File htmlFile,
+			String sectionHeader, String source,
+			HtmlDecorator.HtmlRelationshipKind relationship,
 			String target) throws Exception {
 		if (((htmlFile == null) || !htmlFile.getAbsolutePath().endsWith("html"))) {
 			return false;
@@ -210,9 +210,9 @@ public class AjdocOutputChecker {
 							nextLine.contains("NAME=\"" + source + "\"") || nextLine.contains("name=\"" + source + "\"")) {
 						// found the required subsection
 						String subLine = reader.readLine();
-						while(subLine != null 
+						while(subLine != null
 								&& (!subLine.contains("========"))
-								&& (!subLine.contains("NAME") && !subLine.contains("name"))) {
+								&& (!subLine.contains("NAME=") && !subLine.contains("name="))) {
 							int relIndex = subLine.indexOf(relationship.toString());
 							int targetIndex = subLine.indexOf(target);
 							if ((relIndex != -1) && (targetIndex != -1)) {
@@ -239,9 +239,9 @@ public class AjdocOutputChecker {
 	}
 
 	/**
-	 * Returns whether the supplied source has the expected 
+	 * Returns whether the supplied source has the expected
 	 * relationship and target within the given summary section
-	 * 
+	 *
 	 * @param the ajdoc html file
 	 * @param the detail sectionHeader, for example "DECLARE SUMMARY"
 	 * @param the source of the relationship, for example "Point()"
@@ -251,10 +251,10 @@ public class AjdocOutputChecker {
 	 * false otherwise
 	 */
 	public static boolean summarySectionContainsRel(
-			File htmlFile, 
-			String sectionHeader, 
-			String source, 
-			HtmlDecorator.HtmlRelationshipKind relationship, 
+			File htmlFile,
+			String sectionHeader,
+			String source,
+			HtmlDecorator.HtmlRelationshipKind relationship,
 			String target) throws Exception {
 		if (((htmlFile == null) || !htmlFile.getAbsolutePath().endsWith("html"))) {
 			return false;
@@ -272,7 +272,7 @@ public class AjdocOutputChecker {
 					if (nextLine.contains(source)) {
 						// found the required subsection
 						String subLine = nextLine;
-						while(subLine != null 
+						while(subLine != null
 								&& (!subLine.contains("========"))
 								&& (!subLine.contains(""))) {
 							int relIndex = subLine.indexOf(relationship.toString());
@@ -299,5 +299,5 @@ public class AjdocOutputChecker {
 		reader.close();
 		return false;
 	}
-	
+
 }
diff --git a/ajdoc/src/test/java/org/aspectj/tools/ajdoc/AjdocTestCase.java b/ajdoc/src/test/java/org/aspectj/tools/ajdoc/AjdocTestCase.java
index acfb5eda4..0baeb7dcd 100644
--- a/ajdoc/src/test/java/org/aspectj/tools/ajdoc/AjdocTestCase.java
+++ b/ajdoc/src/test/java/org/aspectj/tools/ajdoc/AjdocTestCase.java
@@ -1,11 +1,11 @@
 /********************************************************************
- * Copyright (c) 2005 Contributors. All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: IBM Corporation - initial API and implementation 
+ * Copyright (c) 2005 Contributors. All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: IBM Corporation - initial API and implementation
  * 				 Helen Hawkins   - iniital version
  *******************************************************************/
 package org.aspectj.tools.ajdoc;
@@ -160,12 +160,12 @@ public abstract class AjdocTestCase extends TestCase {
 		if (inputFiles.length == 0) {
 			fail("need to pass some files into ajdoc");
 		}
-		if (!sourceLevel.equals("1.3") && 
-			!sourceLevel.equals("1.4") && 
-			!sourceLevel.equals("1.5") && 
-			!sourceLevel.equals("1.6") && 
-			!sourceLevel.equals("1.7") && 
-			!sourceLevel.equals("1.8") && 
+		if (!sourceLevel.equals("1.3") &&
+			!sourceLevel.equals("1.4") &&
+			!sourceLevel.equals("1.5") &&
+			!sourceLevel.equals("1.6") &&
+			!sourceLevel.equals("1.7") &&
+			!sourceLevel.equals("1.8") &&
 			!sourceLevel.equals("1.9") &&
 			!sourceLevel.equals("10")) {
 			fail("need to pass ajdoc '1.3' > '1.9' as the source level");
@@ -191,12 +191,12 @@ public abstract class AjdocTestCase extends TestCase {
 		if (!visibility.equals("public") && !visibility.equals("protected") && !visibility.equals("private")) {
 			fail("need to pass 'public','protected' or 'private' visibility to ajdoc");
 		}
-		if (!sourceLevel.equals("1.3") && 
-			!sourceLevel.equals("1.4") && 
-			!sourceLevel.equals("1.5") && 
-			!sourceLevel.equals("1.6") && 
-			!sourceLevel.equals("1.7") && 
-			!sourceLevel.equals("1.8") && 
+		if (!sourceLevel.equals("1.3") &&
+			!sourceLevel.equals("1.4") &&
+			!sourceLevel.equals("1.5") &&
+			!sourceLevel.equals("1.6") &&
+			!sourceLevel.equals("1.7") &&
+			!sourceLevel.equals("1.8") &&
 			!sourceLevel.equals("1.9") &&
 			!sourceLevel.startsWith("9") &&
 			!sourceLevel.startsWith("10")) {
@@ -217,7 +217,7 @@ public abstract class AjdocTestCase extends TestCase {
 		args[2] = sourceLevel;
 		args[3] = "-classpath";
 		StringBuilder classpath = new StringBuilder();
-		if (LangUtil.is19VMOrGreater()) {
+		if (LangUtil.is9VMOrGreater()) {
 			classpath.append(LangUtil.getJrtFsFilePath()).append(File.pathSeparator);
 		}
 		classpath.append(AjdocTests.ASPECTJRT_PATH.getPath());
diff --git a/ajdoc/src/test/java/org/aspectj/tools/ajdoc/CoverageTestCase.java b/ajdoc/src/test/java/org/aspectj/tools/ajdoc/CoverageTestCase.java
index ea8568cd8..3be100998 100644
--- a/ajdoc/src/test/java/org/aspectj/tools/ajdoc/CoverageTestCase.java
+++ b/ajdoc/src/test/java/org/aspectj/tools/ajdoc/CoverageTestCase.java
@@ -131,9 +131,9 @@ public class CoverageTestCase extends AjdocTestCase {
 		String[] strings = null;
 		strings = new String[] {
 			"Aspect ClassA.InnerAspect",
-			"
static aspect ClassA.InnerAspect",
+			"
static aspect ClassA.InnerAspect",
 			"Class ClassA.InnerAspect",
-			"
static class ClassA.InnerAspect"};
+			"
static class ClassA.InnerAspect"};
 		List missingStrings = AjdocOutputChecker.getMissingStringsInFile(htmlFile,strings);
 		StringBuilder buf = new StringBuilder();
 		for (String str:missingStrings) {
@@ -144,7 +144,7 @@ public class CoverageTestCase extends AjdocTestCase {
 		assertTrue(htmlFile.getName() + " should not have Class as it's title",
 				missingStrings.contains("Class ClassA.InnerAspect"));
 		assertTrue(htmlFile.getName() + " should not have class in its subtitle",
-				missingStrings.contains("
static class ClassA.InnerAspect"));
+				missingStrings.contains("
static class ClassA.InnerAspect"));
 
 		// get the html file for the enclosing class
         File htmlFileClass = new File(getAbsolutePathOutdir() + "/foo/ClassA.html");
@@ -160,21 +160,21 @@ public class CoverageTestCase extends AjdocTestCase {
 		if (LangUtil.is13VMOrGreater()) {
 			classStrings = new String[] {
 				"Class ClassA",
-				"public abstract class ClassA",
+				"public abstract class ClassA",
 				"Aspect ClassA",
-				"public abstract aspect ClassA"};
+				"public abstract aspect ClassA"};
 		} else {
 			classStrings = new String[] {
 				"Class ClassA",
-				"public abstract class ClassA",
+				"public abstract class ClassA",
 				"Aspect ClassA",
-				"public abstract aspect ClassA"};
+				"public abstract aspect ClassA"};
 		}
 		List classMissing = AjdocOutputChecker.getMissingStringsInFile(htmlFileClass,classStrings);
 		assertEquals("There should be 2 missing strings:\n"+classMissing,2,classMissing.size());
 		assertTrue(htmlFileClass.getName() + " should not have Aspect as it's title",classMissing.contains("Aspect ClassA"));
 		assertTrue(htmlFileClass.getName() + " should not have aspect in its subtitle",
-				classMissing.contains("public abstract aspect ClassA"));
+				classMissing.contains("public abstract aspect ClassA"));
 	}
 
     /**
@@ -657,14 +657,19 @@ public class CoverageTestCase extends AjdocTestCase {
 		String[] strings = null;
 		strings = new String[] {
 				"Aspect PkgVisibleClass.NestedAspect",
-				"
static aspect PkgVisibleClass.NestedAspect",
+				"
static aspect PkgVisibleClass.NestedAspect",
 				"Class PkgVisibleClass.NestedAspect",
-				"
static class PkgVisibleClass.NestedAspect"};
-		List missing = AjdocOutputChecker.getMissingStringsInFile(htmlFile,strings);
-		assertEquals("There should be 2 missing strings",2,missing.size());
-		assertTrue(htmlFile.getName() + " should not have Class as it's title",missing.contains("Class PkgVisibleClass.NestedAspect"));
+				"
static class PkgVisibleClass.NestedAspect"};
+		List missingStrings = AjdocOutputChecker.getMissingStringsInFile(htmlFile,strings);
+		StringBuilder buf = new StringBuilder();
+		for (String str:missingStrings) {
+			buf.append(str).append("\n");
+		}
+		buf.append("HTMLFILE=\n").append(htmlFile).append("\n");
+		assertEquals("There should be 2 missing strings",2,missingStrings.size());
+		assertTrue(htmlFile.getName() + " should not have Class as it's title",missingStrings.contains("Class PkgVisibleClass.NestedAspect"));
 		assertTrue(htmlFile.getName() + " should not have class in its subtitle",
-				missing.contains("
static class PkgVisibleClass.NestedAspect"));
+				missingStrings.contains("
static class PkgVisibleClass.NestedAspect"));
 		// get the html file for the enclosing class
         File htmlFileClass = new File(getAbsolutePathOutdir() + "/PkgVisibleClass.html");
 		if (!htmlFileClass.exists()) {
@@ -678,22 +683,22 @@ public class CoverageTestCase extends AjdocTestCase {
 		if (LangUtil.is13VMOrGreater()) {
 			classStrings = new String[] {
 				"Class PkgVisibleClass",
-				"
class PkgVisibleClass",
+				"
class PkgVisibleClass",
 				"Aspect PkgVisibleClass",
-				"
aspect PkgVisibleClass"};
+				"
aspect PkgVisibleClass"};
 		} else {
 			classStrings = new String[] {
 				"Class PkgVisibleClass",
-				"
class PkgVisibleClass",
+				"
class PkgVisibleClass",
 				"Aspect PkgVisibleClass",
-				"
aspect PkgVisibleClass"};
+				"
aspect PkgVisibleClass"};
 		}
 		List classMissing = AjdocOutputChecker.getMissingStringsInFile(htmlFileClass,classStrings);
 		assertEquals("There should be 2 missing strings",2,classMissing.size());
 		assertTrue(htmlFileClass.getName() + " should not have Aspect as it's title",
 				classMissing.contains("Aspect PkgVisibleClass"));
 		assertTrue(htmlFileClass.getName() + " should not have aspect in its subtitle",
-				classMissing.contains("
aspect PkgVisibleClass"));
+				classMissing.contains("
aspect PkgVisibleClass"));
 	}
 
 	/**
@@ -716,14 +721,19 @@ public class CoverageTestCase extends AjdocTestCase {
 		String[] strings = null;
 		strings = new String [] {
 			"Aspect ClassWithNestedAspect.NestedAspect",
-			"
static aspect ClassWithNestedAspect.NestedAspect",
+			"
static aspect ClassWithNestedAspect.NestedAspect",
 			"Class ClassWithNestedAspect.NestedAspect",
-			"
static class ClassWithNestedAspect.NestedAspect"};
-		List missing = AjdocOutputChecker.getMissingStringsInFile(htmlFile,strings);
-		assertEquals("There should be 2 missing strings",2,missing.size());
-		assertTrue(htmlFile.getName() + " should not have Class as it's title",missing.contains("Class ClassWithNestedAspect.NestedAspect"));
+			"
static class ClassWithNestedAspect.NestedAspect"};
+		List missingStrings = AjdocOutputChecker.getMissingStringsInFile(htmlFile,strings);
+		StringBuilder buf = new StringBuilder();
+		for (String str:missingStrings) {
+			buf.append(str).append("\n");
+		}
+		buf.append("HTMLFILE=\n").append(htmlFile).append("\n");
+		assertEquals("There should be 2 missing strings",2,missingStrings.size());
+		assertTrue(htmlFile.getName() + " should not have Class as it's title",missingStrings.contains("Class ClassWithNestedAspect.NestedAspect"));
 		assertTrue(htmlFile.getName() + " should not have class in its subtitle",
-				missing.contains("
static class ClassWithNestedAspect.NestedAspect"));
+				missingStrings.contains("
static class ClassWithNestedAspect.NestedAspect"));
 
 		// get the html file for the enclosing class
         File htmlFileClass = new File(getAbsolutePathOutdir() + "/pkg/ClassWithNestedAspect.html");
@@ -738,22 +748,22 @@ public class CoverageTestCase extends AjdocTestCase {
 		if (LangUtil.is13VMOrGreater()) {
 			classStrings = new String[] {
 				"Class ClassWithNestedAspect",
-				"public class ClassWithNestedAspect",
+				"public class ClassWithNestedAspect",
 				"Aspect ClassWithNestedAspect",
-				"public aspect ClassWithNestedAspect"};
+				"public aspect ClassWithNestedAspect"};
 		} else {
 			classStrings = new String[] {
 				"Class ClassWithNestedAspect",
-				"public class ClassWithNestedAspect",
+				"public class ClassWithNestedAspect",
 				"Aspect ClassWithNestedAspect",
-				"public aspect ClassWithNestedAspect"};
+				"public aspect ClassWithNestedAspect"};
 		}
 		List classMissing = AjdocOutputChecker.getMissingStringsInFile(htmlFileClass,classStrings);
 		assertEquals("There should be 2 missing strings",2,classMissing.size());
 		assertTrue(htmlFileClass.getName() + " should not have Aspect as it's title",
 				classMissing.contains("Aspect ClassWithNestedAspect"));
 		assertTrue(htmlFileClass.getName() + " should not have aspect in its subtitle",
-				classMissing.contains("public aspect ClassWithNestedAspect"));
+				classMissing.contains("public aspect ClassWithNestedAspect"));
 	}
 
 	/**
diff --git a/loadtime/src/test/java/org/aspectj/weaver/loadtime/JRockitAgentTest.java b/loadtime/src/test/java/org/aspectj/weaver/loadtime/JRockitAgentTest.java
index 125a9e95c..4c37d568b 100644
--- a/loadtime/src/test/java/org/aspectj/weaver/loadtime/JRockitAgentTest.java
+++ b/loadtime/src/test/java/org/aspectj/weaver/loadtime/JRockitAgentTest.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
  * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
+ * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  *     Matthew Webster - initial implementation
  *******************************************************************************/
@@ -54,7 +54,7 @@ public class JRockitAgentTest extends TestCase {
 	}
 
 	public void testJrockitRecursionProtection() {
-		if (LangUtil.is19VMOrGreater()) {
+		if (LangUtil.is9VMOrGreater()) {
 			// Skip test, not castable to URLClassLoader
 			return;
 		}
diff --git a/org.aspectj.ajdt.core/src/main/java/org/aspectj/ajdt/ajc/BuildArgParser.java b/org.aspectj.ajdt.core/src/main/java/org/aspectj/ajdt/ajc/BuildArgParser.java
index 7717355bf..be594860b 100644
--- a/org.aspectj.ajdt.core/src/main/java/org/aspectj/ajdt/ajc/BuildArgParser.java
+++ b/org.aspectj.ajdt.core/src/main/java/org/aspectj/ajdt/ajc/BuildArgParser.java
@@ -1,13 +1,13 @@
 /* *******************************************************************
  * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     PARC     initial implementation 
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     PARC     initial implementation
  * ******************************************************************/
 
 package org.aspectj.ajdt.ajc;
@@ -364,7 +364,7 @@ public class BuildArgParser extends Main {
 		List ret = new ArrayList<>();
 
 		if (parser.bootclasspath == null) {
-			if (LangUtil.is19VMOrGreater()) {
+			if (LangUtil.is9VMOrGreater()) {
 				addClasspath(LangUtil.getJrtFsFilePath(),ret);
 			} else {
 				addClasspath(System.getProperty("sun.boot.class.path", ""), ret);
@@ -374,7 +374,7 @@ public class BuildArgParser extends Main {
 		}
 		return ret;
 	}
-	
+
 	public List getModulepath(AjcConfigParser parser) {
 		List ret = new ArrayList<>();
 		addClasspath(parser.modulepath, ret);
@@ -391,7 +391,7 @@ public class BuildArgParser extends Main {
 	public ArrayList handleClasspath(ArrayList classpaths, String customEncoding) {
 		return super.handleClasspath(classpaths, customEncoding);
 	}
-	
+
 	/**
 	 * If the classpath is not set, we use the environment's java.class.path, but remove the aspectjtools.jar entry from that list
 	 * in order to prevent wierd bootstrap issues (refer to bug#39959).
@@ -474,7 +474,7 @@ public class BuildArgParser extends Main {
 		public List getUnparsedArgs() {
 			return unparsedArgs;
 		}
-		
+
 		public String getModuleInfoArgument() {
 			return this.moduleInfoArgument;
 		}
@@ -914,12 +914,12 @@ public class BuildArgParser extends Main {
 		}
 
 	}
-	
+
 	@Override
 	public boolean checkVMVersion(long minimalSupportedVersion) {
 		return super.checkVMVersion(minimalSupportedVersion);
 	}
-	
+
 	@Override
 	public void initRootModules(LookupEnvironment environment, FileSystem fileSystem) {
 		super.initRootModules(environment, fileSystem);
diff --git a/org.aspectj.ajdt.core/src/test/java/org/aspectj/ajdt/internal/compiler/batch/CommandTestCase.java b/org.aspectj.ajdt.core/src/test/java/org/aspectj/ajdt/internal/compiler/batch/CommandTestCase.java
index 78b82d223..daa23dd98 100644
--- a/org.aspectj.ajdt.core/src/test/java/org/aspectj/ajdt/internal/compiler/batch/CommandTestCase.java
+++ b/org.aspectj.ajdt.core/src/test/java/org/aspectj/ajdt/internal/compiler/batch/CommandTestCase.java
@@ -1,13 +1,13 @@
 /* *******************************************************************
  * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     PARC     initial implementation 
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     PARC     initial implementation
  * ******************************************************************/
 
 package org.aspectj.ajdt.internal.compiler.batch;
@@ -33,7 +33,7 @@ public abstract class CommandTestCase extends TestCase {
 
 	/**
 	 * Constructor for CommandTestCase.
-	 * 
+	 *
 	 * @param name
 	 */
 	public CommandTestCase(String name) {
@@ -52,7 +52,7 @@ public abstract class CommandTestCase extends TestCase {
 	protected void runMain(String className) {
 		TestUtil.runMain(getSandboxName(), className);
 	}
-	
+
 	public void checkCompile(String source, String[] extraArgs, int[] expectedErrors) {
 		checkCompile(source,extraArgs,expectedErrors,getSandboxName());
 	}
@@ -169,7 +169,7 @@ public abstract class CommandTestCase extends TestCase {
 	/** get the location of the org.aspectj.lang & runtime classes */
 	protected static String getRuntimeClasspath() {
 		StringBuilder classpath = new StringBuilder();
-		if (LangUtil.is19VMOrGreater()) {
+		if (LangUtil.is9VMOrGreater()) {
 			classpath.append(LangUtil.getJrtFsFilePath()).append(File.pathSeparator);
 		}
 		classpath.append(Constants.aspectjrtClasspath());
diff --git a/org.aspectj.ajdt.core/src/test/java/org/aspectj/tools/ajc/AjcTestCase.java b/org.aspectj.ajdt.core/src/test/java/org/aspectj/tools/ajc/AjcTestCase.java
index d1395ac81..a24edb804 100644
--- a/org.aspectj.ajdt.core/src/test/java/org/aspectj/tools/ajc/AjcTestCase.java
+++ b/org.aspectj.ajdt.core/src/test/java/org/aspectj/tools/ajc/AjcTestCase.java
@@ -947,7 +947,7 @@ public abstract class AjcTestCase extends TestCase {
 				args = newargs;
 			}
 		}
-		boolean needsJRTFS = LangUtil.is19VMOrGreater();
+		boolean needsJRTFS = LangUtil.is9VMOrGreater();
 		if (needsJRTFS) {
 			if (!args[cpIndex].contains(LangUtil.JRT_FS)) {
 				String jrtfsPath = LangUtil.getJrtFsFilePath();
diff --git a/testing-drivers/pom.xml b/testing-drivers/pom.xml
index d5542cca2..26de8eab9 100644
--- a/testing-drivers/pom.xml
+++ b/testing-drivers/pom.xml
@@ -29,6 +29,12 @@
       testing
       ${project.version}
     
+    
+      org.aspectj
+      testing-util
+      ${project.version}
+      test
+    
     
       org.aspectj
       testing-client
diff --git a/testing-drivers/src/test/java/org/aspectj/testing/drivers/HarnessSelectionTest.java b/testing-drivers/src/test/java/org/aspectj/testing/drivers/HarnessSelectionTest.java
index a292962fc..790c4a710 100644
--- a/testing-drivers/src/test/java/org/aspectj/testing/drivers/HarnessSelectionTest.java
+++ b/testing-drivers/src/test/java/org/aspectj/testing/drivers/HarnessSelectionTest.java
@@ -1,14 +1,14 @@
 /* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
+ * Copyright (c) 1999-2001 Xerox Corporation,
  *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Xerox/PARC     initial implementation
  * ******************************************************************/
 
 package org.aspectj.testing.drivers;
@@ -41,23 +41,23 @@ import junit.framework.TestCase;
  */
 public class HarnessSelectionTest extends TestCase {
     private static final String TESTDATA = "../testing-drivers/testdata";
-    private static final String INC_HARNESS_DIR 
+    private static final String INC_HARNESS_DIR
         = TESTDATA + "/incremental/harness";
-    private static final String SELECT 
+    private static final String SELECT
         = INC_HARNESS_DIR + "/selectionTest.xml";
-        
+
     /** @see testIncrementalSuite() */
-    private static final String INCREMENTAL 
+    private static final String INCREMENTAL
         = INC_HARNESS_DIR + "/suite.xml";
 
-    private static final String TITLE_LIST_ONE 
+    private static final String TITLE_LIST_ONE
         = INC_HARNESS_DIR + "/titleListOne.txt";
 
-    private static final String TITLE_LIST_PLURAL 
+    private static final String TITLE_LIST_PLURAL
         = INC_HARNESS_DIR + "/titleListPlural.txt";
-    
-    private static Hashtable SPECS = new Hashtable();    
-    
+
+    private static Hashtable SPECS = new Hashtable();
+
     private static AjcTest.Suite.Spec getSpec(String suiteFile) {
         AjcTest.Suite.Spec result = (AjcTest.Suite.Spec) SPECS.get(suiteFile);
         if (null == result) {
@@ -67,7 +67,7 @@ public class HarnessSelectionTest extends TestCase {
             } catch (IOException e) {
                 e.printStackTrace(System.err);
             }
-        }        
+        }
         try {
             return (AjcTest.Suite.Spec) result.clone();
         } catch (CloneNotSupportedException e) {
@@ -76,13 +76,13 @@ public class HarnessSelectionTest extends TestCase {
             return null; // keep compiler happy
         }
     }
-    
+
     private boolean verbose;
 
 	public HarnessSelectionTest(String name) {
 		super(name);
 	}
-    
+
     public void testFilesAvailable() {
         String[] files = new String[] {
             SELECT, INCREMENTAL, TITLE_LIST_ONE, TITLE_LIST_PLURAL
@@ -99,20 +99,20 @@ public class HarnessSelectionTest extends TestCase {
             System.err.println("skipping test - eclipse classes not available");
             return;
         }
-        String[] options = new String[] 
+        String[] options = new String[]
             { "!verbose", "!eclipse",
             };
         Exp exp = new Exp(6, 6, 0, 6, 0, 0, 0);
         checkSelection(INCREMENTAL, options, "INFIX IGNORED", exp);
     }
-    
+
     public void testKeywordSelectionBoth() {
         if (!eclipseAvailable()) {
             System.err.println("skipping test - eclipse classes not available");
             return;
         }
-        String[] options = new String[] 
-            { "-ajctestRequireKeywords=requireKeyword", 
+        String[] options = new String[]
+            { "-ajctestRequireKeywords=requireKeyword",
             "-ajctestSkipKeywords=skipKeyword,skipUnenforcedAjcLimit",
             "!verbose",
             "-eclipse",
@@ -120,14 +120,14 @@ public class HarnessSelectionTest extends TestCase {
         Exp exp = new Exp(17, 1, 16, 1, 0, 0, 1);
         checkSelection(SELECT, options, "keyword skipKeyword was found", exp);
     }
-    
+
     public void testKeywordSelectionRequire() {
         if (!eclipseAvailable()) {
             System.err.println("skipping test - eclipse classes not available");
             return;
         }
-        String[] options = new String[] 
-            { "-ajctestRequireKeywords=skipKeyword", 
+        String[] options = new String[]
+            { "-ajctestRequireKeywords=skipKeyword",
             "!verbose",
             "-eclipse",
             };
@@ -140,21 +140,21 @@ public class HarnessSelectionTest extends TestCase {
             System.err.println("skipping test - eclipse classes not available");
             return;
         }
-        String[] options = new String[] 
-            { "-ajctestSkipKeywords=requireKeyword", 
+        String[] options = new String[]
+            { "-ajctestSkipKeywords=requireKeyword",
             "!verbose",
             "-eclipse",
             };
         Exp exp = new Exp(17, 0, 17, 0, 0, 0, 17);
         checkSelection(SELECT, options, "keyword requireKeyword was found", exp);
     }
-    
+
     public void testNoOptions() {
         if (!ajcAvailable()) {
             System.err.println("skipping test - ajc classes not available");
             return;
         }
-        String[] options = new String[] 
+        String[] options = new String[]
             { "!ajc"
             };
         Exp exp = new Exp(17, 3, 14, 3, 0, 0, 4);
@@ -162,107 +162,107 @@ public class HarnessSelectionTest extends TestCase {
     }
 
     public void testEclipseOptionsSkip() {
-        String[] options = new String[] 
+        String[] options = new String[]
             { "-eclipse",
                 "-ajctestRequireKeywords=eclipseOptionSkip"
             };
         Exp exp = new Exp(17, 0, 17, 0, 0, 0, 6);
         checkSelection(SELECT, options, "old ajc 1.0 option", exp);
     }
-    
+
     public void testAjcEclipseConflict() {
         if (!ajcAvailable()) {
             System.err.println("skipping test - ajc classes not available");
             return;
         }
-        String[] options = new String[] 
+        String[] options = new String[]
             { "!ajc"
             };
         Exp exp = new Exp(17, 3, 14, 3, 0, 0, 6);
         checkSelection(SELECT, options, "conflict between !eclipse and !ajc", exp);
     }
-    
+
     public void testEclipseConflict() {
-        String[] options = new String[] 
+        String[] options = new String[]
             { "^eclipse",
               "-ajctestSkipKeywords=skipUnenforcedAjcLimit"
-            };            
+            };
         Exp exp = new Exp(17, 3, 14, 3, 0, 0, 6);
         checkSelection(SELECT, options, "force conflict between eclipse", exp);
     }
-    
+
     public void testSinglePR() {
-        String[] options = new String[] 
+        String[] options = new String[]
             { "-eclipse", "-ajctestPR=100"
             };
         Exp exp = new Exp(17, 1, 16, 1, 0, 0, 16);
         checkSelection(SELECT, options, "bugId required", exp);
     }
-    
+
     public void testTwoPR() {
-        String[] options = new String[] 
+        String[] options = new String[]
             { "-eclipse", "-ajctestPR=100,101"
             };
         Exp exp = new Exp(17, 2, 15, 2, 0, 0, 15);
         checkSelection(SELECT, options, "bugId required", exp);
     }
-    
+
     public void testTitleContainsSubstringSelection() {
-        String[] options = new String[] 
+        String[] options = new String[]
             { "-ajctestTitleContains=run and ",
-                "-eclipse" 
+                "-eclipse"
             };
         Exp exp = new Exp(17, 1, 16, 1, 0, 0, 16);
         checkSelection(SELECT, options, "run and", exp);
     }
-    
+
     public void testTitleContainsSubstringSelectionPlural() {
-        String[] options = new String[] 
+        String[] options = new String[]
             { "-ajctestTitleContains= run and , if skipKeyword ",
-                "-eclipse" 
+                "-eclipse"
             };
         Exp exp = new Exp(17, 2, 15, 2, 0, 0, 15);
         checkSelection(SELECT, options, "title", exp);
     }
 
     public void testTitleContainsExactSelection() {
-        String[] options = new String[] 
+        String[] options = new String[]
             { "-ajctestTitleContains=run and pass",
-                "-eclipse" 
+                "-eclipse"
             };
         Exp exp = new Exp(17, 1, 16, 1, 0, 0, 16);
         checkSelection(SELECT, options, "run and pass", exp);
     }
-    
+
     public void testTitleContainsExactSelectionPlural() {
-        String[] options = new String[] 
+        String[] options = new String[]
             { "-ajctestTitleContains= run and pass , omit if skipKeyword ",
-                "-eclipse" 
+                "-eclipse"
             };
         Exp exp = new Exp(17, 2, 15, 2, 0, 0, 15);
         checkSelection(SELECT, options, "title", exp);
     }
 
     public void testTitleListSelection() {
-        String[] options = new String[] 
+        String[] options = new String[]
             { "-ajctestTitleList=run and pass",
-                "-eclipse" 
+                "-eclipse"
             };
         Exp exp = new Exp(17, 1, 16, 1, 0, 0, 16);
         checkSelection(SELECT, options, "run and pass", exp);
     }
-    
+
     public void testTitleListSelectionPlural() {
-        String[] options = new String[] 
+        String[] options = new String[]
             { "-ajctestTitleList= run and pass , omit if skipKeyword ",
-                "-eclipse" 
+                "-eclipse"
             };
         Exp exp = new Exp(17, 2, 15, 2, 0, 0, 15);
         checkSelection(SELECT, options, "title", exp);
     }
 
     public void testTitleListFileSelection() {
-        String[] options = new String[] 
+        String[] options = new String[]
             { "-ajctestTitleList=" + TITLE_LIST_ONE,
                 "-eclipse"
             };
@@ -271,15 +271,15 @@ public class HarnessSelectionTest extends TestCase {
     }
 
    public void testTitleListFileSelectionPlural() {
-       String[] options = new String[] 
+       String[] options = new String[]
            { "-ajctestTitleList=" + TITLE_LIST_PLURAL,
                "-eclipse"
            };
        Exp exp = new Exp(17, 2, 15, 2, 0, 0, 15);
        checkSelection(SELECT, options, TITLE_LIST_PLURAL, exp);
-       
-       // Now check the "fail only" path 
-       options = new String[] 
+
+       // Now check the "fail only" path
+       options = new String[]
            { "-ajctestTitleFailList=" + TITLE_LIST_PLURAL,
                "-eclipse"
            };
@@ -289,7 +289,7 @@ public class HarnessSelectionTest extends TestCase {
        checkSelection(SELECT, options, "skip", exp);
    }
 
-    /** 
+    /**
      * Run the static test suite with the given options.
      * @param setupHolder the IMessageHolder for any setup messages
      * @return null if setup failed or Harness.RunResult if suite completed.
@@ -305,15 +305,15 @@ public class HarnessSelectionTest extends TestCase {
             assertTrue("expected 17 kids, got " + kids.size(), false);
         }
         if (!spec.adoptParentValues(runtime, setupHolder)) {
-            return null; 
+            return null;
         } else {
             class TestHarness extends Harness {
                 public RunResult run(AjcTest.Suite.Spec spec) {
                     return super.run(spec);
-                } 
+                }
             }
             TestHarness h = new TestHarness();
-            return h.run(spec);            
+            return h.run(spec);
         }
     }
 
@@ -334,8 +334,8 @@ public class HarnessSelectionTest extends TestCase {
             this.incomplete = incomplete;
             this.infix = infix;
         }
-    }   
-         
+    }
+
     public void checkSelection(String suiteFile, String[] options, String infoInfix, Exp exp) {
         MessageHandler holder = new MessageHandler();
         Harness.RunResult result = runSuite(suiteFile, options, holder);
@@ -345,7 +345,7 @@ public class HarnessSelectionTest extends TestCase {
         assertNotNull("Harness.RunResult", result);
         // XXX sync hack snooping of message text with skip messages, harness
         final List skipList = MessageUtil.getMessages(holder, IMessage.INFO, false, "skip");
-        final int numSkipped = skipList.size();        
+        final int numSkipped = skipList.size();
         IRunStatus status = result.status;
         assertNotNull(status);
         if (verbose) {
@@ -355,7 +355,7 @@ public class HarnessSelectionTest extends TestCase {
         assertEquals("skips", exp.skipped, numSkipped);
         IRunStatus[] children = status.getChildren();
         assertNotNull(children);
-        assertTrue(children.length + "!= expRun=" + exp.testsRun, 
+        assertTrue(children.length + "!= expRun=" + exp.testsRun,
             exp.testsRun == children.length);
         int actPass = 0;
 		for (IRunStatus child : children) {
@@ -369,25 +369,27 @@ public class HarnessSelectionTest extends TestCase {
         if (!LangUtil.isEmpty(infoInfix)) {
             int actInfix = MessageUtil.getMessages(holder, IMessage.INFO, false, infoInfix).size();
             if (actInfix != exp.infix) {
-                String s = "for infix \"" + infoInfix 
+                String s = "for infix \"" + infoInfix
                     + "\" actInfix=" + actInfix + " != expInfix=" + exp.infix;
                 assertTrue(s, false);
             }
         }
     }
-    
+
     private boolean ajcAvailable() { // XXX util
         try {
-            return (null != Class.forName("org.aspectj.compiler.base.JavaCompiler"));
+            Class.forName("org.aspectj.compiler.base.JavaCompiler");
+            return true;
         } catch (ClassNotFoundException e) {
             return false;
         }
     }
 
-    
+
     private boolean eclipseAvailable() { // XXX util
         try {
-            return (null != Class.forName("org.aspectj.ajdt.ajc.AjdtCommand"));
+            Class.forName("org.aspectj.ajdt.ajc.AjdtCommand");
+            return true;
         } catch (ClassNotFoundException e) {
             return false;
         }
diff --git a/testing/src/test/java/org/aspectj/testing/AjcTest.java b/testing/src/test/java/org/aspectj/testing/AjcTest.java
index e9eeafc2f..5f39368a6 100644
--- a/testing/src/test/java/org/aspectj/testing/AjcTest.java
+++ b/testing/src/test/java/org/aspectj/testing/AjcTest.java
@@ -39,7 +39,7 @@ public class AjcTest {
 		is16VMOrGreater = true;
 		is17VMOrGreater = true;
 		is18VMOrGreater = true;
-		is19VMOrGreater = LangUtil.is19VMOrGreater();
+		is19VMOrGreater = LangUtil.is9VMOrGreater();
 		is10VMOrGreater = LangUtil.is10VMOrGreater();
 		is11VMOrGreater = LangUtil.is11VMOrGreater();
 		is12VMOrGreater = LangUtil.is12VMOrGreater();
diff --git a/testing/src/test/java/org/aspectj/testing/XMLBasedAjcTestCaseForJava9OrLater.java b/testing/src/test/java/org/aspectj/testing/XMLBasedAjcTestCaseForJava9OrLater.java
index 205b55273..19e80c474 100644
--- a/testing/src/test/java/org/aspectj/testing/XMLBasedAjcTestCaseForJava9OrLater.java
+++ b/testing/src/test/java/org/aspectj/testing/XMLBasedAjcTestCaseForJava9OrLater.java
@@ -1,12 +1,12 @@
 /* *******************************************************************
  * Copyright (c) 2018 Contributors
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
  *     Andy Clement
  * ******************************************************************/
 package org.aspectj.testing;
@@ -15,7 +15,7 @@ import org.aspectj.util.LangUtil;
 
 /**
  * Makes sure tests are running on the right level of JDK.
- * 
+ *
  * @author Andy Clement
  */
 public abstract class XMLBasedAjcTestCaseForJava9OrLater extends XMLBasedAjcTestCase {
@@ -23,10 +23,10 @@ public abstract class XMLBasedAjcTestCaseForJava9OrLater extends XMLBasedAjcTest
 	@Override
 	public void runTest(String title) {
 		// Check we are on Java9 or later
-		if (!LangUtil.is19VMOrGreater()) {
+		if (!LangUtil.is9VMOrGreater()) {
 			throw new IllegalStateException("These tests should be run on Java 9 or later");
 		}
 		super.runTest(title);
 	}
-	
+
 }
diff --git a/testing/src/test/java/org/aspectj/testing/taskdefs/AjcTaskCompileCommandTest.java b/testing/src/test/java/org/aspectj/testing/taskdefs/AjcTaskCompileCommandTest.java
index b20a5650a..645a9c7df 100644
--- a/testing/src/test/java/org/aspectj/testing/taskdefs/AjcTaskCompileCommandTest.java
+++ b/testing/src/test/java/org/aspectj/testing/taskdefs/AjcTaskCompileCommandTest.java
@@ -1,13 +1,13 @@
 /* *******************************************************************
  * Copyright (c) 2003 Contributors.
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     Wes Isberg     initial implementation 
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Wes Isberg     initial implementation
  * ******************************************************************/
 
 package org.aspectj.testing.taskdefs;
@@ -35,7 +35,7 @@ public class AjcTaskCompileCommandTest extends TestCase {
     static boolean loggedWarning = false;
     static boolean runAllTests = true;
     static List tempFiles = new ArrayList<>();
-    
+
     private static File getClassesDir() {
         File tempDir = FileUtil.getTempDir("AjcTaskCompileCommandTest-classes");
         tempFiles.add(tempDir);
@@ -48,7 +48,7 @@ public class AjcTaskCompileCommandTest extends TestCase {
         list.add("-classpath");
         StringBuilder classpath = new StringBuilder();
         classpath.append(Globals.F_aspectjrt_jar.getAbsolutePath());
-        if (LangUtil.is19VMOrGreater()) {
+        if (LangUtil.is9VMOrGreater()) {
         	classpath.append(File.pathSeparator).append(LangUtil.getJrtFsFilePath());
         }
         list.add(classpath.toString());
@@ -56,7 +56,7 @@ public class AjcTaskCompileCommandTest extends TestCase {
 
     static boolean doWait(IMessageHolder holder, int seconds, int timeout) {
         return AjcTaskCompileCommand
-            .waitUntilMessagesQuiet(holder, seconds, timeout);        
+            .waitUntilMessagesQuiet(holder, seconds, timeout);
     }
 
     public AjcTaskCompileCommandTest(String name) {
@@ -85,30 +85,30 @@ public class AjcTaskCompileCommandTest extends TestCase {
     public void testDefaultList() {
         runSimpleTest("../taskdefs/testdata/default.lst", 0);
     }
-    
+
     public void testCompileErrorList() {
         runSimpleTest("../taskdefs/testdata/compileError.lst", 1);
     }
 
-    
+
     public void testWaitUntilMessagesQuiet_1_2() {
         if (runAllTests) checkWait(1, 2, 0, 0);
     }
-    
+
     public void testWaitUntilMessagesQuiet_1_10() {
         if (runAllTests) checkWait(1, 10, 0, 0);
     }
-    
+
     public void testWaitUntilMessagesQuiet_8_10() {
         checkWait(8, 10, 0, 0);
     }
-    
+
     // XXX two async tests might fail if adder thread starved
-    
+
     public void testWaitUntilMessagesQuiet_1_10_4_1() {
         if (runAllTests) checkWait(1, 10, 4, 1);
     }
-    
+
     public void testWaitUntilMessagesQuiet_8_10_2_1() {
         if (runAllTests) checkWait(8, 20, 2, 1);
     }
@@ -129,7 +129,7 @@ public class AjcTaskCompileCommandTest extends TestCase {
         }
         runTest(list, expectedErrors);
     }
-    
+
     void runTest(ArrayList args, int expectedErrors) {
         AjcTaskCompileCommand command =
             new AjcTaskCompileCommand();
@@ -140,14 +140,14 @@ public class AjcTaskCompileCommandTest extends TestCase {
         final boolean pass = (result == expectPass);
         if (!pass) {
             String m = expectPass ? "pass" : "fail";
-        
+
             assertTrue("expected " + m + ": " + args+"\n Messages:"+handler.getUnmodifiableListView(), false);
         }
     }
 
     void checkWait(final int seconds, final int timeout, int toAdd, int addInterval) {
-        final String testCase = "checkWait(seconds=" 
-                            + seconds + ", timeout=" + timeout; 
+        final String testCase = "checkWait(seconds="
+                            + seconds + ", timeout=" + timeout;
         final MessageHandler mhandler = new MessageHandler();
         final long startTime = System.currentTimeMillis();
         final long testTimeout = startTime + (timeout * 2000l);
@@ -160,7 +160,7 @@ public class AjcTaskCompileCommandTest extends TestCase {
                 System.out.println("warning - test will fail if adder thread starved");
                 loggedWarning = true;
             }
-            final MessageAdder adder 
+            final MessageAdder adder
                 = new MessageAdder(mhandler, toAdd, addInterval);
             final String label = testCase + " wait(" + toAdd + ", " + addInterval + ")";
             class Result {
@@ -173,15 +173,15 @@ public class AjcTaskCompileCommandTest extends TestCase {
                     waitResult.addedThread
                         = new Thread(adder, label + "-child");
                     waitResult.addedThread.start();
-                    waitResult.result = 
+                    waitResult.result =
                         AjcTaskCompileCommandTest.doWait(mhandler, seconds, timeout);
                 }
             }, label);
-            
+
             testThread.start();
-            
+
             try {
-                testThread.join(testTimeout - startTime);            
+                testThread.join(testTimeout - startTime);
             } catch (InterruptedException e) {
                 // ignore
             }
@@ -190,13 +190,13 @@ public class AjcTaskCompileCommandTest extends TestCase {
                     long wait = testTimeout - System.currentTimeMillis();
                     if (0 < wait) {
                         waitResult.addedThread.join(wait);
-                    }            
+                    }
                 }
             } catch (InterruptedException e) {
                 // ignore
             }
             result = waitResult.result;
-            int added = adder.getNumAdded(); 
+            int added = adder.getNumAdded();
             assertEquals(testCase + " added", added, toAdd);
             if (!result) {
                 assertTrue(testCase + " result " + adder, false);
@@ -215,12 +215,12 @@ class MessageAdder implements Runnable {
     public static long MAX_MILLIS = 1000 * 30;
     public boolean stop;
     public boolean wait;
-    
+
     private final IMessageHolder messages;
     private final int numToAdd;
     private final int interval;
     private int numAdded;
-    
+
     /**
      * @param holder the IMessageHolder to add to
      * @param num the int number of messages to add
@@ -242,7 +242,7 @@ class MessageAdder implements Runnable {
         final long timeout = curTime + MAX_MILLIS;
 //        final Thread thread = Thread.currentThread();
         int numAdded = 0;
-        while (!stop && (timeout > curTime) 
+        while (!stop && (timeout > curTime)
             && (numAdded < numToAdd)) {
             long targetTime = curTime + waitBetweenAdds;
             while (!stop && (curTime < timeout)
@@ -264,7 +264,7 @@ class MessageAdder implements Runnable {
     int getNumAdded() {
         return numAdded;
     }
-    
+
     public String toString() {
         return "MessageAdder("
             + "numAdded=" + numAdded
@@ -273,9 +273,9 @@ class MessageAdder implements Runnable {
             + ", stop=" + stop
             + ", wait=" + wait
             + ", numMessages="
-            + (null == messages 
-                ? 0 
+            + (null == messages
+                ? 0
                 : messages.numMessages(null, true))
             + ")";
-    }  
-}
\ No newline at end of file
+    }
+}
diff --git a/tests/src/test/java/org/aspectj/systemtest/ajc150/GenericsTests.java b/tests/src/test/java/org/aspectj/systemtest/ajc150/GenericsTests.java
index 95ab500fc..ee6fb6af6 100644
--- a/tests/src/test/java/org/aspectj/systemtest/ajc150/GenericsTests.java
+++ b/tests/src/test/java/org/aspectj/systemtest/ajc150/GenericsTests.java
@@ -22,7 +22,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 
 	/*==========================================
 	 * Generics test plan for pointcuts.
-	 * 
+	 *
 	 * handler  PASS
 	 *   - does not permit type var spec
 	 *   - does not permit generic type (fail with type not found)
@@ -54,7 +54,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	 * staticinitialization PASS
 	 *   - error on parameterized type PASS N/A
 	 *   - permit parameterized type + PASS N/A
-	 *   - matching with parameterized type + N/A 
+	 *   - matching with parameterized type + N/A
 	 *   - wrong number of parameters in parameterized type  PASS N/A
 	 *   - generic type with one type parameter N/A
 	 *   - generic type with n type parameters N/A
@@ -64,7 +64,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	 * within  PASS
 	 *   - as above, but allows parameterized type  (disallowed in simplified plan)
 	 *   - wildcards in type parameters  N/A
-	 * this  PASS 
+	 * this  PASS
 	 *   - no type vars
 	 *   - parameterized types  - disallowed in simplification plan
 	 *        - implements
@@ -115,20 +115,20 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	 *    - parameter as parameterized type  PASS
 	 *    - no join points for bridge methods  PASS
 	 * call PASS
-	 *    - no generic or parameterized declaring type patterns PASS 
+	 *    - no generic or parameterized declaring type patterns PASS
 	 *    - no parameterized throws patterns PASS
 	 *    - return type as type variable  PASS
-	 *    - return type as parameterized type PASS 
+	 *    - return type as parameterized type PASS
 	 *    - parameter as type variable   PASS
 	 *    - parameter as parameterized type  PASS
 	 *    - calls to a bridge methods PASS
 	 * after throwing - can't use parameterized type pattern
 	 * after returning - same as for args
 	 */
-	
+
 	/* ==========================================
 	 * Generics test plan for ITDs.
-	 * 
+	 *
 	 * think about:
 	 * - 'visibility' default/private/public
 	 * - static/nonstatic
@@ -148,7 +148,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	 * - super/extends with parameterized types >
 	 * - multiple ITDs defined in one type that reuse type variable letters, specifying different bounds
 	 * - generic aspects
-	 * 
+	 *
 	 * PASS parsing generic ITDs
 	 * PASS generic methods
 	 * PASS generic constructors
@@ -170,15 +170,15 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	 * PASS parameterizing ITDs with type variables
      * PASS using type variables from the target type in your *STATIC* ITD (field/method/ctor) (error scenario)
      * PASS basic binary weaving of generic itds
-     * 
+     *
 	 * TODO generic aspect binary weaving (or at least multi source file weaving)
 	 * TODO binary weaving with changing types (moving between generic and simple)
 	 * TODO bridge method creation (also relates to covariance overrides..)
 	 * TODO exotic class/interface bounds ('? extends List','? super anything')
 	 * TODO signature attributes for generic ITDs (public only?)
-	 * 
+	 *
 	 */
-	
+
 	public static Test suite() {
 		return XMLBasedAjcTestCase.loadSuite(GenericsTests.class);
 	}
@@ -186,15 +186,15 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	protected java.net.URL getSpecFile() {
 		return getClassResource("ajc150.xml");
 	}
-	
+
 	public void testITDReturningParameterizedType() {
 		runTest("ITD with parameterized type");
 	}
-	
+
 	public void testPR91267_1() {
 		runTest("NPE using generic methods in aspects 1");
 	}
-	
+
 	public void testParameterizedTypeAndAroundAdvice_PR115250() {
 		runTest("parameterized type and around advice");
 	}
@@ -202,29 +202,29 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testParameterizedTypeAndAroundAdvice_PR115250_2() {
 		runTest("parameterized type and around advice - 2");
 	}
-	
+
 	public void testPR91267_2() {
 		runTest("NPE using generic methods in aspects 2");
 	}
-	
+
 	public void testPR91053() {
 		runTest("Generics problem with Set");
 	}
-	
+
 	public void testPR87282() {
 		runTest("Compilation error on generic member introduction");
 	}
-	
+
 	public void testGenericsOverrides_1() { runTest("generics and ITD overrides - 1"); }
 	public void testGenericsOverrides_2() { runTest("generics and ITD overrides - 2"); }
 	public void testGenericsOverrides_3() { runTest("generics and ITD overrides - 3"); }
 	public void testGenericsOverrides_4() { runTest("generics and ITD overrides - 4"); }
-	
 
-    public void testSelfBoundGenerics_pr117296() { 
+
+    public void testSelfBoundGenerics_pr117296() {
 	    runTest("self bounding generic types");
     }
-	
+
 	public void testPR88606() {
 		runTest("Parameterized types on introduced fields not correctly recognized");
 	}
@@ -235,14 +235,14 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 
     public void testGenericsBang_pr95993() {
 	    runTest("NPE at ClassScope.java:660 when compiling generic class");
-    }    
-    
-	
+    }
+
+
 	// generic aspects
 	public void testPR96220_GenericAspects1() {runTest("generic aspects - 1");}
 	public void testPR96220_GenericAspects2() {runTest("generic aspects - 2");}
 	public void testPR96220_GenericAspects3() {runTest("generic aspects - 3");}
-	public void testGenericAspects4()         {runTest("generic aspects - 4");} 
+	public void testGenericAspects4()         {runTest("generic aspects - 4");}
 	public void testGenericAspects5()         {runTest("generic aspects - 5 (ajdk)");}  // in separate files
 	public void testGenericAspects6()         {runTest("generic aspects - 6 (ajdk)");}  // all in one file
 	public void testTypeVariablesInDeclareWarning() { runTest("generic aspect with declare warning using type vars");}
@@ -254,12 +254,12 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testDeclareSoftInGenericAspect() {
 		runTest("generic aspect declare soft");
 	}
-	
+
 	//////////////////////////////////////////////////////////////////////////////
     // Generic/Parameterized ITDs - includes scenarios from developers notebook //
     //////////////////////////////////////////////////////////////////////////////
-	
-	
+
+
 	// parsing of generic ITD members
 	public void testParseItdNonStaticMethod() {runTest("Parsing generic ITDs - 1");}
 	public void testParseItdStaticMethod()    {runTest("Parsing generic ITDs - 2");}
@@ -267,8 +267,8 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testParseItdComplexMethod()   {runTest("Parsing generic ITDs - 4");}
 	public void testParseItdSharingVars1()    {runTest("Parsing generic ITDs - 5");}
 	public void testParseItdSharingVars2()    {runTest("Parsing generic ITDs - 6");}
-	
-	
+
+
 	// non static
 	public void testGenericMethodITD1()  {runTest("generic method itd - 1");}   //  ... (List)
 	public void testGenericMethodITD2()  {runTest("generic method itd - 2");}   //  ... (List) called incorrectly
@@ -285,7 +285,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testGenericMethodITD13() {runTest("generic method itd - 13");}  // > ... (List) called correctly in a clever way ;)
 	public void testGenericMethodITD14() {runTest("generic method itd - 14");}  // > ... (List) called incorrectly in a clever way
 	public void testGenericMethodITD15() {runTest("generic method itd - 15");}  // > ... (List) called correctly in a clever way
-	
+
 
 
 	// generic ctors
@@ -293,29 +293,29 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testGenericCtorITD2() {runTest("generic ctor itd - 2");} //  new(List,List)
 	public void testGenericCtorITD3() {runTest("generic ctor itd - 3");} //  new(List,Comparator)
 
-	
+
 	// parameterized ITDs
 	public void testParameterizedMethodITD1() {runTest("parameterized method itd - 1");} // (List)
 	public void testParameterizedMethodITD2() {runTest("parameterized method itd - 2");} // (List) called incorrectly
 	public void testParameterizedMethodITD3() {runTest("parameterized method itd - 3");} // (List) called incorrectly
 	public void testParameterizedMethodITD4() {runTest("parameterized method itd - 4");} // (List)
-	
-	
+
+
 	// differing visibilities
 	public void testPublicITDs()       {runTest("public itds");}
 	public void testPublicITDsErrors() {runTest("public itds with errors");}
 	public void testPrivateITDs()      {runTest("private itds");}
 	public void testPackageITDs()      {runTest("package itds");}
-	
-	
+
+
 	// targetting different types (interface/class/aspect)
 	public void testTargettingInterface() {runTest("targetting interface");}
 	public void testTargettingAspect()    {runTest("targetting aspect");}
 	public void testTargettingClass()     {runTest("targetting class");}
-	
-	
-	
-	// using a type variable from the target generic type in your ITD	
+
+
+
+	// using a type variable from the target generic type in your ITD
 	public void testFieldITDsUsingTargetTypeVars1() {runTest("field itd using type variable from target type - 1");}
 	public void testFieldITDsUsingTargetTypeVars2() {runTest("field itd using type variable from target type - 2");}
 	public void testFieldITDsUsingTargetTypeVars3() {runTest("field itd using type variable from target type - 3");}
@@ -333,7 +333,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testFieldITDsUsingTargetTypeVars15(){runTest("field itd using type variable from target type -15");}
 	public void testFieldITDsUsingTargetTypeVars16(){runTest("field itd using type variable from target type -16");}
 	public void testFieldITDsUsingTargetTypeVars17(){runTest("field itd using type variable from target type -17");}
-	
+
 
 	public void testMethodITDsUsingTargetTypeVarsA1() {runTest("method itd using type variable from target type - A1");}
 	public void testMethodITDsUsingTargetTypeVarsA2() {runTest("method itd using type variable from target type - A2");}
@@ -358,7 +358,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testMethodITDsUsingTargetTypeVarsO2() {runTest("method itd using type variable from target type - O2");}
 	public void testMethodITDsUsingTargetTypeVarsP1() {runTest("method itd using type variable from target type - P1");}
 	public void testMethodITDsUsingTargetTypeVarsQ1() {runTest("method itd using type variable from target type - Q1");}
-	
+
 	public void testCtorITDsUsingTargetTypeVarsA1() {runTest("ctor itd using type variable from target type - A1");}
 	public void testCtorITDsUsingTargetTypeVarsB1() {runTest("ctor itd using type variable from target type - B1");}
 	public void testCtorITDsUsingTargetTypeVarsC1() {runTest("ctor itd using type variable from target type - C1");}
@@ -368,7 +368,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testCtorITDsUsingTargetTypeVarsG1() {runTest("ctor itd using type variable from target type - G1");}
 	public void testCtorITDsUsingTargetTypeVarsH1() {runTest("ctor itd using type variable from target type - H1");}
 	public void testCtorITDsUsingTargetTypeVarsI1() {runTest("ctor itd using type variable from target type - I1");}
-	
+
 	public void testSophisticatedAspectsA() {runTest("uberaspects - A");}
 	public void testSophisticatedAspectsB() {runTest("uberaspects - B");}
 	public void testSophisticatedAspectsC() {runTest("uberaspects - C");}
@@ -395,13 +395,13 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testSophisticatedAspectsW() {runTest("uberaspects - W");}
 	public void testSophisticatedAspectsX() {runTest("uberaspects - X");} // from the AJDK
 	public void testSophisticatedAspectsY() {runTest("uberaspects - Y");} // pointcut matching
-	public void testSophisticatedAspectsZ() {runTest("uberaspects - Z");} 
-	
+	public void testSophisticatedAspectsZ() {runTest("uberaspects - Z");}
+
 	// FIXME asc these two tests have peculiar error messages - generic aspect related
 //	public void testItdUsingTypeParameter() {runTest("itd using type parameter");}
 //	public void testItdIncorrectlyUsingTypeParameter() {runTest("itd incorrectly using type parameter");}
-	
-	
+
+
 	public void testUsingSameTypeVariable() {runTest("using same type variable in ITD");}
 
 	public void testBinaryWeavingITDsA() {runTest("binary weaving ITDs - A");}
@@ -409,17 +409,17 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testBinaryWeavingITDs1() {runTest("binary weaving ITDs - 1");}
 	public void testBinaryWeavingITDs2() {runTest("binary weaving ITDs - 2");}
 	public void testBinaryWeavingITDs3() {runTest("binary weaving ITDs - 3");}
-	public void testGenericITFSharingTypeVariable() {runTest("generic intertype field declaration, sharing type variable");}	
-	
-	
+	public void testGenericITFSharingTypeVariable() {runTest("generic intertype field declaration, sharing type variable");}
+
+
 	// general tests ... usually just more complex scenarios
 	public void testReusingTypeVariableLetters()   {runTest("reusing type variable letters");}
     public void testMultipleGenericITDsInOneFile() {runTest("multiple generic itds in one file");}
 	public void testItdNonStaticMember()           {runTest("itd of non static member");}
 	public void testItdStaticMember()              {runTest("itd of static member");}
 	public void testStaticGenericMethodITD()       {runTest("static generic method itd");}
-	
-	
+
+
 	public void testAtOverride0()  {runTest("atOverride used with ITDs");}
 	public void testAtOverride1()  {runTest("atOverride used with ITDs - 1");}
 	public void testAtOverride2()  {runTest("atOverride used with ITDs - 2");}
@@ -428,8 +428,8 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testAtOverride5()  {runTest("atOverride used with ITDs - 5");}
 	public void testAtOverride6()  {runTest("atOverride used with ITDs - 6");}
 	public void testAtOverride7()  {runTest("atOverride used with ITDs - 7");}
-	
-	
+
+
 	// bridge methods
 	public void testITDBridgeMethodsCovariance1() {runTest("bridging with covariance 1 - normal");}
 	public void testITDBridgeMethodsCovariance2() {runTest("bridging with covariance 1 - itd");}
@@ -438,8 +438,8 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testITDBridgeMethods2Normal()     {runTest("basic bridging with type vars - 2 - normal");}
 	public void testITDBridgeMethods2Itd()        {runTest("basic bridging with type vars - 2 - itd");}
 	public void testITDBridgeMethodsPr91381() {runTest("Abstract intertype method and covariant returns");}
-	
-	
+
+
 	// Just normal source compile of two types with a method override between them
     public void testGenericITDsBridgeMethods1() {
     	runTest("bridge methods - 1");
@@ -450,7 +450,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
     // Now the same thing but the aspect (which doesn't do much!) is binary woven in.
 	public void testGenericITDsBridgeMethods1binary()  {
 		runTest("bridge methods - 1 - binary");
-		checkMethodsExist("Sub1",new String[]{ 
+		checkMethodsExist("Sub1",new String[]{
 				"java.lang.Integer Sub1.m()",
 				"java.lang.Object Sub1.m() [BridgeMethod]"});
 	}
@@ -482,7 +482,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
     			"java.lang.Integer Sub3.m()",
     			"java.lang.Object Sub3.m() [BridgeMethod]"});
 	}
-	// Now the two types are disconnected until the aspect supplies a declare parents relationship - 
+	// Now the two types are disconnected until the aspect supplies a declare parents relationship -
 	// the bridge method should still be created in the subtype
 	public void testGenericITDSBridgeMethods4() {
 		runTest("bridge methods - 4");
@@ -497,7 +497,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
     			"java.lang.Integer Sub4.m()",
 				"java.lang.Object Sub4.m() [BridgeMethod]"});
 	}
-	
+
 	public void testBinaryBridgeMethodsOne() {
 		runTest("binary bridge methods - one");
 		checkMethodsExist("OneB",new String[]{
@@ -526,21 +526,21 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 				"java.lang.Double ThreeB.m()"
 		});
 	}
-	
-	
+
+
 	public void testGenericITDsBridgeMethodsPR91381()  {runTest("abstract intertype methods and covariant returns");}
 	public void testGenericITDsBridgeMethodsPR91381_2()  {runTest("abstract intertype methods and covariant returns - error");}
 
 	// ----------------------------------------------------------------------------------------
 	// generic declare parents tests
 	// ----------------------------------------------------------------------------------------
-	
+
 	public void testPR96220_GenericDecp() {
 		runTest("generic decp - simple");
 		checkOneSignatureAttribute(ajc,"Basic");
 		verifyClassSignature(ajc,"Basic","Ljava/lang/Object;LJ;LI;");
 	}
-	
+
 	// Both the existing type decl and the one adding via decp are parameterized
 	public void testGenericDecpMultipleVariantsOfAParameterizedType1() {
 		runTest("generic decp - implementing two variants #1");
@@ -560,12 +560,12 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testGenericDecpMultipleVariantsOfAParameterizedType4() {
 		runTest("generic decp - implementing two variants #4");
 	}
-	
+
 	// same as above four tests for binary weaving
 	public void testGenericDecpMultipleVariantsOfAParameterizedType1_binaryWeaving() {
 		runTest("generic decp binary - implementing two variants #1");
 	}
-	
+
 	public void testGenericDecpMultipleVariantsOfAParameterizedType2_binaryWeaving() {
 		runTest("generic decp binary - implementing two variants #2");
 	}
@@ -585,19 +585,19 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 		checkOneSignatureAttribute(ajc,"Basic6");
 		verifyClassSignature(ajc,"Basic6","Ljava/lang/Object;LI;LK;");
 	}
-	
+
 	public void testGenericDecpIncorrectNumberOfTypeParams() {
 		runTest("generic decp - incorrect number of type parameters");
 	}
-	
+
 	public void testGenericDecpSpecifyingBounds() {
 		runTest("generic decp - specifying bounds");
 	}
-	
+
 	public void testGenericDecpViolatingBounds() {
 		runTest("generic decp - specifying bounds but breaking them");
 	}
-	
+
 	// need separate compilation test to verify signatures are ok
 //
 //	public void testIllegalGenericDecp() {
@@ -607,18 +607,18 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 //	public void testPR95992_TypeResolvingProblemWithGenerics() {
 //		runTest("Problems resolving type name inside generic class");
 //	}
-	
+
 
 	// -- Pointcut tests...
 
 	public void testHandlerWithGenerics() {
 		runTest("handler pcd and generics / type vars");
 	}
-	
+
 	public void testPointcutsThatDontAllowTypeVars() {
 		runTest("pointcuts that dont allow type vars");
 	}
-	
+
 	public void testParameterizedTypesInAtPCDs() {
 		runTest("annotation pcds with parameterized types");
 	}
@@ -626,7 +626,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testAnnotationPatternsWithParameterizedTypes() {
 		runTest("annotation patterns with parameterized types");
 	}
-	
+
 	public void testStaticInitializationWithParameterizedTypes() {
 		runTest("staticinitialization and parameterized types");
 	}
@@ -643,9 +643,9 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 
 // no longer a valid test in simplified design
 //	public void testStaticInitializationWithGenericTypesAdvanced() {
-//		runTest("staticinitialization with generic types - advanced");		
+//		runTest("staticinitialization with generic types - advanced");
 //	}
-	
+
 	public void testWithinPointcutErrors() {
 		runTest("within pcd with various parameterizations and generic types - errors");
 	}
@@ -653,7 +653,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testWithinPointcutWarnings() {
 		runTest("within pcd with various parameterizations and generic types - warnings");
 	}
-	
+
 	public void testThisTargetPointcutErrors() {
 		runTest("this and target with various parameterizations and generic types - errors");
 	}
@@ -661,47 +661,47 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testThisTargetPointcutRuntime() {
 		runTest("this and target with various parameterizations and generic types - runtime");
 	}
-	
+
 	public void testInitAndPreInitPointcutErrors() {
 		runTest("init and preinit with parameterized declaring types");
 	}
-	
+
 	public void testInitAndPreInitPointcutMatchingWithGenericDeclaringTypes() {
 		runTest("init and preinit with raw declaring type pattern");
 	}
-	
+
 	public void testInitAndPreInitPointcutMatchingWithParameterizedParameterTypes() {
 		runTest("init and preinit with parameterized parameter types");
 	}
-	
+
 	public void testWithinCodePointcutErrors() {
 		runTest("withincode with various parameterizations and generic types - errors");
 	}
-	
+
 	public void testWithinCodeMatching() {
 		runTest("withincode with various parameterizations and generic types - matching");
 	}
-	
+
 	public void testWithinCodeOverrideMatchingWithGenericMembers() {
 		runTest("withincode with overriding of inherited generic members");
 	}
-	
+
 	public void testExecutionWithRawType() {
 		runTest("execution pcd with raw type matching");
 	}
-	
+
 	public void testExecutionWithRawSignature() {
 		runTest("execution pcd with raw signature matching");
 	}
-	
+
 	public void testExecutionPointcutErrors() {
 		runTest("execution with various parameterizations and generic types - errors");
 	}
-	
+
 	public void testExecutionMatching() {
 		runTest("execution with various parameterizations and generic types - matching");
 	}
-	
+
 	public void testExecutionOverrideMatchingWithGenericMembers() {
 		runTest("execution with overriding of inherited generic members");
 	}
@@ -709,15 +709,15 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testCallPointcutErrors() {
 		runTest("call with various parameterizations and generic types - errors");
 	}
-	
+
 	public void testCallMatching() {
 		runTest("call with various parameterizations and generic types - matching");
 	}
-	
+
 	public void testCallOverrideMatchingWithGenericMembers() {
 		runTest("call with overriding of inherited generic members");
 	}
-	
+
 	public void testCallWithBridgeMethods() {
 		runTest("call with bridge methods");
 	}
@@ -725,47 +725,47 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testGetAndSetPointcutErrors() {
 		runTest("get and set with various parameterizations and generic types - errors");
 	}
-	
+
 	public void testGetAndSetPointcutMatchingWithGenericAndParameterizedTypes() {
 		runTest("get and set with various parameterizations and generic declaring types");
 	}
-	
+
 	public void testGetAndSetPointcutMatchingWithGenericAndParameterizedFieldTypes() {
 		runTest("get and set with various parameterizations and generic field types");
 	}
-	
+
 	public void testArgsWithRawType() {
 		runTest("args with raw type and generic / parameterized sigs");
 	}
-	
+
 	public void testArgsParameterizedType() {
 		runTest("args with parameterized type and generic / parameterized sigs");
 	}
-	
+
 	public void testArgsParameterizedAndWildcards() {
 		runTest("args with parameterized type and wildcards");
 	}
-	
+
 	public void testArgsWithWildcardVar() {
 		runTest("args with generic wildcard");
 	}
-	
+
 	public void testArgsWithWildcardExtendsVar() {
 		runTest("args with generic wildcard extends");
 	}
-	
+
 	public void testArgsWithWildcardSuperVar() {
 		runTest("args with generic wildcard super");
 	}
-	
+
 	public void testGenericMethodMatching() {
 		runTest("generic method matching");
 	}
-	
+
 	public void testGenericWildcardsInSignatureMatching() {
 		runTest("generic wildcards in signature matching");
 	}
-	
+
 	public void testAfterThrowing() {
 		runTest("after throwing with parameterized throw type");
 	}
@@ -773,108 +773,108 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 	public void testAfterReturningWithRawType() {
 		runTest("after returning with raw type and generic / parameterized sigs");
 	}
-	
+
 	public void testAfterReturningParameterizedType() {
 		runTest("after returning with parameterized type and generic / parameterized sigs");
 	}
-	
+
 	public void testAfterReturningParameterizedAndWildcards() {
 		runTest("after returning with parameterized type and wildcards");
 	}
 
 	public void testAfterReturningWithWildcardVar() {
-		if (LangUtil.is19VMOrGreater()) {
+		if (LangUtil.is9VMOrGreater()) {
 			// See ReferenceType.isCoerceableFrom comments
 			return;
 		}
 		// Something to investigate here. The implementation of isCoerceable
 		runTest("after returning with generic wildcard");
 	}
-	
+
 	public void testAfterReturningWithWildcardExtendsVar() {
 		runTest("after returning with generic wildcard extends");
 	}
-	
+
 	public void testAfterReturningWithWildcardSuperVar() {
 		runTest("after returning with generic wildcard super");
 	}
-	
+
 	public void testAJDKErasureMatchingExamples() {
 		runTest("ajdk notebook: erasure matching examples");
 	}
-	
+
 	public void testAJDKParameterizedMatchingSimpleExamples() {
 		runTest("ajdk notebook: simple parameterized type matching examples");
 	}
-	
+
 	public void testAJDKMixedTypeVarsAndParametersExample() {
 		runTest("ajdk notebook: mixed parameterized types and generic methods");
 	}
-	
+
 	public void testAJDKSignatureAndWildcardExamples() {
 		runTest("ajdk notebook: signature matching with generic wildcards");
 	}
-	
+
 	// had to remove at e37 level - although pointcuts are likely to work, we can't compile the code
 	// that invokes the bridge methods - seems the compiler is too smart and won't let them through.
 //	public void testAJDKBridgeMethodExamples() {
 //		runTest("ajdk notebook: bridge method examples");
 //	}
-	
+
 	public void testAJDKArgsExamples() {
 		runTest("ajdk notebook: args examples");
 	}
-	
+
 	public void testAJDKArgsAndWildcardsExamples() {
 		runTest("ajdk notebook: args and wildcards examples");
 	}
-	
+
 	public void testAJDKAfterReturningExamples() {
 		runTest("ajdk notebook: after returning examples");
 	}
-	
+
 	public void testAJDKPointcutInGenericClassExample() {
 		runTest("ajdk notebook: pointcut in generic class example");
 	}
-	
+
 	// TESTS for generic abstract aspects that get extended and parameterized...
-	
+
 	public void testStaticPointcutParameterization() {
 		runTest("static pointcut parameterization suite");
 	}
-	
+
 	public void testDynamicPointcutParameterization() {
 		runTest("dynamic pointcut parameterization suite");
 	}
-	
+
 	public void testReferenceToPointcutInGenericClass() {
 		runTest("reference to pointcut in generic class");
 	}
-	
+
 	public void testReferenceToPointcutInGenericClass2() {
 		runTest("reference to non-parameterized pointcut in generic class");
 	}
-	
+
 	public void testDeclareParentsParameterized() {
 		runTest("declare parents parameterized");
 	}
-	
-	public void testDeclarePrecedenceParameterized() { 
+
+	public void testDeclarePrecedenceParameterized() {
 		runTest("declare precedence parameterized");
 	}
-	
+
 	public void testDeclareAnnotationParameterized() {
 		runTest("declare annotation parameterized");
 	}
-	
+
 	public void testMultiLevelGenericAspects() {
 		runTest("multi-level generic abstract aspects");
 	}
-	
+
 	// --- helpers
-		
+
 		/**
-	 * When a class has been written to the sandbox directory, you can ask this method to 
+	 * When a class has been written to the sandbox directory, you can ask this method to
 	 * verify it contains a particular set of methods.  Typically this is used to verify that
 	 * bridge methods have been created.
 	 */
@@ -899,7 +899,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 		} catch (MalformedURLException e) {
 			e.printStackTrace();
 		}
-		
+
 		// check the methods specified do exist
 		for (String string : methods) {
 			if (!methodsFound.remove(string)) {
@@ -913,9 +913,9 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 			}
 			fail("These methods weren't expected: "+unexpectedMethods);
 		}
-		
+
 	}
-    
+
     /**
      * Use 1.5 API isBridge if available.
      * See JLS3 15.12.4.5 Create Frame, Synchronize, Transfer Control
@@ -924,7 +924,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
         // why not importing java.lang.reflect.Method? No BCEL clash?
 		try {
             final Class[] noparms = new Class[0];
-            java.lang.reflect.Method isBridge 
+            java.lang.reflect.Method isBridge
                 = java.lang.reflect.Method.class.getMethod("isBridge", noparms);
             Boolean result = (Boolean) isBridge.invoke(m, new Object[0]);
             return result;
@@ -934,7 +934,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
     }
 	public static JavaClass getClass(Ajc ajc, String classname) {
 		try {
-			ClassPath cp = 
+			ClassPath cp =
 				new ClassPath(ajc.getSandboxDirectory() + File.pathSeparator + System.getProperty("java.class.path"));
 		    SyntheticRepository sRepos =  SyntheticRepository.getInstance(cp);
 			JavaClass clazz = sRepos.loadClass(classname);
@@ -944,7 +944,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 		}
 		return null;
 	}
-	
+
 	public static Signature getClassSignature(Ajc ajc,String classname) {
 	    JavaClass clazz = getClass(ajc,classname);
 		Signature sigAttr = null;
@@ -954,7 +954,7 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 		}
 		return sigAttr;
 	}
-	
+
 	public static void checkOneSignatureAttribute(Ajc ajc,String classname) {
 		JavaClass clazz = getClass(ajc,classname);
 		Attribute[] attrs = clazz.getAttributes();
@@ -968,15 +968,15 @@ public class GenericsTests extends XMLBasedAjcTestCase {
 		}
 		if (signatureCount>1) fail("Should be only one signature attribute but found "+signatureCount+sb.toString());
 	}
-	
+
 	// Check the signature attribute on a class is correct
 	public static void verifyClassSignature(Ajc ajc,String classname,String sig) {
 		Signature sigAttr = getClassSignature(ajc,classname);
 		assertTrue("Failed to find signature attribute for class "+classname,sigAttr!=null);
 		assertTrue("Expected signature to be '"+sig+"' but was '"+sigAttr.getSignature()+"'",
-				sigAttr.getSignature().equals(sig));		
+				sigAttr.getSignature().equals(sig));
 	}
-		
+
 	private static String stringify(Class[] clazzes) {
 		if (clazzes==null) return "";
 		StringBuffer sb = new StringBuffer();
diff --git a/tests/src/test/java/org/aspectj/systemtest/apt/AptTests.java b/tests/src/test/java/org/aspectj/systemtest/apt/AptTests.java
index 3b6430c38..b459d2a29 100644
--- a/tests/src/test/java/org/aspectj/systemtest/apt/AptTests.java
+++ b/tests/src/test/java/org/aspectj/systemtest/apt/AptTests.java
@@ -23,7 +23,7 @@ import junit.framework.Test;
 public class AptTests extends XMLBasedAjcTestCase {
 
   public void testAptWithSpecifiedProcessor() {
-	  if (LangUtil.is19VMOrGreater()) {
+	  if (LangUtil.is9VMOrGreater()) {
 		  return;
 	  }
     runTest("annotation processing with specified processor");
@@ -33,7 +33,7 @@ public class AptTests extends XMLBasedAjcTestCase {
    * SPI - http://docs.oracle.com/javase/tutorial/sound/SPI-intro.html
    */
   public void testAptUsingSPI() {
-	  if (LangUtil.is19VMOrGreater()) {
+	  if (LangUtil.is9VMOrGreater()) {
 		  return;
 	  }
     runTest("annotation processing in action using SPI");
diff --git a/tests/src/test/java/org/aspectj/systemtest/incremental/tools/MultiProjTestCompilerConfiguration.java b/tests/src/test/java/org/aspectj/systemtest/incremental/tools/MultiProjTestCompilerConfiguration.java
index b3ae1b6c1..a4af3112d 100644
--- a/tests/src/test/java/org/aspectj/systemtest/incremental/tools/MultiProjTestCompilerConfiguration.java
+++ b/tests/src/test/java/org/aspectj/systemtest/incremental/tools/MultiProjTestCompilerConfiguration.java
@@ -1,11 +1,11 @@
 /********************************************************************
- * Copyright (c) 2007 Contributors. All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: IBM Corporation - initial API and implementation 
+ * Copyright (c) 2007 Contributors. All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: IBM Corporation - initial API and implementation
  * 				 Helen Hawkins   - initial version (bug 148190)
  *******************************************************************/
 package org.aspectj.systemtest.incremental.tools;
@@ -75,7 +75,7 @@ public class MultiProjTestCompilerConfiguration implements ICompilerConfiguratio
 				+ "c:/batik/batik-1.6/lib/batik-svggen.jar;" + File.pathSeparator + ".." + File.separator + "lib" + File.separator
 				+ "test" + File.separator + "aspectjrt.jar";
 		verifyClasspath(cp);
-		if (LangUtil.is19VMOrGreater()) {
+		if (LangUtil.is9VMOrGreater()) {
 			cp = LangUtil.getJrtFsFilePath() + File.pathSeparator + cp;
 		}
 
@@ -178,7 +178,7 @@ public class MultiProjTestCompilerConfiguration implements ICompilerConfiguratio
 		this.outjar = outjar;
 		this.changed |= ICompilerConfiguration.OUTJAR_CHANGED;
 	}
-	
+
 	public void setProcessor(String processor) {
 		this.processor = processor;
 		this.changed |= ICompilerConfiguration.PROCESSOR_CHANGED;
diff --git a/tests/src/test/java/org/aspectj/tests/TestsModuleTests.java b/tests/src/test/java/org/aspectj/tests/TestsModuleTests.java
index 72e31e121..351c91f1e 100644
--- a/tests/src/test/java/org/aspectj/tests/TestsModuleTests.java
+++ b/tests/src/test/java/org/aspectj/tests/TestsModuleTests.java
@@ -26,7 +26,7 @@ public class TestsModuleTests extends TestCase {
 		String name = TestsModuleTests.class.getName();
 		TestSuite suite = new TestSuite(name);
 		// compiler tests, wrapped for JUnit
-		if (LangUtil.is19VMOrGreater()) {
+		if (LangUtil.is9VMOrGreater()) {
 			suite.addTest(AllTests19.suite());
 		} else {
 			suite.addTest(AllTests18.suite());
diff --git a/util/src/main/java/org/aspectj/util/LangUtil.java b/util/src/main/java/org/aspectj/util/LangUtil.java
index fecf38e47..1f4ee65b4 100644
--- a/util/src/main/java/org/aspectj/util/LangUtil.java
+++ b/util/src/main/java/org/aspectj/util/LangUtil.java
@@ -126,7 +126,7 @@ public class LangUtil {
 	}
 
 	@Deprecated
-	public static boolean isOnePointThreeVMOrGreater() {
+	public static boolean is1dot3VMOrGreater() {
 		return 1.3 <= vmVersion;
 	}
 
@@ -136,25 +136,25 @@ public class LangUtil {
 	}
 
 	@Deprecated
-	public static boolean is15VMOrGreater() {
+	public static boolean is1dot5VMOrGreater() {
 		return 1.5 <= vmVersion;
 	}
 
 	@Deprecated
-	public static boolean is16VMOrGreater() {
+	public static boolean is1dot6VMOrGreater() {
 		return 1.6 <= vmVersion;
 	}
 
 	@Deprecated
-	public static boolean is17VMOrGreater() {
+	public static boolean is1dot7VMOrGreater() {
 		return 1.7 <= vmVersion;
 	}
 
-	public static boolean is18VMOrGreater() {
+	public static boolean is1dot8VMOrGreater() {
 		return 1.8 <= vmVersion;
 	}
 
-	public static boolean is19VMOrGreater() {
+	public static boolean is9VMOrGreater() {
 		return 9 <= vmVersion;
 	}
 
@@ -178,6 +178,10 @@ public class LangUtil {
 		return 14 <= vmVersion;
 	}
 
+	public static boolean is15VMOrGreater() {
+		return 15 <= vmVersion;
+	}
+
 	/**
 	 * Shorthand for "if null, throw IllegalArgumentException"
 	 *
diff --git a/util/src/test/java/org/aspectj/util/LangUtilTest.java b/util/src/test/java/org/aspectj/util/LangUtilTest.java
index 87b976957..fddc6f946 100644
--- a/util/src/test/java/org/aspectj/util/LangUtilTest.java
+++ b/util/src/test/java/org/aspectj/util/LangUtilTest.java
@@ -101,9 +101,9 @@ public class LangUtilTest extends TestCase {
 	// }
 
 	public void testVersion() {
-		assertTrue(LangUtil.is18VMOrGreater()); // min vm now - floor may change
+		assertTrue(LangUtil.is1dot8VMOrGreater()); // min vm now - floor may change
 		if (LangUtil.is11VMOrGreater()) {
-			assertTrue(LangUtil.is19VMOrGreater());
+			assertTrue(LangUtil.is9VMOrGreater());
 			assertTrue(LangUtil.is10VMOrGreater());
 		}
 	}
diff --git a/weaver/src/main/java/org/aspectj/weaver/bcel/ClassPathManager.java b/weaver/src/main/java/org/aspectj/weaver/bcel/ClassPathManager.java
index 76acc6e7f..2b8cc5ceb 100644
--- a/weaver/src/main/java/org/aspectj/weaver/bcel/ClassPathManager.java
+++ b/weaver/src/main/java/org/aspectj/weaver/bcel/ClassPathManager.java
@@ -351,7 +351,7 @@ public class ClassPathManager {
 						String jdkHome = new File(jrtFsPath).getParentFile().getParent();
 						FileSystem fs = null;
 						try {
-							if (LangUtil.is19VMOrGreater()) {
+							if (LangUtil.is9VMOrGreater()) {
 								Map env = new HashMap<>();
 								env.put("java.home",  jdkHome);
 								fs = FileSystems.newFileSystem(JRT_URI, env);
diff --git a/weaver/src/main/java/org/aspectj/weaver/tools/WeavingAdaptor.java b/weaver/src/main/java/org/aspectj/weaver/tools/WeavingAdaptor.java
index f191da13b..a27824635 100644
--- a/weaver/src/main/java/org/aspectj/weaver/tools/WeavingAdaptor.java
+++ b/weaver/src/main/java/org/aspectj/weaver/tools/WeavingAdaptor.java
@@ -149,7 +149,7 @@ public class WeavingAdaptor implements IMessageContext {
 		}
 		// On Java9 it is possible to fail to find a URLClassLoader from which to derive a suitable classpath
 		// For now we can determine it from the java.class.path:
-        if (LangUtil.is19VMOrGreater()) {
+        if (LangUtil.is9VMOrGreater()) {
 	    		list.add(0, LangUtil.getJrtFsFilePath());
 			List javaClassPathEntries = makeClasspath(System.getProperty("java.class.path"));
 			for (int i=javaClassPathEntries.size()-1;i>=0;i--) {
@@ -945,4 +945,4 @@ public class WeavingAdaptor implements IMessageContext {
 	public void setActiveProtectionDomain(ProtectionDomain protectionDomain) {
 		activeProtectionDomain = protectionDomain;
 	}
-}
\ No newline at end of file
+}
diff --git a/weaver/src/test/java/org/aspectj/weaver/WeaverModuleTests.java b/weaver/src/test/java/org/aspectj/weaver/WeaverModuleTests.java
index 78566e523..4ef5bf3e0 100644
--- a/weaver/src/test/java/org/aspectj/weaver/WeaverModuleTests.java
+++ b/weaver/src/test/java/org/aspectj/weaver/WeaverModuleTests.java
@@ -1,13 +1,13 @@
 /* *******************************************************************
  * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     PARC     initial implementation 
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     PARC     initial implementation
  * ******************************************************************/
 package org.aspectj.weaver;
 
@@ -110,7 +110,7 @@ public class WeaverModuleTests extends TestCase {
 		suite.addTestSuite(FieldSetTestCase.class);
 		suite.addTestSuite(HierarchyDependsTestCase.class);
 		suite.addTestSuite(IdWeaveTestCase.class);
-        if (LangUtil.is19VMOrGreater()) {
+        if (LangUtil.is9VMOrGreater()) {
         	suite.addTestSuite(JImageTestCase.class);
         }
 		suite.addTestSuite(MegaZipTestCase.class);
@@ -125,7 +125,7 @@ public class WeaverModuleTests extends TestCase {
 		suite.addTestSuite(WorldTestCase.class);
 		suite.addTestSuite(ZipTestCase.class);
 		suite.addTestSuite(TypeXTestCase.class);
-		
+
 		suite.addTestSuite(AnnotationPatternMatchingTestCase.class);
 		suite.addTestSuite(AnnotationPatternTestCase.class);
 		suite.addTestSuite(ConcretizationTestCase.class);
diff --git a/weaver/src/test/java/org/aspectj/weaver/bcel/JImageTestCase.java b/weaver/src/test/java/org/aspectj/weaver/bcel/JImageTestCase.java
index abb8c08b2..faa645f84 100644
--- a/weaver/src/test/java/org/aspectj/weaver/bcel/JImageTestCase.java
+++ b/weaver/src/test/java/org/aspectj/weaver/bcel/JImageTestCase.java
@@ -1,10 +1,10 @@
 /* *******************************************************************
  * Copyright (c) 2017 Contributors
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
  * ******************************************************************/
 package org.aspectj.weaver.bcel;
 
@@ -35,7 +35,7 @@ import junit.framework.TestCase;
 
 /**
  * Exercise the JImage handling in @link {@link org.aspectj.weaver.bcel.ClassPathManager}.
- * 
+ *
  * @author Andy Clement
  */
 public class JImageTestCase extends TestCase {
@@ -47,15 +47,15 @@ public class JImageTestCase extends TestCase {
 		paths.add(LangUtil.getJrtFsFilePath());
 		cpm = new ClassPathManager(paths,new TestMessageHandler());
 	}
-	
+
 	public void testOnJava9() {
-		if (!LangUtil.is19VMOrGreater()) {
+		if (!LangUtil.is9VMOrGreater()) {
 			System.out.println("SKIPPING JIMAGE TESTS AS NOT ON 1.9 OR LATER");
 		}
 	}
-	
-	public void testBasicStructureAndCapabilities() {	
-		if (!LangUtil.is19VMOrGreater()) return;
+
+	public void testBasicStructureAndCapabilities() {
+		if (!LangUtil.is9VMOrGreater()) return;
 		// Should be one entry for finding JRT contents
 		List entries = cpm.getEntries();
 		assertEquals(1,entries.size());
@@ -65,11 +65,11 @@ public class JImageTestCase extends TestCase {
 		assertNotNull(stringClassFile);
 		assertEquals("java/lang/String.class",stringClassFile.getPath());
 	}
-	
+
 	public void testBehaviour() throws Exception {
-		if (!LangUtil.is19VMOrGreater()) return;
+		if (!LangUtil.is9VMOrGreater()) return;
 		JImageEntry jie = getJImageEntry();
-		
+
 		Map packageCache = jie.getPackageCache();
 		assertTrue(packageCache.size()>0);
 		// Note: seems to be about 1625 entries in it for Java9
@@ -77,12 +77,12 @@ public class JImageTestCase extends TestCase {
 		assertEquals("modules/java.base/java/lang", path.toString());
 		path = packageCache.get("java/io");
 		assertEquals("modules/java.base/java/io", path.toString());
-		
+
 		assertNotNull(jie.find("java/lang/String"));
 		assertNotNull(jie.find("java/io/File"));
 		// TODO test the filecache, hard because difficult to simulate collection of SoftReferences
 	}
-	
+
 
 	static class TestMessageHandler implements IMessageHandler {
 
@@ -103,11 +103,11 @@ public class JImageTestCase extends TestCase {
 		@Override
 		public void ignore(Kind kind) {
 		}
-		
+
 	}
 
 	// ---
-	
+
 	private JImageEntry getJImageEntry() {
 		return (JImageEntry) cpm.getEntries().get(0);
 	}