@@ -1,7 +1,9 @@ | |||
eclipse.preferences.version=1 | |||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 | |||
org.eclipse.jdt.core.compiler.compliance=1.8 | |||
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled | |||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning | |||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore | |||
org.eclipse.jdt.core.compiler.processAnnotations=disabled | |||
org.eclipse.jdt.core.compiler.release=disabled | |||
org.eclipse.jdt.core.compiler.source=1.8 |
@@ -90,6 +90,8 @@ public interface Constants { | |||
public final static short MINOR_12 = 0; | |||
public final static short MAJOR_13 = 57; | |||
public final static short MINOR_13 = 0; | |||
public final static short MAJOR_14 = 58; | |||
public final static short MINOR_14 = 0; | |||
public final static int PREVIEW_MINOR_VERSION = 65535; | |||
@@ -666,13 +668,13 @@ public interface Constants { | |||
public static final short KNOWN_ATTRIBUTES = 28; | |||
public static final String[] ATTRIBUTE_NAMES = { | |||
"SourceFile", "ConstantValue", "Code", "Exceptions", "LineNumberTable", "LocalVariableTable", | |||
"InnerClasses", "Synthetic", "Deprecated", "PMGClass", "Signature", "StackMap", | |||
"RuntimeVisibleAnnotations", "RuntimeInvisibleAnnotations", "RuntimeVisibleParameterAnnotations", | |||
"RuntimeInvisibleParameterAnnotations", "LocalVariableTypeTable", "EnclosingMethod", | |||
"AnnotationDefault","BootstrapMethods", "RuntimeVisibleTypeAnnotations", "RuntimeInvisibleTypeAnnotations", | |||
"MethodParameters", "Module", "ModulePackages", "ModuleMainClass", "NestHost", "NestMembers" | |||
}; | |||
"SourceFile", "ConstantValue", "Code", "Exceptions", "LineNumberTable", "LocalVariableTable", | |||
"InnerClasses", "Synthetic", "Deprecated", "PMGClass", "Signature", "StackMap", | |||
"RuntimeVisibleAnnotations", "RuntimeInvisibleAnnotations", "RuntimeVisibleParameterAnnotations", | |||
"RuntimeInvisibleParameterAnnotations", "LocalVariableTypeTable", "EnclosingMethod", | |||
"AnnotationDefault","BootstrapMethods", "RuntimeVisibleTypeAnnotations", "RuntimeInvisibleTypeAnnotations", | |||
"MethodParameters", "Module", "ModulePackages", "ModuleMainClass", "NestHost", "NestMembers" | |||
}; | |||
/** | |||
* Constants used in the StackMap attribute. | |||
@@ -688,5 +690,5 @@ public interface Constants { | |||
public static final byte ITEM_NewObject = 8; | |||
public static final String[] ITEM_NAMES = { "Bogus", "Integer", "Float", "Double", "Long", "Null", "InitObject", "Object", | |||
"NewObject" }; | |||
"NewObject" }; | |||
} |
@@ -201,8 +201,8 @@ public class ClassPath implements Serializable { | |||
ArrayList<String> dirs = new ArrayList<String>(); | |||
getPathComponents(ext_path, dirs); | |||
for (Iterator<String> e = dirs.iterator(); e.hasNext();) { | |||
File ext_dir = new File(e.next()); | |||
for (String string : dirs) { | |||
File ext_dir = new File(string); | |||
String[] extensions = ext_dir.list(new FilenameFilter() { | |||
@Override | |||
public boolean accept(File dir, String name) { | |||
@@ -212,8 +212,8 @@ public class ClassPath implements Serializable { | |||
}); | |||
if (extensions != null) | |||
for (int i = 0; i < extensions.length; i++) | |||
list.add(ext_dir.toString() + File.separatorChar + extensions[i]); | |||
for (String extension : extensions) | |||
list.add(ext_dir.toString() + File.separatorChar + extension); | |||
} | |||
StringBuffer buf = new StringBuffer(); | |||
@@ -226,13 +226,14 @@ public class ClassPath implements Serializable { | |||
} | |||
// On Java9 the sun.boot.class.path won't be set. System classes accessible through JRT filesystem | |||
if (vm_version.startsWith("9") || vm_version.startsWith("10") | |||
|| vm_version.startsWith("11") | |||
|| vm_version.startsWith("12") | |||
|| vm_version.startsWith("13")) { | |||
buf.insert(0, File.pathSeparatorChar); | |||
buf.insert(0, System.getProperty("java.home") + File.separator + "lib" + File.separator + JRT_FS); | |||
} | |||
if (vm_version.startsWith("9") || vm_version.startsWith("10") | |||
|| vm_version.startsWith("11") | |||
|| vm_version.startsWith("12") | |||
|| vm_version.startsWith("13") | |||
|| vm_version.startsWith("14")) { | |||
buf.insert(0, File.pathSeparatorChar); | |||
buf.insert(0, System.getProperty("java.home") + File.separator + "lib" + File.separator + JRT_FS); | |||
} | |||
return buf.toString().intern(); | |||
} | |||
@@ -277,10 +278,10 @@ public class ClassPath implements Serializable { | |||
* @return class file for the java class | |||
*/ | |||
public ClassFile getClassFile(String name, String suffix) throws IOException { | |||
for (int i = 0; i < paths.length; i++) { | |||
for (PathEntry path : paths) { | |||
ClassFile cf; | |||
if ((cf = paths[i].getClassFile(name, suffix)) != null) | |||
if ((cf = path.getClassFile(name, suffix)) != null) | |||
return cf; | |||
} | |||
@@ -460,24 +461,24 @@ public class ClassPath implements Serializable { | |||
for (java.nio.file.Path path : roots) { | |||
try { | |||
Files.walkFileTree(path, new SimpleFileVisitor<Path>() { | |||
@Override | |||
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { | |||
if (file.getNameCount() > 2 | |||
&& matcher.matches(file.getFileName())) { | |||
Path classPath = file.subpath(2, file.getNameCount()); | |||
fileMap.put(classPath.toString(), file); | |||
} | |||
return FileVisitResult.CONTINUE; | |||
} | |||
}); | |||
@Override | |||
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { | |||
if (file.getNameCount() > 2 | |||
&& matcher.matches(file.getFileName())) { | |||
Path classPath = file.subpath(2, file.getNameCount()); | |||
fileMap.put(classPath.toString(), file); | |||
} | |||
return FileVisitResult.CONTINUE; | |||
} | |||
}); | |||
} | |||
catch (IOException e) { | |||
throw new RuntimeException(e); | |||
} | |||
} | |||
return fileMap; | |||
} | |||
} | |||
private static class ByteBasedClassFile implements ClassFile { | |||
@@ -243,11 +243,11 @@ public class Checklics extends MatchingTask { | |||
private void visitAll(FileVisitor visitor) { | |||
// List filelist = new ArrayList(); | |||
String[] dirs = sourcepath.list(); | |||
for (int i = 0; i < dirs.length; i++) { | |||
File dir = project.resolveFile(dirs[i]); | |||
for (String dir2 : dirs) { | |||
File dir = project.resolveFile(dir2); | |||
String[] files = getDirectoryScanner(dir).getIncludedFiles(); | |||
for (int j = 0; j < files.length; j++) { | |||
File file = new File(dir, files[j]); | |||
for (String file2 : files) { | |||
File file = new File(dir, file2); | |||
String path = file.getPath(); | |||
if (path.endsWith(".java")) { | |||
visitor.visit(file); | |||
@@ -343,9 +343,9 @@ public class Checklics extends MatchingTask { | |||
public static class License { | |||
/** acceptable years for copyright prefix to company - append " " */ | |||
static final String[] YEARS = // remove older after license xfer? | |||
new String[] { "2002 ", "2003 ", "2004 ", "2005", "2006", "2007", "2008", | |||
"2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2001 ", "2000 ", | |||
"1999 " }; | |||
new String[] { "2002 ", "2003 ", "2004 ", "2005", "2006", "2007", "2008", | |||
"2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2001 ", "2000 ", | |||
"1999 " }; | |||
public final String tag; | |||
public final String license; | |||
private final String[] copyright; |
@@ -0,0 +1,74 @@ | |||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | |||
<html> <head> | |||
<title>AspectJ 1.9.6 Readme</title> | |||
<style type="text/css"> | |||
<!-- | |||
P { margin-left: 20px; } | |||
PRE { margin-left: 20px; } | |||
LI { margin-left: 20px; } | |||
H4 { margin-left: 20px; } | |||
H3 { margin-left: 10px; } | |||
--> | |||
</style> | |||
</head> | |||
<body> | |||
<div align="right"><small> | |||
© Copyright 2020 Contributors. | |||
All rights reserved. | |||
</small></div> | |||
<h1>AspectJ 1.9.6</h1> | |||
<p>The full list of resolved issues in 1.9.6 is available | |||
<a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&f0=OP&f1=OP&f3=CP&f4=CP&j1=OR&list_id=16866879&product=AspectJ&query_format=advanced&target_milestone=1.9.6">here</a></h2>.</p> | |||
<p>AspectJ 1.9.6 supports Java14. Java14 introduces records, but you must activate support for that via | |||
an <tt>--enable-preview</tt> flag when using the compiler and attempting to run the resultant classes: | |||
Here is <tt>Code.java</tt>: | |||
<pre><code> | |||
=======8<========= | |||
public record Person(String firstName, String lastName, int age) {} | |||
=======8<========= | |||
=======8<========= | |||
public class UsingPersonRecord { | |||
public static void main(String[] argv) { | |||
Person p = new Person("A","B",99); | |||
System.out.println(p); | |||
System.out.println(p.firstName()); | |||
} | |||
} | |||
=======8<========= | |||
=======8<========= | |||
public aspect TraceRecordComponents { | |||
before(): execution(public * *()) { | |||
System.out.println(thisJoinPointStaticPart); | |||
} | |||
} | |||
=======8<========= | |||
</code></pre> | |||
<p>Compile it with: | |||
<pre><code> | |||
$ ajc --enable-preview -14 Person.java UsingPersonRecord.java TraceRecordComponents.java | |||
</code></pre> | |||
<p>Now run it: | |||
<pre><code> | |||
$ java --enable-preview UsingPersonRecord | |||
This | |||
is | |||
on | |||
multiple | |||
lines | |||
</code></pre> | |||
<p>Available: 1.9.6 available 22-Apr-2020</p> | |||
<br><br> | |||
<!-- ============================== --> | |||
</body> | |||
</html> |
@@ -138,6 +138,7 @@ | |||
<tr> <td>README's | |||
</td> | |||
<td>Changes and porting guide for AspectJ | |||
<a href="README-196.html">1.9.6</a>, | |||
<a href="README-195.html">1.9.5</a>, | |||
<a href="README-194.html">1.9.4</a>, | |||
<a href="README-193.html">1.9.3</a>, |
@@ -5,7 +5,7 @@ | |||
org/aspectj/weaver/XlintDefault.properties for the default behavior and a template to copy. | |||
### AspectJ-specific messages | |||
compiler.name = AspectJ Compiler | |||
compiler.version = Eclipse Compiler 3106c52cb89aa (29Oct2019) - Java13 | |||
compiler.version = Eclipse Compiler 48c3f7668a46f2 (22Apr2020) - Java14 | |||
compiler.copyright = | |||
@@ -45,7 +45,7 @@ configure.duplicateTarget = duplicate target compliance setting specification: { | |||
configure.unsupportedReleaseOption = option --release is supported only when run with JDK 9 or above | |||
configure.unsupportedWithRelease = option {0} is not supported when --release is used | |||
configure.unsupportedReleaseVersion = release version {0} is not supported | |||
configure.source = source level should be in ''1.1''...''1.8'',''9''...''11'' (or ''5.0''..''11.0''): {0} | |||
configure.source = source level should be in ''1.1''...''1.8'',''9''...''14'' (or ''5.0''..''14.0''): {0} | |||
configure.invalidSystem = invalid location for system libraries: {0} | |||
configure.unsupportedOption = option {0} not supported at compliance level 9 and above | |||
configure.duplicateOutputPath = duplicate output path specification: {0} | |||
@@ -442,7 +442,7 @@ configure.requiresJDK1.2orAbove = Need to use a JVM >= 1.2 | |||
configure.duplicateLog = duplicate log specification: {0} | |||
configure.duplicateRepeat = duplicate repeat specification: {0} | |||
configure.duplicateCompliance = duplicate compliance setting specification: {0} | |||
configure.source = invalid source option, source is either ''1.3'' or ''1.4'': {0} | |||
configure.source = invalid source option: {0} | |||
configure.duplicateOutputPath = duplicate output path specification: {0} | |||
configure.duplicateBootClasspath = duplicate bootclasspath specification: {0} | |||
configure.invalidDebugOption = invalid debug option: {0} |
@@ -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; | |||
@@ -21,7 +21,7 @@ public class PerformanceTestCase extends CommandTestCase { | |||
super(name); | |||
} | |||
// this is a nice test, but not strictly needed | |||
public void xxx_testLazyTjpOff() throws IOException { | |||
checkCompile("src1/LazyTjp.aj", NO_ERRORS); | |||
@@ -32,9 +32,9 @@ public class PerformanceTestCase extends CommandTestCase { | |||
// expected exception thrown when no -XlazyTjp | |||
} | |||
} | |||
public void testLazyTjp() throws IOException { | |||
// Pass -Xlint:error to promote the 'can not implement lazyTjp on this | |||
public void xtestLazyTjp() throws IOException { | |||
// Pass -Xlint:error to promote the 'can not implement lazyTjp on this | |||
// joinpoint method-execution(int LazyTjp.doit3(int)) because around advice is used [Xlint:canNotImplementLazyTjp]' | |||
// into an error so that we can use checkCompiles() ability to check errors occur. | |||
// Pass -proceedOnError to ensure even though we get that message, we still get the class file on disk | |||
@@ -42,5 +42,5 @@ public class PerformanceTestCase extends CommandTestCase { | |||
checkCompile("src1/LazyTjp.aj", new String[] {"-Xlint:error","-proceedOnError", "-1.4"}, new int[] {96}, sandboxName); | |||
runMain("LazyTjp"); | |||
} | |||
} |
@@ -1,22 +1,21 @@ | |||
package org.aspectj.runtime; | |||
/* ******************************************************************* | |||
* 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 | |||
* ******************************************************************/ | |||
import org.aspectj.internal.lang.reflect.AjTypeTest; | |||
import org.aspectj.internal.lang.reflect.AjTypeWithAspectsTest; | |||
import org.aspectj.internal.lang.reflect.InterTypeTest; | |||
import org.aspectj.runtime.reflect.JoinPointImplTest; | |||
import org.aspectj.runtime.reflect.RuntimePerformanceTest; | |||
import org.aspectj.runtime.reflect.SignatureTest; | |||
import junit.framework.TestCase; | |||
@@ -24,18 +23,18 @@ import junit.framework.TestSuite; | |||
public class RuntimeModuleTests extends TestCase { | |||
public static TestSuite suite() { | |||
TestSuite suite = new TestSuite(RuntimeModuleTests.class.getName()); | |||
suite.addTestSuite(RuntimeTest.class); | |||
suite.addTestSuite(SignatureTest.class); | |||
public static TestSuite suite() { | |||
TestSuite suite = new TestSuite(RuntimeModuleTests.class.getName()); | |||
suite.addTestSuite(RuntimeTest.class); | |||
suite.addTestSuite(SignatureTest.class); | |||
suite.addTestSuite(JoinPointImplTest.class); | |||
suite.addTestSuite(RuntimePerformanceTest.class); | |||
// suite.addTestSuite(RuntimePerformanceTest.class); | |||
suite.addTestSuite(AjTypeTest.class); | |||
suite.addTestSuite(AjTypeWithAspectsTest.class); | |||
suite.addTestSuite(InterTypeTest.class); | |||
return suite; | |||
} | |||
return suite; | |||
} | |||
public RuntimeModuleTests(String name) { super(name); } | |||
public RuntimeModuleTests(String name) { super(name); } | |||
} | |||
} |
@@ -1,10 +1,10 @@ | |||
/******************************************************************************* | |||
* Copyright (c) 2004 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 | |||
*******************************************************************************/ | |||
@@ -38,32 +38,36 @@ public class RuntimePerformanceTest extends TestCase { | |||
super(name); | |||
} | |||
@Override | |||
protected void setUp() throws Exception { | |||
super.setUp(); | |||
/* Save default state */ | |||
savedUseCaches = SignatureImpl.getUseCache(); | |||
/* If a test takes too long we can kill it and fail */ | |||
abort = false; | |||
task = new TimerTask() { | |||
@Override | |||
public void run () { | |||
abort = true; | |||
abort = true; | |||
} | |||
}; | |||
timer.schedule(task,TIMEOUT); | |||
} | |||
@Override | |||
protected void tearDown() throws Exception { | |||
super.tearDown(); | |||
/* Restore default state */ | |||
SignatureImpl.setUseCache(savedUseCaches); | |||
task.cancel(); | |||
} | |||
public void testToString () { | |||
// No longer valid with Java being so quick now... | |||
public void xtestToString () { | |||
Signature signature = makeMethodSig("test"); | |||
SignatureImpl.setUseCache(false); | |||
@@ -80,7 +84,7 @@ public class RuntimePerformanceTest extends TestCase { | |||
System.out.println("ratio=" + ratio); | |||
assertTrue("Using cache should be " + EXPECTED_RATIO + " times faster: " + ratio,(ratio >= EXPECTED_RATIO)); | |||
} | |||
private long invokeSignatureToString (Signature sig, long iterations) { | |||
long start = System.currentTimeMillis(); | |||
String s; | |||
@@ -93,13 +97,13 @@ public class RuntimePerformanceTest extends TestCase { | |||
if (abort) throw new RuntimeException("invokeSignatureToString aborted after " + (TIMEOUT/1000) + " seconds"); | |||
long finish = System.currentTimeMillis(); | |||
return (finish-start); | |||
return (finish-start); | |||
} | |||
private void warmUp (Signature sig) { | |||
invokeSignatureToString(sig,WARMUP_ITERATIONS); | |||
invokeSignatureToString(sig,WARMUP_ITERATIONS); | |||
} | |||
private Signature makeMethodSig (String methodName) { | |||
Class clazz = getClass(); | |||
Class[] parameterTypes = new Class[] { String.class }; |
@@ -253,9 +253,9 @@ public class AjcTask extends MatchingTask { | |||
public static final String COMMAND_EDITOR_NAME = AjcTask.class.getName() + ".COMMAND_EDITOR"; | |||
static final String[] TARGET_INPUTS = new String[] { "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "9", "10", "11", "12", "13" }; | |||
static final String[] SOURCE_INPUTS = new String[] { "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "9", "10", "11", "12", "13" }; | |||
static final String[] COMPLIANCE_INPUTS = new String[] { "-1.3", "-1.4", "-1.5", "-1.6", "-1.7", "-1.8", "-1.9", "-9", "-10", "-11", "-12", "-13" }; | |||
static final String[] TARGET_INPUTS = new String[] { "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "9", "10", "11", "12", "13", "14" }; | |||
static final String[] SOURCE_INPUTS = new String[] { "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "9", "10", "11", "12", "13", "14" }; | |||
static final String[] COMPLIANCE_INPUTS = new String[] { "-1.3", "-1.4", "-1.5", "-1.6", "-1.7", "-1.8", "-1.9", "-9", "-10", "-11", "-12", "-13", "-14" }; | |||
private static final ICommandEditor COMMAND_EDITOR; | |||
@@ -265,7 +265,7 @@ public class AjcTask extends MatchingTask { | |||
"notReweavable", "noInline", "terminateAfterCompilation", "hasMember", "ajruntimetarget:1.2", | |||
"ajruntimetarget:1.5", "addSerialVersionUID" | |||
// , "targetNearSource", "OcodeSize", | |||
// , "targetNearSource", "OcodeSize", | |||
}; | |||
VALID_XOPTIONS = Collections.unmodifiableList(Arrays.asList(xs)); | |||
@@ -464,47 +464,47 @@ public class AjcTask extends MatchingTask { | |||
return (0 == result.length() ? null : result.toString()); | |||
} | |||
/** | |||
* Controls whether annotation processing and/or compilation is done. | |||
* -proc:none means that compilation takes place without annotation processing. | |||
* -proc:only means that only annotation processing is done, without any subsequent compilation. | |||
*/ | |||
public void setProc(String proc) { | |||
if (proc.equals("none")) { | |||
cmd.addFlag("-proc:none", true); | |||
} else if (proc.equals("only")) { | |||
cmd.addFlag("-proc:only", true); | |||
} | |||
} | |||
/** | |||
* -processor class1[,class2,class3...] | |||
* Names of the annotation processors to run. This bypasses the default discovery process. | |||
*/ | |||
public void setProcessor(String processors) { | |||
cmd.addFlagged("-processor", processors); | |||
} | |||
/** | |||
* -processorpath path | |||
* Specify where to find annotation processors; if this option is not used, the class path will be searched for processors. | |||
*/ | |||
public void setProcessorpath(String processorpath) { | |||
cmd.addFlagged("-processorpath", processorpath); | |||
} | |||
/** | |||
* -s dir | |||
* Specify the directory where to place generated source files. The directory must already exist; javac will not create it. | |||
* If a class is part of a package, the compiler puts the source file in a subdirectory reflecting the package name, | |||
* creating directories as needed. | |||
* | |||
* For example, if you specify -s C:\mysrc and the class is called com.mypackage.MyClass, | |||
* then the source file will be placed in C:\mysrc\com\mypackage\MyClass.java. | |||
*/ | |||
public void setS(String s) { | |||
cmd.addFlagged("-s", s); | |||
} | |||
/** | |||
* Controls whether annotation processing and/or compilation is done. | |||
* -proc:none means that compilation takes place without annotation processing. | |||
* -proc:only means that only annotation processing is done, without any subsequent compilation. | |||
*/ | |||
public void setProc(String proc) { | |||
if (proc.equals("none")) { | |||
cmd.addFlag("-proc:none", true); | |||
} else if (proc.equals("only")) { | |||
cmd.addFlag("-proc:only", true); | |||
} | |||
} | |||
/** | |||
* -processor class1[,class2,class3...] | |||
* Names of the annotation processors to run. This bypasses the default discovery process. | |||
*/ | |||
public void setProcessor(String processors) { | |||
cmd.addFlagged("-processor", processors); | |||
} | |||
/** | |||
* -processorpath path | |||
* Specify where to find annotation processors; if this option is not used, the class path will be searched for processors. | |||
*/ | |||
public void setProcessorpath(String processorpath) { | |||
cmd.addFlagged("-processorpath", processorpath); | |||
} | |||
/** | |||
* -s dir | |||
* Specify the directory where to place generated source files. The directory must already exist; javac will not create it. | |||
* If a class is part of a package, the compiler puts the source file in a subdirectory reflecting the package name, | |||
* creating directories as needed. | |||
* | |||
* For example, if you specify -s C:\mysrc and the class is called com.mypackage.MyClass, | |||
* then the source file will be placed in C:\mysrc\com\mypackage\MyClass.java. | |||
*/ | |||
public void setS(String s) { | |||
cmd.addFlagged("-s", s); | |||
} | |||
public void setIncremental(boolean incremental) { | |||
cmd.addFlag("-incremental", incremental); | |||
@@ -717,12 +717,12 @@ public class AjcTask extends MatchingTask { | |||
} | |||
public CompilerArg createCompilerarg() { | |||
CompilerArg compilerArg = new CompilerArg(); | |||
if (compilerArgs == null) { | |||
compilerArgs = new ArrayList<CompilerArg>(); | |||
} | |||
compilerArgs.add(compilerArg); | |||
return compilerArg; | |||
CompilerArg compilerArg = new CompilerArg(); | |||
if (compilerArgs == null) { | |||
compilerArgs = new ArrayList<CompilerArg>(); | |||
} | |||
compilerArgs.add(compilerArg); | |||
return compilerArg; | |||
} | |||
// ---------------- | |||
@@ -1340,14 +1340,14 @@ public class AjcTask extends MatchingTask { | |||
StringBuffer sb = new StringBuffer(); | |||
String prefix = "fail due to "; | |||
int numThrown = 0; | |||
for (int i = 0; i < fails.length; i++) { | |||
String message = fails[i].getMessage(); | |||
for (IMessage fail : fails) { | |||
String message = fail.getMessage(); | |||
if (LangUtil.isEmpty(message)) { | |||
message = "<no message>"; | |||
} else if (-1 != message.indexOf(USAGE_SUBSTRING)) { | |||
continue; | |||
} | |||
Throwable t = fails[i].getThrown(); | |||
Throwable t = fail.getThrown(); | |||
if (null != t) { | |||
numThrown++; | |||
sb.append(prefix); | |||
@@ -1466,28 +1466,28 @@ public class AjcTask extends MatchingTask { | |||
Project.MSG_WARN); | |||
// replace above two lines with what follows as an aid to debugging when running the unit tests.... | |||
// LogStreamHandler handler = new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN) { | |||
// | |||
// ByteArrayOutputStream baos = new ByteArrayOutputStream(); | |||
// | |||
// /* | |||
// * @see | |||
// * org.apache.tools.ant.taskdefs.PumpStreamHandler#createProcessOutputPump(java. | |||
// * io.InputStream, java.io.OutputStream) | |||
// */ | |||
// protected void createProcessErrorPump(InputStream is, OutputStream os) { | |||
// super.createProcessErrorPump(is, baos); | |||
// } | |||
// | |||
// /* | |||
// * @see org.apache.tools.ant.taskdefs.LogStreamHandler#stop() | |||
// */ | |||
// public void stop() { | |||
// byte[] written = baos.toByteArray(); | |||
// System.err.print(new String(written)); | |||
// super.stop(); | |||
// } | |||
// }; | |||
// LogStreamHandler handler = new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN) { | |||
// | |||
// ByteArrayOutputStream baos = new ByteArrayOutputStream(); | |||
// | |||
// /* | |||
// * @see | |||
// * org.apache.tools.ant.taskdefs.PumpStreamHandler#createProcessOutputPump(java. | |||
// * io.InputStream, java.io.OutputStream) | |||
// */ | |||
// protected void createProcessErrorPump(InputStream is, OutputStream os) { | |||
// super.createProcessErrorPump(is, baos); | |||
// } | |||
// | |||
// /* | |||
// * @see org.apache.tools.ant.taskdefs.LogStreamHandler#stop() | |||
// */ | |||
// public void stop() { | |||
// byte[] written = baos.toByteArray(); | |||
// System.err.print(new String(written)); | |||
// super.stop(); | |||
// } | |||
// }; | |||
Execute exe = new Execute(handler); | |||
exe.setAntRun(project); | |||
@@ -1539,9 +1539,9 @@ public class AjcTask extends MatchingTask { | |||
if (argfiles != null) { | |||
String[] files = argfiles.list(); | |||
for (int i = 0; i < files.length; i++) { | |||
File argfile = project.resolveFile(files[i]); | |||
if (check(argfile, files[i], false, location)) { | |||
for (String file : files) { | |||
File argfile = project.resolveFile(file); | |||
if (check(argfile, file, false, location)) { | |||
list.add("-argfile"); | |||
list.add(argfile.getAbsolutePath()); | |||
} | |||
@@ -1549,9 +1549,9 @@ public class AjcTask extends MatchingTask { | |||
} | |||
if (inxmlfiles != null) { | |||
String[] files = inxmlfiles.list(); | |||
for (int i = 0; i < files.length; i++) { | |||
File inxmlfile = project.resolveFile(files[i]); | |||
if (check(inxmlfile, files[i], false, location)) { | |||
for (String file : files) { | |||
File inxmlfile = project.resolveFile(file); | |||
if (check(inxmlfile, file, false, location)) { | |||
list.add("-xmlConfigured"); | |||
list.add(inxmlfile.getAbsolutePath()); | |||
} | |||
@@ -1560,13 +1560,13 @@ public class AjcTask extends MatchingTask { | |||
if (srcdir != null) { | |||
// todo: ignore any srcdir if any argfiles and no explicit includes | |||
String[] dirs = srcdir.list(); | |||
for (int i = 0; i < dirs.length; i++) { | |||
File dir = project.resolveFile(dirs[i]); | |||
check(dir, dirs[i], true, location); | |||
for (String dir2 : dirs) { | |||
File dir = project.resolveFile(dir2); | |||
check(dir, dir2, true, location); | |||
// relies on compiler to prune non-source files | |||
String[] files = getDirectoryScanner(dir).getIncludedFiles(); | |||
for (int j = 0; j < files.length; j++) { | |||
File file = new File(dir, files[j]); | |||
for (String file2 : files) { | |||
File file = new File(dir, file2); | |||
if (FileUtil.hasSourceSuffix(file)) { | |||
if (!list.contains(file.getAbsolutePath())) { | |||
list.add(file.getAbsolutePath()); | |||
@@ -1654,12 +1654,12 @@ public class AjcTask extends MatchingTask { | |||
patternSet.setProject(project); | |||
patternSet.setIncludes("**/*"); | |||
patternSet.setExcludes("**/*.class"); | |||
for (int i = 0; i < paths.length; i++) { | |||
for (String path : paths) { | |||
Expand unzip = new Expand(); | |||
unzip.setProject(project); | |||
unzip.setTaskName(taskName); | |||
unzip.setDest(destDir); | |||
unzip.setSrc(new File(paths[i])); | |||
unzip.setSrc(new File(path)); | |||
unzip.addPatternset(patternSet); | |||
unzip.execute(); | |||
} | |||
@@ -1671,9 +1671,9 @@ public class AjcTask extends MatchingTask { | |||
Copy copy = new Copy(); | |||
copy.setProject(project); | |||
copy.setTodir(destDir); | |||
for (int i = 0; i < paths.length; i++) { | |||
for (String path : paths) { | |||
FileSet fileSet = new FileSet(); | |||
fileSet.setDir(new File(paths[i])); | |||
fileSet.setDir(new File(path)); | |||
fileSet.setIncludes("**/*"); | |||
fileSet.setExcludes(sourceRootCopyFilter); | |||
copy.addFileset(fileSet); | |||
@@ -1688,8 +1688,8 @@ public class AjcTask extends MatchingTask { | |||
copy.setProject(project); | |||
copy.setTodir(destDir); | |||
boolean gotDir = false; | |||
for (int i = 0; i < paths.length; i++) { | |||
File inpathDir = new File(paths[i]); | |||
for (String path : paths) { | |||
File inpathDir = new File(path); | |||
if (inpathDir.isDirectory() && inpathDir.canRead()) { | |||
if (!gotDir) { | |||
gotDir = true; | |||
@@ -1730,8 +1730,8 @@ public class AjcTask extends MatchingTask { | |||
if (copyInjars) { | |||
String[] paths = injars.list(); | |||
if (!LangUtil.isEmpty(paths)) { | |||
for (int i = 0; i < paths.length; i++) { | |||
File jarFile = new File(paths[i]); | |||
for (String path : paths) { | |||
File jarFile = new File(path); | |||
zipfileset = new ZipFileSet(); | |||
zipfileset.setProject(project); | |||
zipfileset.setSrc(jarFile); | |||
@@ -1744,8 +1744,8 @@ public class AjcTask extends MatchingTask { | |||
if ((null != sourceRootCopyFilter) && (null != sourceRoots)) { | |||
String[] paths = sourceRoots.list(); | |||
if (!LangUtil.isEmpty(paths)) { | |||
for (int i = 0; i < paths.length; i++) { | |||
File srcRoot = new File(paths[i]); | |||
for (String path : paths) { | |||
File srcRoot = new File(path); | |||
FileSet fileset = new FileSet(); | |||
fileset.setProject(project); | |||
fileset.setDir(srcRoot); | |||
@@ -1758,8 +1758,8 @@ public class AjcTask extends MatchingTask { | |||
if ((null != inpathDirCopyFilter) && (null != inpath)) { | |||
String[] paths = inpath.list(); | |||
if (!LangUtil.isEmpty(paths)) { | |||
for (int i = 0; i < paths.length; i++) { | |||
File inpathDir = new File(paths[i]); | |||
for (String path : paths) { | |||
File inpathDir = new File(path); | |||
if (inpathDir.isDirectory() && inpathDir.canRead()) { | |||
FileSet fileset = new FileSet(); | |||
fileset.setProject(project); | |||
@@ -1780,8 +1780,8 @@ public class AjcTask extends MatchingTask { | |||
* Add specified source files. | |||
*/ | |||
void addFiles(File[] paths) { | |||
for (int i = 0; i < paths.length; i++) { | |||
addFile(paths[i]); | |||
for (File path : paths) { | |||
addFile(path); | |||
} | |||
} | |||
@@ -2009,8 +2009,8 @@ public class AjcTask extends MatchingTask { | |||
if (isEmpty(input)) { | |||
return null; | |||
} | |||
for (int i = 0; i < validOptions.length; i++) { | |||
if (input.equals(validOptions[i])) { | |||
for (String validOption : validOptions) { | |||
if (input.equals(validOption)) { | |||
if (isEmpty(prefix)) { | |||
addFlag(input, true); | |||
} else { | |||
@@ -2073,8 +2073,8 @@ public class AjcTask extends MatchingTask { | |||
File userDir = new File(userDirName); | |||
tmpFile = File.createTempFile("argfile", "", userDir); | |||
out = new PrintWriter(new FileWriter(tmpFile)); | |||
for (int i = 0; i < args.length; i++) { | |||
out.println(args[i]); | |||
for (String arg : args) { | |||
out.println(arg); | |||
} | |||
out.flush(); | |||
return new String[] { "-argfile", tmpFile.getAbsolutePath() }; |
@@ -20,8 +20,8 @@ import org.aspectj.util.LangUtil; | |||
*/ | |||
public class AjcTest { | |||
// private static boolean is13VMOrGreater = true; | |||
private static boolean is14VMOrGreater = true; | |||
// private static boolean is13VMOrGreater = true; | |||
private static boolean is1dot4VMOrGreater = true; | |||
private static boolean is15VMOrGreater = false; | |||
private static boolean is16VMOrGreater = false; | |||
private static boolean is17VMOrGreater = false; | |||
@@ -31,9 +31,10 @@ public class AjcTest { | |||
private static boolean is11VMOrGreater = false; | |||
private static boolean is12VMOrGreater = false; | |||
private static boolean is13VMOrGreater = false; | |||
private static boolean is14VMOrGreater = false; | |||
static { // matching logic is also in org.aspectj.util.LangUtil | |||
is14VMOrGreater = LangUtil.is14VMOrGreater(); | |||
is1dot4VMOrGreater = LangUtil.is1dot4VMOrGreater(); | |||
is15VMOrGreater = LangUtil.is15VMOrGreater(); | |||
is16VMOrGreater = LangUtil.is16VMOrGreater(); | |||
is17VMOrGreater = LangUtil.is17VMOrGreater(); | |||
@@ -43,6 +44,7 @@ public class AjcTest { | |||
is11VMOrGreater = LangUtil.is11VMOrGreater(); | |||
is12VMOrGreater = LangUtil.is12VMOrGreater(); | |||
is13VMOrGreater = LangUtil.is13VMOrGreater(); | |||
is14VMOrGreater = LangUtil.is14VMOrGreater(); | |||
} | |||
private List<ITestStep> testSteps = new ArrayList<ITestStep>(); | |||
@@ -80,7 +82,7 @@ public class AjcTest { | |||
public boolean canRunOnThisVM() { | |||
if (vmLevel.equals("1.3")) return true; | |||
boolean canRun = true; | |||
if (vmLevel.equals("1.4")) canRun = is14VMOrGreater; | |||
if (vmLevel.equals("1.4")) canRun = is1dot4VMOrGreater; | |||
if (vmLevel.equals("1.5")) canRun = is15VMOrGreater; | |||
if (vmLevel.equals("1.6")) canRun = is16VMOrGreater; | |||
if (vmLevel.equals("1.7")) canRun = is17VMOrGreater; | |||
@@ -90,9 +92,10 @@ public class AjcTest { | |||
if (vmLevel.equals("11")) canRun = is11VMOrGreater; | |||
if (vmLevel.equals("12")) canRun = is12VMOrGreater; | |||
if (vmLevel.equals("13")) canRun = is13VMOrGreater; | |||
if (vmLevel.equals("14")) canRun = is14VMOrGreater; | |||
if (!canRun) { | |||
System.out.println("***SKIPPING TEST***" + getTitle()+ " needs " + getVmLevel() | |||
+ ", currently running on " + System.getProperty("java.vm.version")); | |||
+ ", currently running on " + System.getProperty("java.vm.version")); | |||
} | |||
return canRun; | |||
} |
@@ -11,7 +11,6 @@ | |||
* ******************************************************************/ | |||
package org.aspectj.testing; | |||
import java.util.ArrayList; | |||
import java.util.Iterator; | |||
import java.util.List; | |||
import java.util.StringTokenizer; | |||
@@ -87,10 +86,8 @@ public class OutputSpec { | |||
expected.addAll(expectedOutputLines); | |||
List<String> found = new ArrayList<String>(); | |||
found.addAll(outputFound); | |||
for (Iterator<String> iterator = outputFound.iterator(); iterator.hasNext();) { | |||
String lineFound = iterator.next(); | |||
for (Iterator<String> iterator2 = expectedOutputLines.iterator(); iterator2.hasNext();) { | |||
String lineExpected = iterator2.next(); | |||
for (String lineFound : outputFound) { | |||
for (String lineExpected : expectedOutputLines) { | |||
if (lineFound.indexOf(lineExpected)!= -1) { | |||
found.remove(lineFound); | |||
expected.remove(lineExpected); | |||
@@ -107,7 +104,7 @@ public class OutputSpec { | |||
StringBuffer failMessage = new StringBuffer(); | |||
failMessage.append("\n expecting output:\n"); | |||
for (String line: expectedOutputLines) { | |||
failMessage.append("\n"); | |||
failMessage.append(line+"\n"); | |||
} | |||
failMessage.append(" but found output:\n"); | |||
failMessage.append(output); |
@@ -1,12 +1,12 @@ | |||
/* ******************************************************************* | |||
* Copyright (c) 2004 IBM Corporation | |||
* 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: | |||
* Adrian Colyer, Abraham Nevado (lucierna) | |||
* ******************************************************************/ | |||
package org.aspectj.testing; | |||
@@ -56,16 +56,16 @@ public class RunSpec implements ITestStep { | |||
System.err.println("Warning, message spec for run command is currently ignored (org.aspectj.testing.RunSpec)"); | |||
} | |||
String[] args = buildArgs(); | |||
// System.err.println("? execute() inTestCase='" + inTestCase + "', ltwFile=" + ltwFile); | |||
// System.err.println("? execute() inTestCase='" + inTestCase + "', ltwFile=" + ltwFile); | |||
boolean useLtw = copyLtwFile(inTestCase.getSandboxDirectory()); | |||
copyXlintFile(inTestCase.getSandboxDirectory()); | |||
try { | |||
setSystemProperty("test.base.dir", inTestCase.getSandboxDirectory().getAbsolutePath()); | |||
AjcTestCase.RunResult rr = inTestCase.run(getClassToRun(), getModuleToRun(), args, vmargs, getClasspath(), getModulepath(), useLtw, "true".equalsIgnoreCase(usefullltw)); | |||
if (stdErrSpec != null) { | |||
if (stdErrSpec != null) { | |||
stdErrSpec.matchAgainst(rr.getStdErr(), orderedStderr); | |||
} | |||
if (stdOutSpec != null) { | |||
@@ -121,7 +121,7 @@ public class RunSpec implements ITestStep { | |||
public void setTest(AjcTest test) { | |||
this.myTest = test; | |||
} | |||
public AjcTest getTest() { | |||
return this.myTest; | |||
} | |||
@@ -149,7 +149,7 @@ public class RunSpec implements ITestStep { | |||
public void setModulepath(String mpath) { | |||
this.mpath = mpath; | |||
} | |||
public void setClasspath(String cpath) { | |||
this.cpath = cpath; | |||
} | |||
@@ -165,19 +165,19 @@ public class RunSpec implements ITestStep { | |||
public void setOrderedStderr(String orderedStderr) { | |||
this.orderedStderr = orderedStderr; | |||
} | |||
public String getClassToRun() { | |||
return classToRun; | |||
} | |||
public void setClassToRun(String classToRun) { | |||
this.classToRun = classToRun; | |||
} | |||
public void setModuleToRun(String moduleToRun) { | |||
this.moduleToRun = moduleToRun; | |||
} | |||
public String getModuleToRun() { | |||
return this.moduleToRun; | |||
} |
@@ -0,0 +1,28 @@ | |||
/* ******************************************************************* | |||
* Copyright (c) 2020 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 | |||
* ******************************************************************/ | |||
package org.aspectj.testing; | |||
import org.aspectj.util.LangUtil; | |||
/** | |||
* Makes sure tests are running on the right level of JDK. | |||
* | |||
* @author Andy Clement | |||
*/ | |||
public abstract class XMLBasedAjcTestCaseForJava14OrLater extends XMLBasedAjcTestCase { | |||
@Override | |||
public void runTest(String title) { | |||
if (!LangUtil.is14VMOrGreater()) { | |||
throw new IllegalStateException("These tests should be run on Java 14 or later"); | |||
} | |||
super.runTest(title); | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
class Orange { | |||
public String name1 = "orange"; | |||
} | |||
class Apple { | |||
public String name2 = "apple"; | |||
} | |||
public class Jep305 { | |||
public static void main(String []argv) { | |||
print(new Orange()); | |||
print(new Apple()); | |||
} | |||
public static void print(Object obj) { | |||
if (obj instanceof Orange o) { | |||
System.out.println(o.name1); | |||
} else if (obj instanceof Apple a) { | |||
System.out.println(a.name2); | |||
} | |||
} | |||
} |
@@ -0,0 +1,2 @@ | |||
public record Person(String firstName, String lastName, int age) {} | |||
@@ -0,0 +1,5 @@ | |||
public aspect TraceRecordComponents { | |||
before(): execution(public * *()) { | |||
System.out.println(thisJoinPointStaticPart); | |||
} | |||
} |
@@ -0,0 +1,7 @@ | |||
public class UsingPersonRecord { | |||
public static void main(String[] argv) { | |||
Person p = new Person("A","B",99); | |||
System.out.println(p); | |||
System.out.println(p.firstName()); | |||
} | |||
} |
@@ -0,0 +1,2 @@ | |||
public record Person(String firstName, String lastName, int age) {} | |||
@@ -12,6 +12,7 @@ import org.aspectj.systemtest.ajc191.AllTestsAspectJ191; | |||
import org.aspectj.systemtest.ajc192.AllTestsAspectJ192; | |||
import org.aspectj.systemtest.ajc193.AllTestsAspectJ193; | |||
import org.aspectj.systemtest.ajc195.AllTestsAspectJ195; | |||
import org.aspectj.systemtest.ajc196.AllTestsAspectJ196; | |||
import junit.framework.Test; | |||
import junit.framework.TestSuite; | |||
@@ -30,6 +31,7 @@ public class AllTests19 { | |||
suite.addTest(AllTestsAspectJ193.suite()); | |||
// there were no new tests for 1.9.4 | |||
suite.addTest(AllTestsAspectJ195.suite()); | |||
suite.addTest(AllTestsAspectJ196.suite()); | |||
suite.addTest(AllTests18.suite()); | |||
// $JUnit-END$ | |||
return suite; |
@@ -18,7 +18,7 @@ public class AllTestsAspectJ193 { | |||
public static Test suite() { | |||
TestSuite suite = new TestSuite("AspectJ 1.9.3 tests"); | |||
suite.addTest(Ajc193Tests.suite()); | |||
suite.addTest(Java13Tests.suite()); | |||
// suite.addTest(Java13Tests.suite()); | |||
return suite; | |||
} | |||
} |
@@ -7,7 +7,6 @@ | |||
*******************************************************************************/ | |||
package org.aspectj.systemtest.ajc193; | |||
import org.aspectj.apache.bcel.Constants; | |||
import org.aspectj.testing.XMLBasedAjcTestCase; | |||
import org.aspectj.testing.XMLBasedAjcTestCaseForJava13OrLater; | |||
@@ -18,20 +17,6 @@ import junit.framework.Test; | |||
*/ | |||
public class Java13Tests extends XMLBasedAjcTestCaseForJava13OrLater { | |||
public void testSwitch1() { | |||
runTest("switch 1"); | |||
checkVersion("Switch1", Constants.MAJOR_13, Constants.PREVIEW_MINOR_VERSION); | |||
} | |||
public void testSwitch2() { | |||
runTest("switch 2"); | |||
checkVersion("Switch2", Constants.MAJOR_13, Constants.PREVIEW_MINOR_VERSION); | |||
} | |||
public void testSwitch3() { | |||
runTest("switch 3"); | |||
checkVersion("Switch3", Constants.MAJOR_13, Constants.PREVIEW_MINOR_VERSION); | |||
} | |||
// --- | |||
public static Test suite() { |
@@ -32,13 +32,6 @@ public class Ajc195Tests extends XMLBasedAjcTestCase { | |||
runTest("around finally blocks and unlinking"); | |||
} | |||
public void testTextBlock1() { | |||
runTest("textblock 1"); | |||
} | |||
public void testTextBlock2() { | |||
runTest("textblock 2"); | |||
} | |||
// --- | |||
@@ -16,7 +16,7 @@ import junit.framework.TestSuite; | |||
public class AllTestsAspectJ195 { | |||
public static Test suite() { | |||
TestSuite suite = new TestSuite("AspectJ 1.9.4 tests"); | |||
TestSuite suite = new TestSuite("AspectJ 1.9.5 tests"); | |||
suite.addTest(Ajc195Tests.suite()); | |||
suite.addTest(SanityTestsJava13.suite()); | |||
return suite; |
@@ -0,0 +1,71 @@ | |||
/******************************************************************************* | |||
* Copyright (c) 2020 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 | |||
*******************************************************************************/ | |||
package org.aspectj.systemtest.ajc196; | |||
import org.aspectj.apache.bcel.Constants; | |||
import org.aspectj.testing.XMLBasedAjcTestCase; | |||
import org.aspectj.testing.XMLBasedAjcTestCaseForJava14OrLater; | |||
import junit.framework.Test; | |||
/** | |||
* @author Andy Clement | |||
*/ | |||
public class Ajc196Tests extends XMLBasedAjcTestCaseForJava14OrLater { | |||
public void testRecords() { | |||
runTest("simple record"); | |||
checkVersion("Person", Constants.MAJOR_14, Constants.PREVIEW_MINOR_VERSION); | |||
} | |||
public void testRecords2() { | |||
runTest("using a record"); | |||
} | |||
public void testInstanceofPatterns() { | |||
runTest("instanceof patterns"); | |||
} | |||
public void testAdvisingRecords() { | |||
runTest("advising records"); | |||
} | |||
public void testSwitch1() { | |||
runTest("switch 1"); | |||
checkVersion("Switch1", Constants.MAJOR_14, 0); | |||
} | |||
public void testSwitch2() { | |||
runTest("switch 2"); | |||
checkVersion("Switch2", Constants.MAJOR_14, 0); | |||
} | |||
public void testSwitch3() { | |||
runTest("switch 3"); | |||
checkVersion("Switch3", Constants.MAJOR_14, 0); | |||
} | |||
public void testTextBlock1() { | |||
runTest("textblock 1"); | |||
} | |||
public void testTextBlock2() { | |||
runTest("textblock 2"); | |||
} | |||
// --- | |||
public static Test suite() { | |||
return XMLBasedAjcTestCase.loadSuite(Ajc196Tests.class); | |||
} | |||
@Override | |||
protected java.net.URL getSpecFile() { | |||
return getClassResource("ajc196.xml"); | |||
} | |||
} |
@@ -0,0 +1,24 @@ | |||
/******************************************************************************* | |||
* Copyright (c) 2020 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 | |||
*******************************************************************************/ | |||
package org.aspectj.systemtest.ajc196; | |||
import junit.framework.Test; | |||
import junit.framework.TestSuite; | |||
/** | |||
* @author Andy Clement | |||
*/ | |||
public class AllTestsAspectJ196 { | |||
public static Test suite() { | |||
TestSuite suite = new TestSuite("AspectJ 1.9.6 tests"); | |||
suite.addTest(Ajc196Tests.suite()); | |||
suite.addTest(SanityTestsJava14.suite()); | |||
return suite; | |||
} | |||
} |
@@ -0,0 +1,89 @@ | |||
/******************************************************************************* | |||
* Copyright (c) 2020 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 | |||
*******************************************************************************/ | |||
package org.aspectj.systemtest.ajc196; | |||
import org.aspectj.testing.XMLBasedAjcTestCase; | |||
import org.aspectj.testing.XMLBasedAjcTestCaseForJava14OrLater; | |||
import junit.framework.Test; | |||
/* | |||
* Some very trivial tests that help verify things are OK. | |||
* These are a copy of the earlier Sanity Tests created for 1.6 but these supply the -10 option | |||
* to check code generation and modification with that version specified. | |||
* | |||
* @author Andy Clement | |||
*/ | |||
public class SanityTestsJava14 extends XMLBasedAjcTestCaseForJava14OrLater { | |||
public static final int bytecode_version_for_JDK_level = 58; | |||
// Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) | |||
public void testSimpleJava_A() { | |||
runTest("simple - a"); | |||
} | |||
public void testSimpleJava_B() { | |||
runTest("simple - b"); | |||
} | |||
public void testSimpleCode_C() { | |||
runTest("simple - c"); | |||
} | |||
public void testSimpleCode_D() { | |||
runTest("simple - d"); | |||
} | |||
public void testSimpleCode_E() { | |||
runTest("simple - e"); | |||
} | |||
public void testSimpleCode_F() { | |||
runTest("simple - f"); | |||
} | |||
public void testSimpleCode_G() { | |||
runTest("simple - g"); | |||
} | |||
public void testSimpleCode_H() { | |||
runTest("simple - h", true); | |||
} | |||
public void testSimpleCode_I() { | |||
runTest("simple - i"); | |||
} | |||
public void testVersionCorrect1() throws ClassNotFoundException { | |||
runTest("simple - j"); | |||
checkVersion("A", bytecode_version_for_JDK_level, 0); | |||
} | |||
public void testVersionCorrect2() throws ClassNotFoundException { | |||
runTest("simple - k"); | |||
checkVersion("A", bytecode_version_for_JDK_level, 0); | |||
} | |||
public void testVersionCorrect4() throws ClassNotFoundException { // check it is 49.0 when -1.5 is specified | |||
runTest("simple - m"); | |||
checkVersion("A", 49, 0); | |||
} | |||
// /////////////////////////////////////// | |||
public static Test suite() { | |||
return XMLBasedAjcTestCase.loadSuite(SanityTestsJava14.class); | |||
} | |||
@Override | |||
protected java.net.URL getSpecFile() { | |||
return getClassResource("sanity-tests-14.xml"); | |||
} | |||
} |
@@ -4,8 +4,8 @@ | |||
* 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 | |||
* | |||
* http://www.eclipse.org/legal/epl-v10.html | |||
* | |||
* ******************************************************************/ | |||
package org.aspectj.systemtest.java14; | |||
@@ -16,109 +16,110 @@ import junit.framework.Test; | |||
public class Java14Tests extends org.aspectj.testing.XMLBasedAjcTestCase { | |||
public static Test suite() { | |||
return XMLBasedAjcTestCase.loadSuite(Java14Tests.class); | |||
} | |||
protected java.net.URL getSpecFile() { | |||
return getClassResource("java14.xml"); | |||
} | |||
public void test001(){ | |||
runTest("assert flow"); | |||
} | |||
public void test002(){ | |||
runTest("assert flow - 2"); | |||
} | |||
public void test003(){ | |||
runTest("assert typing"); | |||
} | |||
// bug in eclipse compiler, moved to ajcTestsFailing.xml | |||
// public void test004(){ | |||
// runTest("assert coverage tests [requires 1.4]"); | |||
// } | |||
// bug in eclipse compiler, moved to ajcTestsFailing.xml | |||
// public void test005(){ | |||
// runTest("assert coverage tests in one package [requires 1.4]"); | |||
// } | |||
public void test006(){ | |||
if (!LangUtil.is14VMOrGreater()) { System.err.println("Skipping test 006 not >=1.4");return;} | |||
runTest("compiling asserts in methods"); | |||
} | |||
public void test007(){ | |||
if (!LangUtil.is14VMOrGreater()) { System.err.println("Skipping test 007 not >=1.4");return;} | |||
runTest("asserts"); | |||
} | |||
public void test008(){ | |||
if (!LangUtil.is14VMOrGreater()) { System.err.println("Skipping test 008 not >=1.4");return;} | |||
runTest("asserts in aspect and declared methods [requires 1.4]"); | |||
} | |||
public void test009(){ | |||
runTest("Does the matrix coverage thing for the new method signatures"); | |||
} | |||
public void test010(){ | |||
runTest("correct types of parameters at call-sites"); | |||
} | |||
public void test011(){ | |||
runTest("target type matching with messy interface hierarchies"); | |||
} | |||
public void test012(){ | |||
if (!LangUtil.is14VMOrGreater()) { System.err.println("Skipping test 012 not >=1.4");return;} | |||
runTest("assert tests in introduction [requires 1.4]"); | |||
} | |||
public void test013(){ | |||
runTest("various forms of package name pattern matching work"); | |||
} | |||
public void test014(){ | |||
if (!LangUtil.is14VMOrGreater()) { System.err.println("Skipping test 014 not >=1.4");return;} | |||
runTest("assert statement in advice coverage [requires 1.4]"); | |||
} | |||
public void test015(){ | |||
if (!LangUtil.is14VMOrGreater()) { System.err.println("Skipping test 015 not >=1.4");return;} | |||
runTest("assert statement in advice [requires 1.4]"); | |||
} | |||
public void test016(){ | |||
if (!LangUtil.is14VMOrGreater()) { System.err.println("Skipping test 016 not >=1.4");return;} | |||
runTest("assert and pertarget crashes compiler"); | |||
} | |||
public void test017(){ | |||
if (!LangUtil.is14VMOrGreater()) { System.err.println("Skipping test 017 not >=1.4");return;} | |||
runTest("testing that assert works like .class"); | |||
} | |||
public void test018(){ | |||
runTest("JoinPoint Optimization when targetting 1.4"); | |||
} | |||
public void test019(){ | |||
runTest("XLint warning for call PCD's using subtype of defining type (-1.4 -Xlint:ignore)"); | |||
} | |||
// public void test020(){ | |||
// runTest("XLint warning for call PCD's using subtype of defining type (-1.4)"); | |||
// } | |||
public void test021(){ | |||
if (!LangUtil.is14VMOrGreater()) { System.err.println("Skipping test 021 not >=1.4");return;} | |||
runTest("Class Literals as non final fields (also assert, and this$0)"); | |||
} | |||
public static Test suite() { | |||
return XMLBasedAjcTestCase.loadSuite(Java14Tests.class); | |||
} | |||
@Override | |||
protected java.net.URL getSpecFile() { | |||
return getClassResource("java14.xml"); | |||
} | |||
public void test001(){ | |||
runTest("assert flow"); | |||
} | |||
public void test002(){ | |||
runTest("assert flow - 2"); | |||
} | |||
public void test003(){ | |||
runTest("assert typing"); | |||
} | |||
// bug in eclipse compiler, moved to ajcTestsFailing.xml | |||
// public void test004(){ | |||
// runTest("assert coverage tests [requires 1.4]"); | |||
// } | |||
// bug in eclipse compiler, moved to ajcTestsFailing.xml | |||
// public void test005(){ | |||
// runTest("assert coverage tests in one package [requires 1.4]"); | |||
// } | |||
public void test006(){ | |||
if (!LangUtil.is1dot4VMOrGreater()) { System.err.println("Skipping test 006 not >=1.4");return;} | |||
runTest("compiling asserts in methods"); | |||
} | |||
public void test007(){ | |||
if (!LangUtil.is1dot4VMOrGreater()) { System.err.println("Skipping test 007 not >=1.4");return;} | |||
runTest("asserts"); | |||
} | |||
public void test008(){ | |||
if (!LangUtil.is1dot4VMOrGreater()) { System.err.println("Skipping test 008 not >=1.4");return;} | |||
runTest("asserts in aspect and declared methods [requires 1.4]"); | |||
} | |||
public void test009(){ | |||
runTest("Does the matrix coverage thing for the new method signatures"); | |||
} | |||
public void test010(){ | |||
runTest("correct types of parameters at call-sites"); | |||
} | |||
public void test011(){ | |||
runTest("target type matching with messy interface hierarchies"); | |||
} | |||
public void test012(){ | |||
if (!LangUtil.is1dot4VMOrGreater()) { System.err.println("Skipping test 012 not >=1.4");return;} | |||
runTest("assert tests in introduction [requires 1.4]"); | |||
} | |||
public void test013(){ | |||
runTest("various forms of package name pattern matching work"); | |||
} | |||
public void test014(){ | |||
if (!LangUtil.is1dot4VMOrGreater()) { System.err.println("Skipping test 014 not >=1.4");return;} | |||
runTest("assert statement in advice coverage [requires 1.4]"); | |||
} | |||
public void test015(){ | |||
if (!LangUtil.is1dot4VMOrGreater()) { System.err.println("Skipping test 015 not >=1.4");return;} | |||
runTest("assert statement in advice [requires 1.4]"); | |||
} | |||
public void test016(){ | |||
if (!LangUtil.is1dot4VMOrGreater()) { System.err.println("Skipping test 016 not >=1.4");return;} | |||
runTest("assert and pertarget crashes compiler"); | |||
} | |||
public void test017(){ | |||
if (!LangUtil.is1dot4VMOrGreater()) { System.err.println("Skipping test 017 not >=1.4");return;} | |||
runTest("testing that assert works like .class"); | |||
} | |||
public void test018(){ | |||
runTest("JoinPoint Optimization when targetting 1.4"); | |||
} | |||
public void test019(){ | |||
runTest("XLint warning for call PCD's using subtype of defining type (-1.4 -Xlint:ignore)"); | |||
} | |||
// public void test020(){ | |||
// runTest("XLint warning for call PCD's using subtype of defining type (-1.4)"); | |||
// } | |||
public void test021(){ | |||
if (!LangUtil.is1dot4VMOrGreater()) { System.err.println("Skipping test 021 not >=1.4");return;} | |||
runTest("Class Literals as non final fields (also assert, and this$0)"); | |||
} | |||
} |
@@ -4,8 +4,8 @@ | |||
* 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 | |||
* | |||
* http://www.eclipse.org/legal/epl-v10.html | |||
* | |||
* ******************************************************************/ | |||
package org.aspectj.systemtest.pre10x; | |||
@@ -15,302 +15,304 @@ import junit.framework.Test; | |||
public class AjcPre10xTests extends org.aspectj.testing.XMLBasedAjcTestCase { | |||
public static Test suite() { | |||
return XMLBasedAjcTestCase.loadSuite(AjcPre10xTests.class); | |||
} | |||
public static Test suite() { | |||
return XMLBasedAjcTestCase.loadSuite(AjcPre10xTests.class); | |||
} | |||
protected java.net.URL getSpecFile() { | |||
return getClassResource("pre10x.xml"); | |||
} | |||
@Override | |||
protected java.net.URL getSpecFile() { | |||
return getClassResource("pre10x.xml"); | |||
} | |||
public void test001(){ | |||
runTest("Using 'aspect' as identifier is legal TODO"); | |||
} | |||
public void test001(){ | |||
runTest("Using 'aspect' as identifier is legal TODO"); | |||
} | |||
public void test002(){ | |||
runTest("Using 'pointcut' as identifier is legal TODO"); | |||
} | |||
public void test002(){ | |||
runTest("Using 'pointcut' as identifier is legal TODO"); | |||
} | |||
public void test003(){ | |||
runTest("CF expected when enclosing class superclass used as this qualifier in inner class"); | |||
} | |||
public void test003(){ | |||
runTest("CF expected when enclosing class superclass used as this qualifier in inner class"); | |||
} | |||
public void test004(){ | |||
runTest("enclosing class may be used as this qualifier in inner class"); | |||
} | |||
public void test004(){ | |||
runTest("enclosing class may be used as this qualifier in inner class"); | |||
} | |||
public void test005(){ | |||
runTest("reasonable error for crosscut reference with no formals specified"); | |||
} | |||
public void test005(){ | |||
runTest("reasonable error for crosscut reference with no formals specified"); | |||
} | |||
public void test006(){ | |||
runTest("reasonable error for introduction on type whose source isn't found"); | |||
} | |||
public void test006(){ | |||
runTest("reasonable error for introduction on type whose source isn't found"); | |||
} | |||
public void test007(){ | |||
runTest("handle errors in crosscut designators, insist that they end with a semicolon"); | |||
} | |||
public void test007(){ | |||
runTest("handle errors in crosscut designators, insist that they end with a semicolon"); | |||
} | |||
public void test008(){ | |||
runTest("try to return from a before, after, after throwing and after returning"); | |||
} | |||
public void test008(){ | |||
runTest("try to return from a before, after, after throwing and after returning"); | |||
} | |||
public void test009(){ | |||
runTest("the designator has a wildcard for method name but no return type specified"); | |||
} | |||
public void test009(){ | |||
runTest("the designator has a wildcard for method name but no return type specified"); | |||
} | |||
public void test010(){ | |||
runTest("the designator for the introduction has no type after the | charcter"); | |||
} | |||
public void test010(){ | |||
runTest("the designator for the introduction has no type after the | charcter"); | |||
} | |||
public void test011(){ | |||
runTest("crosscut signature does not match"); | |||
} | |||
public void test011(){ | |||
runTest("crosscut signature does not match"); | |||
} | |||
public void test012(){ | |||
runTest("proper exit conditions when errors fall through to javac"); | |||
} | |||
public void test012(){ | |||
runTest("proper exit conditions when errors fall through to javac"); | |||
} | |||
public void test013(){ | |||
runTest("mismatched parens on advice (wasn't binding Tester)"); | |||
} | |||
public void test013(){ | |||
runTest("mismatched parens on advice (wasn't binding Tester)"); | |||
} | |||
public void test014(){ | |||
runTest("Non-static advice silently ignored"); | |||
} | |||
public void test015(){ | |||
runTest("extra closing brace"); | |||
} | |||
public void test016(){ | |||
runTest("decent errors for around return type not matching target point"); | |||
} | |||
public void test017(){ | |||
runTest("eachobject: can't call new on an aspect of"); | |||
} | |||
public void test018(){ | |||
runTest("eachobject: only zero-argument constructors allowed in an aspect"); | |||
} | |||
public void test019(){ | |||
runTest("eachobject: can't extend a concrete aspect"); | |||
} | |||
public void test020(){ | |||
runTest("instanceof used without a class"); | |||
} | |||
public void test021(){ | |||
runTest("wildcard used for returns clause"); | |||
} | |||
public void test022(){ | |||
runTest("no return statement in around advice"); | |||
} | |||
public void test023(){ | |||
runTest("inner aspects must be static (no longer matches PR#286)"); | |||
} | |||
public void test024(){ | |||
runTest("Casting class declarations as interfaces"); | |||
} | |||
public void test025(){ | |||
runTest("omits a variable name and crashes with a null pointer"); | |||
} | |||
public void test026(){ | |||
runTest("Not generating an error for using new as a method name"); | |||
} | |||
public void test027(){ | |||
runTest("ClassCastException on the int literal"); | |||
} | |||
public void test028(){ | |||
runTest("Wrong strictfp keyword usage in interface function prototype [TODO: move to errors]"); | |||
} | |||
public void test029(){ | |||
runTest("Wrong strictfp keyword usage in field declaration [TODO: move to errors]"); | |||
} | |||
public void test030(){ | |||
runTest("Wrong strictfp keyword usage in constructor declaration [TODO: move to errors]"); | |||
} | |||
public void test031(){ | |||
runTest("Incorrect static casts to primitively foldable arguments should not crash the compiler."); | |||
} | |||
public void test032(){ | |||
runTest("Dominates with commas should signal an error."); | |||
} | |||
public void test033(){ | |||
runTest("stack overflow with recursive crosscut specifier"); | |||
} | |||
public void test034(){ | |||
runTest("Throwing a NullPointerException when formals can't be bound in named pointcut"); | |||
} | |||
public void test035(){ | |||
runTest("disallow defining more than one pointcut with the same name"); | |||
} | |||
// With intro of record in Java14 the error messages here change | |||
// public void test036(){ | |||
// runTest("pre 0.7 introduction form outside aspect body causes an EmptyStackException"); | |||
// } | |||
// | |||
// public void test037(){ | |||
// runTest("a class can't extend an aspect"); | |||
// } | |||
// | |||
// public void test038(){ | |||
// runTest("a before() clause at the class-level causes an EmptyStackException"); | |||
// } | |||
// | |||
// public void test039(){ | |||
// runTest("an after() clause at the class-level causes an EmptyStackException"); | |||
// } | |||
// | |||
// public void test040(){ | |||
// runTest("an around() clause at the class-level causes an EmptyStackException"); | |||
// } | |||
public void test041(){ | |||
runTest("Doesn't detect cyclic inheritance of aspects."); | |||
} | |||
public void test042(){ | |||
runTest("Binds the pointcut formals to member variables instead of pointcut formals."); | |||
} | |||
public void test043(){ | |||
runTest("ambiguous formal in formals pattern"); | |||
} | |||
public void test044(){ | |||
runTest("good error for field name instead of type name"); | |||
} | |||
public void test045(){ | |||
runTest("errors in aspect inheritance - 1"); | |||
} | |||
public void test046(){ | |||
runTest("errors in aspect inheritance - 2"); | |||
} | |||
public void test047(){ | |||
runTest("errors in aspect inheritance - 3"); | |||
} | |||
public void test048(){ | |||
runTest("errors in aspect inheritance - 4"); | |||
} | |||
public void test049(){ | |||
runTest("circular dominates leading to irresolvable advice precedence"); | |||
} | |||
public void test050(){ | |||
runTest("Should issue an error for using 'class' instead of 'aspect'"); | |||
} | |||
public void test051(){ | |||
runTest("Should signal an error when we need an exposed value but don't provide it"); | |||
} | |||
public void test052(){ | |||
runTest("StackOverFlowException with circular +implements's."); | |||
} | |||
public void test053(){ | |||
runTest("Introducing protected methods is causing a crash"); | |||
} | |||
public void test054(){ | |||
runTest("Introducing protected fields is causing a crash"); | |||
} | |||
public void test055(){ | |||
runTest("two classes with the same fully-qualified names [eachjvm]"); | |||
} | |||
public void test056(){ | |||
runTest("Undefined pointcuts were throwing exceptions in 07b11 [callsto]"); | |||
} | |||
public void test057(){ | |||
runTest("advice on abstract pointcuts"); | |||
} | |||
public void test058(){ | |||
runTest("Whoops, I forgot to put a class in the field access PCD."); | |||
} | |||
public void test059(){ | |||
runTest("the arounds return something but there is no returns statement"); | |||
} | |||
public void test060(){ | |||
runTest("multiple conflicting introductions"); | |||
} | |||
public void test061(){ | |||
runTest("referencing non-static pointcuts in outer aspects"); | |||
} | |||
public void test062(){ | |||
runTest("javac correct compiler error if there is no return in around returning result"); | |||
} | |||
public void test063(){ | |||
runTest("should give an error for introducing two members with the same name"); | |||
} | |||
public void test064(){ | |||
runTest("wimpy test for undeclared and uncaught exceptions"); | |||
} | |||
public void test065(){ | |||
runTest("Given non-matching TypePattern, CE flags use of non-introduced method rather than failure to introduce"); | |||
} | |||
public void test014(){ | |||
runTest("Non-static advice silently ignored"); | |||
} | |||
public void test066(){ | |||
runTest("Compiler should suggest using aspect when advice, pointcuts, or introduction is in a class"); | |||
} | |||
public void test015(){ | |||
runTest("extra closing brace"); | |||
} | |||
public void test067(){ | |||
runTest("declare error working with pointcut and-not (amp,amp,bang)"); | |||
} | |||
public void test016(){ | |||
runTest("decent errors for around return type not matching target point"); | |||
} | |||
public void test068(){ | |||
runTest("aspect as member of interface (private and protected)"); | |||
} | |||
public void test017(){ | |||
runTest("eachobject: can't call new on an aspect of"); | |||
} | |||
public void test069(){ | |||
runTest("introduced inner interfaces - compile should fail to bind interface name outside of Aspect or if implementing method is not public"); | |||
} | |||
public void test018(){ | |||
runTest("eachobject: only zero-argument constructors allowed in an aspect"); | |||
} | |||
public void test070(){ | |||
runTest("aspects may not implement Serializable or Cloneable"); | |||
} | |||
public void test019(){ | |||
runTest("eachobject: can't extend a concrete aspect"); | |||
} | |||
public void test071(){ | |||
runTest("explicit constructor calls can throw exceptions"); | |||
} | |||
public void test020(){ | |||
runTest("instanceof used without a class"); | |||
} | |||
public void test021(){ | |||
runTest("wildcard used for returns clause"); | |||
} | |||
public void test022(){ | |||
runTest("no return statement in around advice"); | |||
} | |||
public void test023(){ | |||
runTest("inner aspects must be static (no longer matches PR#286)"); | |||
} | |||
public void test024(){ | |||
runTest("Casting class declarations as interfaces"); | |||
} | |||
public void test025(){ | |||
runTest("omits a variable name and crashes with a null pointer"); | |||
} | |||
public void test026(){ | |||
runTest("Not generating an error for using new as a method name"); | |||
} | |||
public void test027(){ | |||
runTest("ClassCastException on the int literal"); | |||
} | |||
public void test028(){ | |||
runTest("Wrong strictfp keyword usage in interface function prototype [TODO: move to errors]"); | |||
} | |||
public void test029(){ | |||
runTest("Wrong strictfp keyword usage in field declaration [TODO: move to errors]"); | |||
} | |||
public void test030(){ | |||
runTest("Wrong strictfp keyword usage in constructor declaration [TODO: move to errors]"); | |||
} | |||
public void test031(){ | |||
runTest("Incorrect static casts to primitively foldable arguments should not crash the compiler."); | |||
} | |||
public void test032(){ | |||
runTest("Dominates with commas should signal an error."); | |||
} | |||
public void test033(){ | |||
runTest("stack overflow with recursive crosscut specifier"); | |||
} | |||
public void test034(){ | |||
runTest("Throwing a NullPointerException when formals can't be bound in named pointcut"); | |||
} | |||
public void test035(){ | |||
runTest("disallow defining more than one pointcut with the same name"); | |||
} | |||
public void test036(){ | |||
runTest("pre 0.7 introduction form outside aspect body causes an EmptyStackException"); | |||
} | |||
public void test037(){ | |||
runTest("a class can't extend an aspect"); | |||
} | |||
public void test038(){ | |||
runTest("a before() clause at the class-level causes an EmptyStackException"); | |||
} | |||
public void test039(){ | |||
runTest("an after() clause at the class-level causes an EmptyStackException"); | |||
} | |||
public void test040(){ | |||
runTest("an around() clause at the class-level causes an EmptyStackException"); | |||
} | |||
public void test041(){ | |||
runTest("Doesn't detect cyclic inheritance of aspects."); | |||
} | |||
public void test042(){ | |||
runTest("Binds the pointcut formals to member variables instead of pointcut formals."); | |||
} | |||
public void test043(){ | |||
runTest("ambiguous formal in formals pattern"); | |||
} | |||
public void test044(){ | |||
runTest("good error for field name instead of type name"); | |||
} | |||
public void test045(){ | |||
runTest("errors in aspect inheritance - 1"); | |||
} | |||
public void test046(){ | |||
runTest("errors in aspect inheritance - 2"); | |||
} | |||
public void test047(){ | |||
runTest("errors in aspect inheritance - 3"); | |||
} | |||
public void test048(){ | |||
runTest("errors in aspect inheritance - 4"); | |||
} | |||
public void test049(){ | |||
runTest("circular dominates leading to irresolvable advice precedence"); | |||
} | |||
public void test050(){ | |||
runTest("Should issue an error for using 'class' instead of 'aspect'"); | |||
} | |||
public void test051(){ | |||
runTest("Should signal an error when we need an exposed value but don't provide it"); | |||
} | |||
public void test052(){ | |||
runTest("StackOverFlowException with circular +implements's."); | |||
} | |||
public void test053(){ | |||
runTest("Introducing protected methods is causing a crash"); | |||
} | |||
public void test054(){ | |||
runTest("Introducing protected fields is causing a crash"); | |||
} | |||
public void test055(){ | |||
runTest("two classes with the same fully-qualified names [eachjvm]"); | |||
} | |||
public void test056(){ | |||
runTest("Undefined pointcuts were throwing exceptions in 07b11 [callsto]"); | |||
} | |||
public void test057(){ | |||
runTest("advice on abstract pointcuts"); | |||
} | |||
public void test058(){ | |||
runTest("Whoops, I forgot to put a class in the field access PCD."); | |||
} | |||
public void test059(){ | |||
runTest("the arounds return something but there is no returns statement"); | |||
} | |||
public void test060(){ | |||
runTest("multiple conflicting introductions"); | |||
} | |||
public void test061(){ | |||
runTest("referencing non-static pointcuts in outer aspects"); | |||
} | |||
public void test062(){ | |||
runTest("javac correct compiler error if there is no return in around returning result"); | |||
} | |||
public void test063(){ | |||
runTest("should give an error for introducing two members with the same name"); | |||
} | |||
public void test064(){ | |||
runTest("wimpy test for undeclared and uncaught exceptions"); | |||
} | |||
public void test065(){ | |||
runTest("Given non-matching TypePattern, CE flags use of non-introduced method rather than failure to introduce"); | |||
} | |||
public void test066(){ | |||
runTest("Compiler should suggest using aspect when advice, pointcuts, or introduction is in a class"); | |||
} | |||
public void test067(){ | |||
runTest("declare error working with pointcut and-not (amp,amp,bang)"); | |||
} | |||
public void test068(){ | |||
runTest("aspect as member of interface (private and protected)"); | |||
} | |||
public void test069(){ | |||
runTest("introduced inner interfaces - compile should fail to bind interface name outside of Aspect or if implementing method is not public"); | |||
} | |||
public void test070(){ | |||
runTest("aspects may not implement Serializable or Cloneable"); | |||
} | |||
public void test071(){ | |||
runTest("explicit constructor calls can throw exceptions"); | |||
} | |||
public void test072(){ | |||
runTest("bad proceed args good error messages"); | |||
} | |||
public void test072(){ | |||
runTest("bad proceed args good error messages"); | |||
} | |||
} | |||
@@ -9,14 +9,14 @@ import org.aspectj.util.LangUtil; | |||
/* ******************************************************************* | |||
* 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: | |||
* 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://eclipse.org/legal/epl-v10.html | |||
* | |||
* Contributors: | |||
* Wes Isberg initial implementation | |||
* ******************************************************************/ | |||
import junit.framework.Test; | |||
@@ -30,14 +30,14 @@ public class TestsModuleTests extends TestCase { | |||
TestSuite suite = new TestSuite(name); | |||
// compiler tests, wrapped for JUnit | |||
if (LangUtil.is19VMOrGreater()) { | |||
suite.addTest(AllTests19.suite()); | |||
suite.addTest(AllTests19.suite()); | |||
} else if (LangUtil.is18VMOrGreater()) { | |||
suite.addTest(AllTests18.suite()); | |||
suite.addTest(AllTests18.suite()); | |||
} else if (LangUtil.is15VMOrGreater()) { | |||
// suite.addTest(AllTests15.suite()); | |||
suite.addTest(AllTests17.suite()); // there are currently (28/11/06) no tests specific to a 1.6/1.7 vm - so we can do | |||
// this | |||
} else if (LangUtil.is14VMOrGreater()) { | |||
// this | |||
} else if (LangUtil.is1dot4VMOrGreater()) { | |||
System.err.println("Skipping tests for 1.5"); | |||
// suite.addTest(TestUtil.skipTest("for 1.5")); | |||
suite.addTest(AllTests14.suite()); |
@@ -3813,46 +3813,64 @@ | |||
<stdout> | |||
<line text="target-ok an X execution(void X.foo())"/> | |||
<line text="@this-ok @MyAnnotation(value=my-value) execution(void X.foo())" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@this-ok @MyAnnotation(value="my-value") execution(void X.foo())" vm="9+"/> | |||
<line text="@this-ok @MyAnnotation(value="my-value") execution(void X.foo())" vm="9,10,11,12,13"/> | |||
<line text="@this-ok @MyAnnotation("my-value") execution(void X.foo())" vm="14+"/> | |||
<line text="@target-ok @MyAnnotation(value=my-value) execution(void X.foo())" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@target-ok @MyAnnotation(value="my-value") execution(void X.foo())" vm="9+"/> | |||
<line text="@target-ok @MyAnnotation(value="my-value") execution(void X.foo())" vm="9,10,11,12,13"/> | |||
<line text="@target-ok @MyAnnotation("my-value") execution(void X.foo())" vm="14+"/> | |||
<line text="@within-ok @MyAnnotation(value=my-value) execution(void X.foo())" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@within-ok @MyAnnotation(value="my-value") execution(void X.foo())" vm="9+"/> | |||
<line text="@within-ok @MyAnnotation(value="my-value") execution(void X.foo())" vm="9,10,11,12,13"/> | |||
<line text="@within-ok @MyAnnotation("my-value") execution(void X.foo())" vm="14+"/> | |||
<line text="cflow-ok an X a Y set(Y X.y)"/> | |||
<line text="@annotation-ok-sub @MyAnnotation(value=bar) execution(void X.bar())" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@annotation-ok-sub @MyAnnotation(value="bar") execution(void X.bar())" vm="9+"/> | |||
<line text="@annotation-ok-sub @MyAnnotation(value="bar") execution(void X.bar())" vm="9,10,11,12,13"/> | |||
<line text="@annotation-ok-sub @MyAnnotation("bar") execution(void X.bar())" vm="14+"/> | |||
<line text="@annotation-ok @MyAnnotation(value=bar) execution(void X.bar())" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@annotation-ok @MyAnnotation(value="bar") execution(void X.bar())" vm="9+"/> | |||
<line text="@annotation-ok @MyAnnotation(value="bar") execution(void X.bar())" vm="9,10,11,12,13"/> | |||
<line text="@annotation-ok @MyAnnotation("bar") execution(void X.bar())" vm="14+"/> | |||
<line text="target-ok an X execution(void X.bar())"/> | |||
<line text="@this-ok @MyAnnotation(value=my-value) execution(void X.bar())" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@this-ok @MyAnnotation(value="my-value") execution(void X.bar())" vm="9+"/> | |||
<line text="@this-ok @MyAnnotation(value="my-value") execution(void X.bar())" vm="9,10,11,12,13"/> | |||
<line text="@this-ok @MyAnnotation("my-value") execution(void X.bar())" vm="14+"/> | |||
<line text="@target-ok @MyAnnotation(value=my-value) execution(void X.bar())" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@target-ok @MyAnnotation(value="my-value") execution(void X.bar())" vm="9+"/> | |||
<line text="@target-ok @MyAnnotation(value="my-value") execution(void X.bar())" vm="9,10,11,12,13"/> | |||
<line text="@target-ok @MyAnnotation("my-value") execution(void X.bar())" vm="14+"/> | |||
<line text="@within-ok @MyAnnotation(value=my-value) execution(void X.bar())" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@within-ok @MyAnnotation(value="my-value") execution(void X.bar())" vm="9+"/> | |||
<line text="@within-ok @MyAnnotation(value="my-value") execution(void X.bar())" vm="9,10,11,12,13"/> | |||
<line text="@within-ok @MyAnnotation("my-value") execution(void X.bar())" vm="14+"/> | |||
<line text="@args-ok @MyAnnotation(value=my-value) execution(void Y.foo(X))" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@args-ok @MyAnnotation(value="my-value") execution(void Y.foo(X))" vm="9+"/> | |||
<line text="@args-ok @MyAnnotation(value="my-value") execution(void Y.foo(X))" vm="9,10,11,12,13"/> | |||
<line text="@args-ok @MyAnnotation("my-value") execution(void Y.foo(X))" vm="14+"/> | |||
<line text="args-ok an X execution(void Y.foo(X))"/> | |||
<line text="this-ok a Y execution(void Y.foo(X))"/> | |||
<line text="@this-ok @MyAnnotation(value=on Y) execution(void Y.foo(X))" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@this-ok @MyAnnotation(value="on Y") execution(void Y.foo(X))" vm="9+"/> | |||
<line text="@this-ok @MyAnnotation(value="on Y") execution(void Y.foo(X))" vm="9,10,11,12,13"/> | |||
<line text="@this-ok @MyAnnotation("on Y") execution(void Y.foo(X))" vm="14+"/> | |||
<line text="@target-ok @MyAnnotation(value=on Y) execution(void Y.foo(X))" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@target-ok @MyAnnotation(value="on Y") execution(void Y.foo(X))" vm="9+"/> | |||
<line text="@target-ok @MyAnnotation(value="on Y") execution(void Y.foo(X))" vm="9,10,11,12,13"/> | |||
<line text="@target-ok @MyAnnotation("on Y") execution(void Y.foo(X))" vm="14+"/> | |||
<line text="@within-ok @MyAnnotation(value=on Y) execution(void Y.foo(X))" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@within-ok @MyAnnotation(value="on Y") execution(void Y.foo(X))" vm="9+"/> | |||
<line text="@within-ok @MyAnnotation(value="on Y") execution(void Y.foo(X))" vm="9,10,11,12,13"/> | |||
<line text="@within-ok @MyAnnotation("on Y") execution(void Y.foo(X))" vm="14+"/> | |||
<line text="@annotation-ok-sub @MyAnnotation(value=my-value) execution(X Y.bar())" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@annotation-ok-sub @MyAnnotation(value="my-value") execution(X Y.bar())" vm="9+"/> | |||
<line text="@annotation-ok-sub @MyAnnotation(value="my-value") execution(X Y.bar())" vm="9,10,11,12,13"/> | |||
<line text="@annotation-ok-sub @MyAnnotation("my-value") execution(X Y.bar())" vm="14+"/> | |||
<line text="@annotation-ok @MyAnnotation(value=my-value) execution(X Y.bar())" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@annotation-ok @MyAnnotation(value="my-value") execution(X Y.bar())" vm="9+"/> | |||
<line text="@annotation-ok @MyAnnotation(value="my-value") execution(X Y.bar())" vm="9,10,11,12,13"/> | |||
<line text="@annotation-ok @MyAnnotation("my-value") execution(X Y.bar())" vm="14+"/> | |||
<line text="this-ok a Y execution(X Y.bar())"/> | |||
<line text="@this-ok @MyAnnotation(value=on Y) execution(X Y.bar())" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@this-ok @MyAnnotation(value="on Y") execution(X Y.bar())" vm="9+"/> | |||
<line text="@this-ok @MyAnnotation(value="on Y") execution(X Y.bar())" vm="9,10,11,12,13"/> | |||
<line text="@this-ok @MyAnnotation("on Y") execution(X Y.bar())" vm="14+"/> | |||
<line text="@target-ok @MyAnnotation(value=on Y) execution(X Y.bar())" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@target-ok @MyAnnotation(value="on Y") execution(X Y.bar())" vm="9+"/> | |||
<line text="@target-ok @MyAnnotation(value="on Y") execution(X Y.bar())" vm="9,10,11,12,13"/> | |||
<line text="@target-ok @MyAnnotation("on Y") execution(X Y.bar())" vm="14+"/> | |||
<line text="@within-ok @MyAnnotation(value=on Y) execution(X Y.bar())" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@within-ok @MyAnnotation(value="on Y") execution(X Y.bar())" vm="9+"/> | |||
<line text="@within-ok @MyAnnotation(value="on Y") execution(X Y.bar())" vm="9,10,11,12,13"/> | |||
<line text="@within-ok @MyAnnotation("on Y") execution(X Y.bar())" vm="14+"/> | |||
<line text="@withincode-ok @MyAnnotation(value=my-value) get(X Y.x)" vm="1.5,1.6,1.7,1.8"/> | |||
<line text="@withincode-ok @MyAnnotation(value="my-value") get(X Y.x)" vm="9+"/> | |||
<line text="@withincode-ok @MyAnnotation(value="my-value") get(X Y.x)" vm="9,10,11,12,13"/> | |||
<line text="@withincode-ok @MyAnnotation("my-value") get(X Y.x)" vm="14+"/> | |||
</stdout> | |||
</run> | |||
</ajc-test> |
@@ -92,8 +92,10 @@ | |||
<compile files="Failing.java" options="-1.5"/> | |||
<run class="Failing"> | |||
<stderr> | |||
<line text="On TestInterface:@TestAnnotation(value=true)"/> | |||
<line text="On Failing:@TestAnnotation(value=true)"/> | |||
<line text="On TestInterface:@TestAnnotation(value=true)" vm="1.5,1.6,1.7,1.8,9,10,11,12,13"/> | |||
<line text="On TestInterface:@TestAnnotation(true)" vm="14+"/> | |||
<line text="On Failing:@TestAnnotation(value=true)" vm="1.5,1.6,1.7,1.8,9,10,11,12,13"/> | |||
<line text="On Failing:@TestAnnotation(true)" vm="14+"/> | |||
</stderr> | |||
</run> | |||
</ajc-test> | |||
@@ -102,8 +104,10 @@ | |||
<compile files="Failing2.java" options="-1.5"/> | |||
<run class="Failing2"> | |||
<stderr> | |||
<line text="On TestInterface:@TestAnnotation(value=true)"/> | |||
<line text="On Failing2:@TestAnnotation(value=true)"/> | |||
<line text="On TestInterface:@TestAnnotation(value=true)" vm="1.5,1.6,1.7,1.8,9,10,11,12,13"/> | |||
<line text="On TestInterface:@TestAnnotation(true)" vm="14+"/> | |||
<line text="On Failing2:@TestAnnotation(value=true)" vm="1.5,1.6,1.7,1.8,9,10,11,12,13"/> | |||
<line text="On Failing2:@TestAnnotation(true)" vm="14+"/> | |||
</stderr> | |||
</run> | |||
</ajc-test> |
@@ -71,7 +71,8 @@ | |||
<stdout> | |||
<line text="wibble"/> | |||
<line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/> | |||
<line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="9+"/> | |||
<line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="9,10,11,12,13"/> | |||
<line text="@a.b.c.RelatedType(a.b.c.Vote$_$choice.class)" vm="14+"/> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
@@ -82,7 +83,8 @@ | |||
<stdout> | |||
<line text="wibble"/> | |||
<line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/> | |||
<line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="9+"/> | |||
<line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="9,10,11,12,13"/> | |||
<line text="@a.b.c.RelatedType(a.b.c.Vote$_$choice.class)" vm="14+"/> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
@@ -93,7 +95,8 @@ | |||
<stdout> | |||
<line text="wibble"/> | |||
<line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/> | |||
<line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="9+"/> | |||
<line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="9,10,11,12,13"/> | |||
<line text="@a.b.c.RelatedType(a.b.c.Vote$_$choice.class)" vm="14+"/> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
@@ -104,7 +107,8 @@ | |||
<stdout> | |||
<line text="wibble"/> | |||
<line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/> | |||
<line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="9+"/> | |||
<line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="9,10,11,12,13"/> | |||
<line text="@a.b.c.RelatedType(a.b.c.Vote$_$choice.class)" vm="14+"/> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
@@ -115,7 +119,8 @@ | |||
<stdout> | |||
<line text="wibble"/> | |||
<line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/> | |||
<line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="9+"/> | |||
<line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="9,10,11,12,13"/> | |||
<line text="@a.b.c.RelatedType(a.b.c.Vote$_$choice.class)" vm="14+"/> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
@@ -126,7 +131,8 @@ | |||
<stdout> | |||
<line text="wibble"/> | |||
<line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/> | |||
<line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="9+"/> | |||
<line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="9,10,11,12,13"/> | |||
<line text="@a.b.c.RelatedType(a.b.c.Vote$_$choice.class)" vm="14+"/> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
@@ -137,7 +143,8 @@ | |||
<stdout> | |||
<line text="wibble"/> | |||
<line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/> | |||
<line text="@a.b.c.RelatedType(value=a.b.c.Vote$_.class)" vm="9+"/> | |||
<line text="@a.b.c.RelatedType(value=a.b.c.Vote$_.class)" vm="9,10,11,12,13"/> | |||
<line text="@a.b.c.RelatedType(a.b.c.Vote$_.class)" vm="14+"/> | |||
</stdout> | |||
</run> | |||
</ajc-test> |
@@ -184,7 +184,8 @@ | |||
<line text="@AnnoBoolean(value=true, zzz=false)"/> | |||
<line text="@AnnoClass(value=class java.lang.Integer, ccc=class java.lang.String)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/> | |||
<line text="@AnnoClass(value=java.lang.Integer.class, ccc=java.lang.String.class)" vm="9+"/> | |||
<line text="@AnnoLong(value=999, jjj=111)"/> | |||
<line text="@AnnoLong(value=999L, jjj=111L)" vm="14+"/> | |||
<line text="@AnnoLong(value=999, jjj=111)" vm="1.2,1.3,1.4,1.5,1.6,1.6,1.8,9,10,11,12,13"/> | |||
<line text="@AnnoString(value=set from xml, sss=xyz)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/> | |||
<line text="@AnnoString(value="set from xml", sss="xyz")" vm="9+"/> | |||
<line text="Annotations on field2? true"/> | |||
@@ -209,7 +210,8 @@ | |||
<line text="@AnnoShort(value=8, sss=3)"/> | |||
<line text="Annotations on field2? true"/> | |||
<line text="Annotation count is 2"/> | |||
<line text="@AnnoByte(value=88, bbb=66)"/> | |||
<line text="@AnnoByte(value=88, bbb=66)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8,9,10,11,12,13"/> | |||
<line text="@AnnoByte(value=(byte)0x58, bbb=(byte)0x42)" vm="14+"/> | |||
<line text="@AnnoInt(iii=111, value=99)"/> | |||
</stdout> | |||
</run> |
@@ -99,7 +99,8 @@ | |||
<run class="Target4"> | |||
<stdout> | |||
<line text="1"/> | |||
<line text="@Tagged(value=31)"/> | |||
<line text="@Tagged(value=31)" vm="1.5,1.6,1.7,1.8,9,10,11,12,13"/> | |||
<line text="@Tagged(31)" vm="14+"/> | |||
</stdout> | |||
</run> | |||
</ajc-test> |
@@ -51,46 +51,6 @@ Method call | |||
</run> | |||
</ajc-test> | |||
<!-- with the release of 13 this behaviour seems to have moved from 12 to 13?? --> | |||
<ajc-test dir="features193" vm="13" title="switch 1"> | |||
<compile files="Switch1.java" options="-13 --enable-preview"> | |||
</compile> | |||
<run class="Switch1" vmargs="--enable-preview"> | |||
<stdout> | |||
<line text="0"/> | |||
<line text="1"/> | |||
<line text="2"/> | |||
<line text="3"/> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
<ajc-test dir="features193" vm="13" title="switch 2"> | |||
<compile files="Switch2.java" options="--enable-preview -source 13"> | |||
</compile> | |||
<run class="Switch2" vmargs="--enable-preview"> | |||
<stdout> | |||
<line text="0"/> | |||
<line text="2"/> | |||
<line text="4"/> | |||
<line text="6"/> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
<ajc-test dir="features193" vm="13" title="switch 3"> | |||
<compile files="Switch3.java" options="--enable-preview -source 13"> | |||
</compile> | |||
<run class="Switch3" vmargs="--enable-preview"> | |||
<stdout> | |||
<line text="3"/> | |||
<line text="6"/> | |||
<line text="9"/> | |||
<line text="12"/> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
<ajc-test dir="bugs193/543657" vm="1.8" title="overweaving decm - reweaving"> | |||
<compile files="MoodIndicator.java,Code1.java" options="-showWeaveInfo -1.8" outjar="one.jar"> | |||
<message kind="weave" text="Mixing interface 'MoodIndicator$Moody' (MoodIndicator.java) into type 'Code1' (Code1.java)"/> |
@@ -103,31 +103,6 @@ | |||
</run> | |||
</ajc-test> | |||
<ajc-test dir="features195/textblock" vm="13" title="textblock 1"> | |||
<compile files="Code.java" options="--enable-preview -source 13"> | |||
</compile> | |||
<run class="Code" vmargs="--enable-preview"> | |||
<stdout> | |||
<line text="this is a text"/> | |||
<!-- the incidental space is removed with a trim in output matching but the test app doesn't remove it when printing it, why? --> | |||
<line text="block"/> | |||
<line text=""/> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
<ajc-test dir="features195/textblock" vm="13" title="textblock 2"> | |||
<compile files="Code2.java" options="--enable-preview -source 13"> | |||
</compile> | |||
<run class="Code2" vmargs="--enable-preview"> | |||
<stdout> | |||
<!-- why is the incidental space not removed here?? --> | |||
<line text="this is a text"/> | |||
<line text="block in advice"/> | |||
<line text=""/> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
</suite> |
@@ -0,0 +1,118 @@ | |||
<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd"[]> | |||
<suite> | |||
<!-- switch now in Java14 and doesn't need -enable-preview flag --> | |||
<ajc-test dir="features193" vm="14" title="switch 1"> | |||
<compile files="Switch1.java" options="-14"> | |||
</compile> | |||
<run class="Switch1" vmargs="--enable-preview"> | |||
<stdout> | |||
<line text="0" /> | |||
<line text="1" /> | |||
<line text="2" /> | |||
<line text="3" /> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
<ajc-test dir="features193" vm="14" title="switch 2"> | |||
<compile files="Switch2.java" options="-source 14"> | |||
</compile> | |||
<run class="Switch2" vmargs=""> | |||
<stdout> | |||
<line text="0" /> | |||
<line text="2" /> | |||
<line text="4" /> | |||
<line text="6" /> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
<ajc-test dir="features193" vm="14" title="switch 3"> | |||
<compile files="Switch3.java" options="-source 14"> | |||
</compile> | |||
<run class="Switch3" vmargs=""> | |||
<stdout> | |||
<line text="3" /> | |||
<line text="6" /> | |||
<line text="9" /> | |||
<line text="12" /> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
<ajc-test dir="bugs196/java14" vm="14" title="simple record"> | |||
<compile files="Person.java" options="--enable-preview -14" /> | |||
</ajc-test> | |||
<ajc-test dir="bugs196/java14" vm="14" title="using a record"> | |||
<compile files="Person.java UsingPersonRecord.java" | |||
options="--enable-preview -14" /> | |||
<run class="UsingPersonRecord" vmargs="--enable-preview"> | |||
<stdout> | |||
<line text="Person[firstName=A, lastName=B, age=99]" /> | |||
<line text="A" /> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
<ajc-test dir="bugs196/java14" vm="14" | |||
title="instanceof patterns"> | |||
<compile files="Jep305.java" options="--enable-preview -14" /> | |||
<run class="Jep305" vmargs="--enable-preview"> | |||
<stdout> | |||
<line text="orange" /> | |||
<line text="apple" /> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
<ajc-test dir="bugs196/java14" vm="14" | |||
title="advising records"> | |||
<compile | |||
files="TraceRecordComponents.aj Person.java UsingPersonRecord.java" | |||
options="--enable-preview -14" /> | |||
<run class="UsingPersonRecord" vmargs="--enable-preview"> | |||
<stdout> | |||
<line text="execution(String Person.toString())" /> | |||
<line text="Person[firstName=A, lastName=B, age=99]" /> | |||
<line text="execution(String Person.firstName())" /> | |||
<line text="A" /> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
<!-- textblock still in preview at 14 level --> | |||
<ajc-test dir="features195/textblock" vm="14" | |||
title="textblock 1"> | |||
<compile files="Code.java" | |||
options="--enable-preview -source 14"> | |||
</compile> | |||
<run class="Code" vmargs="--enable-preview"> | |||
<stdout> | |||
<line text="this is a text" /> | |||
<!-- the incidental space is removed with a trim in output matching but | |||
the test app doesn't remove it when printing it, why? --> | |||
<line text="block" /> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
<ajc-test dir="features195/textblock" vm="14" | |||
title="textblock 2"> | |||
<compile files="Code2.java" | |||
options="--enable-preview -source 14"> | |||
</compile> | |||
<run class="Code2" vmargs="--enable-preview"> | |||
<stdout> | |||
<!-- why is the incidental space not removed here?? --> | |||
<line text="this is a text" /> | |||
<line text="block in advice" /> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
</suite> |
@@ -0,0 +1,69 @@ | |||
<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd"[]> | |||
<suite> | |||
<!-- empty class --> | |||
<ajc-test dir="bugs160/simplejava" title="simple - a"> | |||
<compile files="SimpleA.java" options="-14"/> | |||
</ajc-test> | |||
<!-- class with one method --> | |||
<ajc-test dir="bugs160/simplejava" title="simple - b"> | |||
<compile files="SimpleB.java" options="-14"/> | |||
<run class="SimpleB"/> | |||
</ajc-test> | |||
<!-- empty aspect --> | |||
<ajc-test dir="bugs160/simplejava" title="simple - c"> | |||
<compile files="SimpleC.java" options="-13"/> | |||
</ajc-test> | |||
<!-- simple before --> | |||
<ajc-test dir="bugs160/simplejava" title="simple - d"> | |||
<compile files="SimpleD.java" options="-14"/> | |||
</ajc-test> | |||
<!-- simple itd field --> | |||
<ajc-test dir="bugs160/simplejava" title="simple - e"> | |||
<compile files="SimpleE.java" options="-14"/> | |||
</ajc-test> | |||
<!-- aspect with main calling a static method --> | |||
<ajc-test dir="bugs160/simplejava" title="simple - f"> | |||
<compile files="SimpleF.java" options="-14"/> | |||
</ajc-test> | |||
<!-- pertarget --> | |||
<ajc-test dir="bugs160/simplejava" title="simple - g"> | |||
<compile files="SimpleG.java" options="-14"/> | |||
</ajc-test> | |||
<!-- generic ctor itds --> | |||
<ajc-test dir="bugs160/simplejava" title="simple - h"> | |||
<compile files="SimpleH.java" options="-14"/> | |||
</ajc-test> | |||
<!-- overriding generic itd methods --> | |||
<ajc-test dir="bugs160/simplejava" title="simple - i"> | |||
<compile files="SimpleI.java" options="-14"/> | |||
</ajc-test> | |||
<!-- check class file version is 57.0 --> | |||
<ajc-test dir="bugs160/simplejava" title="simple - j"> | |||
<compile files="SimpleJ.java" options="-14"/> | |||
</ajc-test> | |||
<!-- check class file version is 57.0 --> | |||
<ajc-test dir="bugs160/simplejava" title="simple - k"> | |||
<compile files="SimpleJ.java" options="-source 14"/> | |||
</ajc-test> | |||
<!-- check class file version is 49.0 --> | |||
<ajc-test dir="bugs160/simplejava" title="simple - m"> | |||
<compile files="SimpleJ.java" options="-1.5"/> | |||
</ajc-test> | |||
<ajc-test dir="bugs160/simplejava" title="simple - n"> | |||
<compile files="SimpleN.java" options="-14"/> | |||
</ajc-test> | |||
</suite> |
@@ -1,7 +1,9 @@ | |||
eclipse.preferences.version=1 | |||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 | |||
org.eclipse.jdt.core.compiler.compliance=1.8 | |||
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled | |||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning | |||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore | |||
org.eclipse.jdt.core.compiler.processAnnotations=disabled | |||
org.eclipse.jdt.core.compiler.release=disabled | |||
org.eclipse.jdt.core.compiler.source=1.8 |
@@ -84,7 +84,7 @@ public class LangUtil { | |||
if (vm == null) { | |||
new RuntimeException( | |||
"System properties appear damaged, cannot find: java.version/java.runtime.version/java.vm.version") | |||
.printStackTrace(System.err); | |||
.printStackTrace(System.err); | |||
vmVersion = 1.5; | |||
} else { | |||
// Version: [1-9][0-9]*((\.0)*\.[1-9][0-9]*)* | |||
@@ -107,7 +107,7 @@ public class LangUtil { | |||
} catch (Throwable t) { | |||
new RuntimeException( | |||
"System properties appear damaged, cannot find: java.version/java.runtime.version/java.vm.version", t) | |||
.printStackTrace(System.err); | |||
.printStackTrace(System.err); | |||
vmVersion = 1.5; | |||
} | |||
} | |||
@@ -129,7 +129,7 @@ public class LangUtil { | |||
return 1.3 <= vmVersion; | |||
} | |||
public static boolean is14VMOrGreater() { | |||
public static boolean is1dot4VMOrGreater() { | |||
return 1.4 <= vmVersion; | |||
} | |||
@@ -169,6 +169,9 @@ public class LangUtil { | |||
return 13 <= vmVersion; | |||
} | |||
public static boolean is14VMOrGreater() { | |||
return 14 <= vmVersion; | |||
} | |||
/** | |||
* Shorthand for "if null, throw IllegalArgumentException" | |||
@@ -1001,7 +1004,7 @@ public class LangUtil { | |||
public static class StringChecker { | |||
static StringChecker TEST_PACKAGES = new StringChecker(new String[] { "org.aspectj.testing", | |||
"org.eclipse.jdt.internal.junit", "junit.framework.", | |||
"org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner" }); | |||
"org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner" }); | |||
String[] infixes; | |||
@@ -1123,8 +1126,8 @@ public class LangUtil { | |||
File binDir = new File(javaHome, "bin"); | |||
if (binDir.isDirectory() && binDir.canRead()) { | |||
String[] execs = new String[] { "java", "java.exe" }; | |||
for (int i = 0; i < execs.length; i++) { | |||
result = new File(binDir, execs[i]); | |||
for (String exec : execs) { | |||
result = new File(binDir, exec); | |||
if (result.canRead()) { | |||
break; | |||
} | |||
@@ -1514,7 +1517,7 @@ public class LangUtil { | |||
} | |||
public static String getJavaHome() { | |||
return System.getProperty("java.home"); | |||
return System.getProperty("java.home"); | |||
} | |||
} |
@@ -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.util; | |||
@@ -19,7 +19,7 @@ import java.util.List; | |||
import junit.framework.TestCase; | |||
/** | |||
* | |||
* | |||
*/ | |||
public class LangUtilTest extends TestCase { | |||
@@ -40,7 +40,7 @@ public class LangUtilTest extends TestCase { | |||
// EXP = "[-d, classes, -classpath, foo.jar, -verbose]"; | |||
// resultString = "" + extracted; | |||
// assertTrue(resultString + " != " + EXP, resultString.equals(EXP)); | |||
// | |||
// | |||
// // no input, no output | |||
// extracted.clear(); | |||
// args = new String[] {}; | |||
@@ -50,7 +50,7 @@ public class LangUtilTest extends TestCase { | |||
// assertTrue(resultString + " != " + EXP, resultString.equals(EXP)); | |||
// resultString = "" + extracted; | |||
// assertTrue(resultString + " != " + EXP, resultString.equals(EXP)); | |||
// | |||
// | |||
// // one input, nothing extracted | |||
// extracted.clear(); | |||
// args = new String[] {"Bar.java"}; | |||
@@ -61,7 +61,7 @@ public class LangUtilTest extends TestCase { | |||
// EXP = "[]"; | |||
// resultString = "" + extracted; | |||
// assertTrue(resultString + " != " + EXP, resultString.equals(EXP)); | |||
// | |||
// | |||
// // one input, extracted | |||
// extracted.clear(); | |||
// args = new String[] {"-verbose"}; | |||
@@ -87,7 +87,7 @@ public class LangUtilTest extends TestCase { | |||
// EXP = "[-verbose]"; | |||
// resultString = "" + extracted; | |||
// assertTrue(resultString + " != " + EXP, resultString.equals(EXP)); | |||
// | |||
// | |||
// // one input, not extracted | |||
// extracted.clear(); | |||
// args = new String[] {"Bar.java"}; | |||
@@ -103,7 +103,7 @@ public class LangUtilTest extends TestCase { | |||
public void testVersion() { | |||
assertTrue(LangUtil.isOnePointThreeVMOrGreater()); // min vm now - floor may change | |||
if (LangUtil.is15VMOrGreater()) { | |||
assertTrue(LangUtil.is14VMOrGreater()); | |||
assertTrue(LangUtil.is1dot4VMOrGreater()); | |||
} | |||
} | |||
@@ -111,33 +111,33 @@ public class LangUtilTest extends TestCase { | |||
public void testExtractOptionsArrayCollector() { | |||
String[] args = new String[] { "-d", "classes", "-classpath", "foo.jar", "-verbose", "Bar.java" }; | |||
String[][] OPTIONS = new String[][] { new String[] { "-classpath", null }, new String[] { "-d", null }, | |||
new String[] { "-verbose" }, new String[] { "-help" } }; | |||
new String[] { "-verbose" }, new String[] { "-help" } }; | |||
String[][] options = LangUtil.copyStrings(OPTIONS); | |||
String[][] options = LangUtil.copyStrings(OPTIONS); | |||
String[] result = LangUtil.extractOptions(args, options); | |||
String resultString = "" + Arrays.asList(result); | |||
String EXP = "[Bar.java]"; | |||
assertTrue(resultString + " != " + EXP, resultString.equals(EXP)); | |||
assertTrue("-verbose".equals(options[2][0])); | |||
assertTrue("foo.jar".equals(options[0][1])); | |||
assertTrue("classes".equals(options[1][1])); | |||
assertTrue("-classpath".equals(options[0][0])); | |||
assertTrue("-d".equals(options[1][0])); | |||
assertTrue(null == options[3][0]); | |||
String[] result = LangUtil.extractOptions(args, options); | |||
String resultString = "" + Arrays.asList(result); | |||
String EXP = "[Bar.java]"; | |||
assertTrue(resultString + " != " + EXP, resultString.equals(EXP)); | |||
assertTrue("-verbose".equals(options[2][0])); | |||
assertTrue("foo.jar".equals(options[0][1])); | |||
assertTrue("classes".equals(options[1][1])); | |||
assertTrue("-classpath".equals(options[0][0])); | |||
assertTrue("-d".equals(options[1][0])); | |||
assertTrue(null == options[3][0]); | |||
// get args back, no options set | |||
args = new String[] { "Bar.java" }; | |||
options = LangUtil.copyStrings(OPTIONS); | |||
// get args back, no options set | |||
args = new String[] { "Bar.java" }; | |||
options = LangUtil.copyStrings(OPTIONS); | |||
result = LangUtil.extractOptions(args, options); | |||
resultString = "" + Arrays.asList(result); | |||
EXP = "[Bar.java]"; | |||
assertTrue(resultString + " != " + EXP, resultString.equals(EXP)); | |||
assertTrue(null == options[0][0]); | |||
assertTrue(null == options[1][0]); | |||
assertTrue(null == options[2][0]); | |||
assertTrue(null == options[3][0]); | |||
result = LangUtil.extractOptions(args, options); | |||
resultString = "" + Arrays.asList(result); | |||
EXP = "[Bar.java]"; | |||
assertTrue(resultString + " != " + EXP, resultString.equals(EXP)); | |||
assertTrue(null == options[0][0]); | |||
assertTrue(null == options[1][0]); | |||
assertTrue(null == options[2][0]); | |||
assertTrue(null == options[3][0]); | |||
} | |||
// public void testOptionVariants() { | |||
@@ -153,7 +153,7 @@ public class LangUtilTest extends TestCase { | |||
// String[] threeB = new String[] {"-1-", "-2-", "-3-"}; | |||
// String[] athreeB = new String[] {"a", "-1-", "-2-", "-3-"}; | |||
// String[] threeaB = new String[] {"-1-", "a", "-2-", "-3-"}; | |||
// | |||
// | |||
// checkOptionVariants(NONE, new String[][] { NONE }); | |||
// checkOptionVariants(one, new String[][] { one }); | |||
// checkOptionVariants(both, new String[][] { both }); |