Fix and improve the CI Jobstags/V1_9_7M1
runs-on: ubuntu-latest | runs-on: ubuntu-latest | ||||
strategy: | strategy: | ||||
fail-fast: false | |||||
matrix: | matrix: | ||||
java: [ 1.8, 11 ] | |||||
java: [ 8, 9, 10, 11, 12, 13, 14 ] | |||||
steps: | steps: | ||||
- uses: actions/checkout@v2 | - uses: actions/checkout@v2 | ||||
- name: Set up JDK ${{ matrix.java }} | - name: Set up JDK ${{ matrix.java }} | ||||
uses: actions/setup-java@v1 | uses: actions/setup-java@v1 | ||||
with: | with: | ||||
java-version: ${{ matrix.java }} | java-version: ${{ matrix.java }} | ||||
- run: java -version | |||||
- run: mvn --version | |||||
- name: Build with Maven | - name: Build with Maven | ||||
run: mvn -Dorg.aspectj.tools.ajc.Ajc.verbose=false -B package --file pom.xml | run: mvn -Dorg.aspectj.tools.ajc.Ajc.verbose=false -B package --file pom.xml |
package org.aspectj.tools.ajdoc; | package org.aspectj.tools.ajdoc; | ||||
import java.lang.reflect.InvocationTargetException; | |||||
import java.lang.reflect.Method; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Vector; | import java.util.Vector; | ||||
*/ | */ | ||||
class JavadocRunner { | class JavadocRunner { | ||||
static boolean has14ToolsAvailable() { | |||||
try { | |||||
Class jdMainClass = com.sun.tools.javadoc.Main.class; | |||||
Class[] paramTypes = new Class[] { String[].class }; | |||||
jdMainClass.getMethod("execute", paramTypes); | |||||
} catch (NoClassDefFoundError e) { | |||||
return false; | |||||
} catch (UnsupportedClassVersionError e) { | |||||
return false; | |||||
} catch (NoSuchMethodException e) { | |||||
return false; | |||||
} | |||||
return true; | |||||
} | |||||
static void callJavadoc(String[] javadocargs) { | |||||
// final SecurityManager defaultSecurityManager = System.getSecurityManager(); | |||||
// | |||||
// System.setSecurityManager( new SecurityManager() { | |||||
// public void checkExit(int status) { | |||||
// if (status == 0) { | |||||
// throw new SecurityException(); | |||||
// } | |||||
// else { | |||||
// System.setSecurityManager(defaultSecurityManager); | |||||
// //System.out.println("Error: javadoc exited unexpectedly"); | |||||
// System.exit(0); | |||||
// throw new SecurityException(); | |||||
// } | |||||
// } | |||||
// public void checkPermission( java.security.Permission permission ) { | |||||
// if ( defaultSecurityManager != null ) | |||||
// defaultSecurityManager.checkPermission( permission ); | |||||
// } | |||||
// public void checkPermission( java.security.Permission permission, | |||||
// Object context ) { | |||||
// if ( defaultSecurityManager != null ) | |||||
// defaultSecurityManager.checkPermission( permission, context ); | |||||
// } | |||||
// } ); | |||||
try { | |||||
// for JDK 1.4 and above call the execute method... | |||||
Class jdMainClass = com.sun.tools.javadoc.Main.class; | |||||
Method executeMethod = null; | |||||
try { | |||||
Class[] paramTypes = new Class[] { String[].class }; | |||||
executeMethod = jdMainClass.getMethod("execute", paramTypes); | |||||
} catch (NoSuchMethodException e) { | |||||
com.sun.tools.javadoc.Main.main(javadocargs); | |||||
// throw new UnsupportedOperationException("ajdoc requires a tools library from JDK 1.4 or later."); | |||||
} | |||||
try { | |||||
executeMethod.invoke(null, new Object[] { javadocargs }); | |||||
} catch (IllegalArgumentException e1) { | |||||
throw new RuntimeException("Failed to invoke javadoc"); | |||||
} catch (IllegalAccessException e1) { | |||||
throw new RuntimeException("Failed to invoke javadoc"); | |||||
} catch (InvocationTargetException e1) { | |||||
throw new RuntimeException("Failed to invoke javadoc"); | |||||
} | |||||
// main method is documented as calling System.exit() - which stops us dead in our tracks | |||||
// com.sun.tools.javadoc.Main.main( javadocargs ); | |||||
} catch (SecurityException se) { | |||||
// Do nothing since we expect it to be thrown | |||||
// System.out.println( ">> se: " + se.getMessage() ); | |||||
} | |||||
// Set the security manager back | |||||
// System.setSecurityManager(defaultSecurityManager); | |||||
} | |||||
public static void callJavadocViaToolProvider(Vector<String> options, List<String> files) { | public static void callJavadocViaToolProvider(Vector<String> options, List<String> files) { | ||||
DocumentationTool doctool = ToolProvider.getSystemDocumentationTool(); | DocumentationTool doctool = ToolProvider.getSystemDocumentationTool(); | ||||
StandardJavaFileManager fm = doctool.getStandardFileManager(null, null, null); | StandardJavaFileManager fm = doctool.getStandardFileManager(null, null, null); |
import org.aspectj.bridge.IMessage; | import org.aspectj.bridge.IMessage; | ||||
import org.aspectj.bridge.Version; | import org.aspectj.bridge.Version; | ||||
import org.aspectj.util.FileUtil; | import org.aspectj.util.FileUtil; | ||||
import org.aspectj.util.LangUtil; | |||||
/** | /** | ||||
* This is an old implementation of ajdoc that does not use an OO style. However, it does the job, and should serve to evolve a | * This is an old implementation of ajdoc that does not use an OO style. However, it does the job, and should serve to evolve a | ||||
public static void main(String[] args) { | public static void main(String[] args) { | ||||
clearState(); | clearState(); | ||||
if (!JavadocRunner.has14ToolsAvailable()) { | |||||
System.err.println("ajdoc requires a JDK 1.4 or later tools jar - exiting"); | |||||
aborted = true; | |||||
return; | |||||
} | |||||
// STEP 1: parse the command line and do other global setup | // STEP 1: parse the command line and do other global setup | ||||
sourcepath.addElement("."); // add the current directory to the classapth | sourcepath.addElement("."); // add the current directory to the classapth | ||||
for (int k = 0; k < fileList.size(); k++) { | for (int k = 0; k < fileList.size(); k++) { | ||||
javadocargs[numExtraArgs + options.size() + packageList.size() + k] = fileList.elementAt(k); | javadocargs[numExtraArgs + options.size() + packageList.size() + k] = fileList.elementAt(k); | ||||
} | } | ||||
if (LangUtil.is19VMOrGreater()) { | |||||
options = new Vector<>(); | |||||
for (String a: javadocargs) { | |||||
options.add(a); | |||||
} | |||||
options = new Vector<>(); | |||||
for (String a: javadocargs) { | |||||
options.add(a); | |||||
} | } | ||||
} else { | } else { | ||||
javadocargs = new String[options.size() + signatureFiles.length]; | javadocargs = new String[options.size() + signatureFiles.length]; | ||||
files.add(StructureUtil.translateAjPathName(signatureFile.getCanonicalPath())); | files.add(StructureUtil.translateAjPathName(signatureFile.getCanonicalPath())); | ||||
} | } | ||||
} | } | ||||
if (LangUtil.is19VMOrGreater()) { | |||||
JavadocRunner.callJavadocViaToolProvider(options, files); | |||||
} else { | |||||
JavadocRunner.callJavadoc(javadocargs); | |||||
} | |||||
JavadocRunner.callJavadocViaToolProvider(options, files); | |||||
} | } | ||||
/** | /** |
} | } | ||||
public void testJrockitRecursionProtection() { | public void testJrockitRecursionProtection() { | ||||
if (LangUtil.is11VMOrGreater()) { | |||||
if (LangUtil.is19VMOrGreater()) { | |||||
// Skip test, not castable to URLClassLoader | // Skip test, not castable to URLClassLoader | ||||
return; | return; | ||||
} | } |