ソースを参照

Remove most MINOR_*, MINOR_* BCEL class file versions

in favour of Constants.ClassFileVersion.of(int, int). The few ones
retained are used from production code, the vast majority of removed
ones only from test code.

This gets rid of yet another 'AspectJ_JDK_Update' tag. One less place to
check and update with each newly supported Java version. :-)

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
tags/V1_9_21_2
Alexander Kriegisch 2ヶ月前
コミット
f3450726d2
26個のファイルの変更167行の追加132行の削除
  1. 81
    52
      bcel-builder/src/main/java/org/aspectj/apache/bcel/Constants.java
  2. 2
    2
      bcel-builder/src/test/java/org/aspectj/apache/bcel/classfile/tests/ModuleTest.java
  3. 2
    2
      tests/src/test/java/org/aspectj/systemtest/ajc160/SanityTests.java
  4. 2
    2
      tests/src/test/java/org/aspectj/systemtest/ajc190/SanityTests19.java
  5. 2
    2
      tests/src/test/java/org/aspectj/systemtest/ajc191/SanityTestsJava10.java
  6. 6
    5
      tests/src/test/java/org/aspectj/systemtest/ajc1919/Java19PreviewFeaturesTests.java
  7. 2
    2
      tests/src/test/java/org/aspectj/systemtest/ajc1919/SanityTestsJava19.java
  8. 2
    2
      tests/src/test/java/org/aspectj/systemtest/ajc192/SanityTestsJava11.java
  9. 8
    7
      tests/src/test/java/org/aspectj/systemtest/ajc1920/Java20PreviewFeaturesTests.java
  10. 2
    2
      tests/src/test/java/org/aspectj/systemtest/ajc1920/SanityTestsJava20.java
  11. 7
    7
      tests/src/test/java/org/aspectj/systemtest/ajc1921/Ajc1921TestsJava.java
  12. 2
    2
      tests/src/test/java/org/aspectj/systemtest/ajc1921/SanityTestsJava21.java
  13. 2
    2
      tests/src/test/java/org/aspectj/systemtest/ajc195/SanityTestsJava13.java
  14. 3
    3
      tests/src/test/java/org/aspectj/systemtest/ajc196/Ajc196Tests.java
  15. 2
    1
      tests/src/test/java/org/aspectj/systemtest/ajc196/Java14PreviewFeaturesTests.java
  16. 2
    2
      tests/src/test/java/org/aspectj/systemtest/ajc196/SanityTestsJava14.java
  17. 7
    7
      tests/src/test/java/org/aspectj/systemtest/ajc197/Ajc197TestsJava.java
  18. 5
    4
      tests/src/test/java/org/aspectj/systemtest/ajc197/Java16PreviewFeaturesTests.java
  19. 2
    2
      tests/src/test/java/org/aspectj/systemtest/ajc197/SanityTestsJava15.java
  20. 2
    2
      tests/src/test/java/org/aspectj/systemtest/ajc197/SanityTestsJava16.java
  21. 4
    4
      tests/src/test/java/org/aspectj/systemtest/ajc198/Ajc198TestsJava.java
  22. 1
    1
      tests/src/test/java/org/aspectj/systemtest/ajc198/CompileWithReleaseTests.java
  23. 6
    5
      tests/src/test/java/org/aspectj/systemtest/ajc198/Java17PreviewFeaturesTests.java
  24. 2
    2
      tests/src/test/java/org/aspectj/systemtest/ajc198/SanityTestsJava17.java
  25. 9
    8
      tests/src/test/java/org/aspectj/systemtest/ajc199/Java18PreviewFeaturesTests.java
  26. 2
    2
      tests/src/test/java/org/aspectj/systemtest/ajc199/SanityTestsJava18.java

+ 81
- 52
bcel-builder/src/main/java/org/aspectj/apache/bcel/Constants.java ファイルの表示



import org.aspectj.apache.bcel.generic.Type; import org.aspectj.apache.bcel.generic.Type;


import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;

/* ==================================================================== /* ====================================================================
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* @author Andy Clement * @author Andy Clement
*/ */
public interface Constants { public interface Constants {
// Major and minor version of the code
short MAJOR_1_1 = 45;
short MINOR_1_1 = 3;
short MAJOR_1_2 = 46;
short MINOR_1_2 = 0;
short MAJOR_1_3 = 47;
short MINOR_1_3 = 0;
short MAJOR_1_4 = 48;
short MINOR_1_4 = 0;
short MAJOR_1_5 = 49;
short MINOR_1_5 = 0;
short MAJOR_1_6 = 50;
short MINOR_1_6 = 0;
short MAJOR_1_7 = 51;
short MINOR_1_7 = 0;
short MAJOR_1_8 = 52;
short MINOR_1_8 = 0;
short MAJOR_1_9 = 53;
short MINOR_1_9 = 0;
short MAJOR_10 = 54;
short MINOR_10 = 0;
short MAJOR_11 = 55;
short MINOR_11 = 0;
short MAJOR_12 = 56;
short MINOR_12 = 0;
short MAJOR_13 = 57;
short MINOR_13 = 0;
short MAJOR_14 = 58;
short MINOR_14 = 0;
short MAJOR_15 = 59;
short MINOR_15 = 0;
short MAJOR_16 = 60;
short MINOR_16 = 0;
short MAJOR_17 = 61;
short MINOR_17 = 0;
short MAJOR_18 = 62;
short MINOR_18 = 0;
short MAJOR_19 = 63;
short MINOR_19 = 0;
short MAJOR_20 = 64;
short MINOR_20 = 0;
short MAJOR_21 = 65;
short MINOR_21 = 0;
// AspectJ_JDK_Update
// short MAJOR_22 = 66;
// short MINOR_22 = 0;

int PREVIEW_MINOR_VERSION = 65535;

// Defaults
short MAJOR = MAJOR_1_1;
short MINOR = MINOR_1_1;
// Selected major/minor class file versions, defined as constants because they are used in production code. Maybe,
// there is a slight performance advantage, therefore retain them. When tests need class file version infos, they
// should use ClassFileVersion.of(javaMajor) instead, avoiding new constants for every major Java release. In the
// past, we had too many of them.
int MAJOR_1_1 = 45;
int MINOR_1_1 = 3;
int MAJOR_1_5 = 49;
int MAJOR_1_6 = 50;
int MAJOR_1_8 = 52;

/**
* Carries information about major, minor and preview-minor version byte values found in Java class files for a
* specific Java version. You can obtain instances via {@link #of(int)} and {@link #of(int, int)}, respectively.
*/
class ClassFileVersion {
private static final Map<Integer, ClassFileVersion> cache = new ConcurrentHashMap<>();

public final int MAJOR;
public final int MINOR;
public final int PREVIEW_MINOR = 65535;

private ClassFileVersion(int major, int minor) {
MAJOR = major;
MINOR = minor;
}

/**
* Obtain a class file version info instance for a specific Java version
*
* @param javaMajor Java major version; must be >= 2; values 2 to 9 are interpreted as Java versions 1.2 to 1.9
*
* @return either a cached or a new instance; result is identical to calling {@code of(javaMajor, 0)}
*/
public static ClassFileVersion of(int javaMajor) {
return of(javaMajor, 0);
}

/**
* Obtain a class file version info instance for a specific Java version
*
* @param javaMajor Java major version; must be >= 1; values 2 to 9 are interpreted as Java versions 1.2 to 1.9
* @param javaMinor Java minor version; is only relevant for Java major 1 and must be in range [1..9]
*
* @return either a cached or a new instance
*/
public static ClassFileVersion of(int javaMajor, int javaMinor) {
if (javaMajor < 1)
throw new IllegalArgumentException("Java major version must be >= 1");
if (javaMajor == 1) {
if (javaMinor < 1 || javaMinor > 9)
throw new IllegalArgumentException("Java 1.x versions must be 1.1 to 1.9");
// 1.1 -> 1, ..., 1.5 -> 5, ..., 1.9 -> 9
javaMajor = javaMinor;
}
ClassFileVersion classFileVersion = cache.get(javaMajor);
if (classFileVersion == null) {
classFileVersion = new ClassFileVersion(javaMajor + 44, javaMajor == 1 ? 3 : 0);
cache.put(javaMajor, classFileVersion);
}
return classFileVersion;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof ClassFileVersion)) return false;
ClassFileVersion that = (ClassFileVersion) o;
// Include PREVIEW_MINOR, if it ever changes to be non-constant
return MAJOR == that.MAJOR && MINOR == that.MINOR /*&& PREVIEW_MINOR == that.PREVIEW_MINOR*/;
}

@Override
public int hashCode() {
// Include PREVIEW_MINOR, if it ever changes to be non-constant
return Objects.hash(MAJOR, MINOR/*, PREVIEW_MINOR*/);
}
}


/** Maximum value for an unsigned short */ /** Maximum value for an unsigned short */
int MAX_SHORT = 65535; // 2^16 - 1 int MAX_SHORT = 65535; // 2^16 - 1

+ 2
- 2
bcel-builder/src/test/java/org/aspectj/apache/bcel/classfile/tests/ModuleTest.java ファイルの表示

ClassParser classParser = new ClassParser(moduleFilename); ClassParser classParser = new ClassParser(moduleFilename);
JavaClass javaClass = classParser.parse(); JavaClass javaClass = classParser.parse();
assertNotNull(javaClass); assertNotNull(javaClass);
assertEquals(Constants.MAJOR_1_9,javaClass.getMajor());
assertEquals(Constants.MINOR_1_9,javaClass.getMinor());
assertEquals(Constants.ClassFileVersion.of(9).MAJOR, javaClass.getMajor());
assertEquals(Constants.ClassFileVersion.of(9).MINOR, javaClass.getMinor());
assertEquals(Constants.ACC_MODULE,javaClass.getModifiers()); assertEquals(Constants.ACC_MODULE,javaClass.getModifiers());
assertEquals(0,javaClass.getSuperclassNameIndex()); assertEquals(0,javaClass.getSuperclassNameIndex());
assertEquals(0,javaClass.getInterfaceIndices().length); assertEquals(0,javaClass.getInterfaceIndices().length);

+ 2
- 2
tests/src/test/java/org/aspectj/systemtest/ajc160/SanityTests.java ファイルの表示

* rather than executing them. * rather than executing them.
*/ */
public class SanityTests extends org.aspectj.testing.XMLBasedAjcTestCase { public class SanityTests extends org.aspectj.testing.XMLBasedAjcTestCase {
public static final int bytecode_version_for_JDK_level = Constants.MAJOR_1_6;
public static final int bytecode_version_for_JDK_level = Constants.ClassFileVersion.of(6).MAJOR;


// Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
public void testSimpleJava_A() { public void testSimpleJava_A() {


public void testVersionCorrect4() throws ClassNotFoundException {// check it is 49.0 when -1.5 is specified public void testVersionCorrect4() throws ClassNotFoundException {// check it is 49.0 when -1.5 is specified
runTest("simple - m"); runTest("simple - m");
checkVersion("A", Constants.MAJOR_1_5, 0);
checkVersion("A", Constants.ClassFileVersion.of(5).MAJOR, 0);
} }


// Check the stackmap stuff appears for methods in a Java6 file // Check the stackmap stuff appears for methods in a Java6 file

+ 2
- 2
tests/src/test/java/org/aspectj/systemtest/ajc190/SanityTests19.java ファイルの表示

* to check code generation and modification with that version specified. * to check code generation and modification with that version specified.
*/ */
public class SanityTests19 extends org.aspectj.testing.XMLBasedAjcTestCase { public class SanityTests19 extends org.aspectj.testing.XMLBasedAjcTestCase {
public static final int bytecode_version_for_JDK_level = Constants.MAJOR_1_9;
public static final int bytecode_version_for_JDK_level = Constants.ClassFileVersion.of(9).MAJOR;


// Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
public void testSimpleJava_A() { public void testSimpleJava_A() {


public void testVersionCorrect4() throws ClassNotFoundException { // check it is 49.0 when -1.5 is specified public void testVersionCorrect4() throws ClassNotFoundException { // check it is 49.0 when -1.5 is specified
runTest("simple - m"); runTest("simple - m");
checkVersion("A", Constants.MAJOR_1_5, 0);
checkVersion("A", Constants.ClassFileVersion.of(5).MAJOR, 0);
} }


// Check the stackmap stuff appears for methods in a Java6 file // Check the stackmap stuff appears for methods in a Java6 file

+ 2
- 2
tests/src/test/java/org/aspectj/systemtest/ajc191/SanityTestsJava10.java ファイルの表示

* @author Andy Clement * @author Andy Clement
*/ */
public class SanityTestsJava10 extends org.aspectj.testing.XMLBasedAjcTestCase { public class SanityTestsJava10 extends org.aspectj.testing.XMLBasedAjcTestCase {
public static final int bytecode_version_for_JDK_level = Constants.MAJOR_10;
public static final int bytecode_version_for_JDK_level = Constants.ClassFileVersion.of(10).MAJOR;


// Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
public void testSimpleJava_A() { public void testSimpleJava_A() {


public void testVersionCorrect4() throws ClassNotFoundException { // check it is 49.0 when -1.5 is specified public void testVersionCorrect4() throws ClassNotFoundException { // check it is 49.0 when -1.5 is specified
runTest("simple - m"); runTest("simple - m");
checkVersion("A", Constants.MAJOR_1_5, 0);
checkVersion("A", Constants.ClassFileVersion.of(5).MAJOR, 0);
} }


// /////////////////////////////////////// // ///////////////////////////////////////

+ 6
- 5
tests/src/test/java/org/aspectj/systemtest/ajc1919/Java19PreviewFeaturesTests.java ファイルの表示

* @author Alexander Kriegisch * @author Alexander Kriegisch
*/ */
public class Java19PreviewFeaturesTests extends XMLBasedAjcTestCaseForJava19Only { public class Java19PreviewFeaturesTests extends XMLBasedAjcTestCaseForJava19Only {
private static final Constants.ClassFileVersion classFileVersion = Constants.ClassFileVersion.of(19);


public void testSwitchPatternMatchingPreview3Java() { public void testSwitchPatternMatchingPreview3Java() {
runTest("switch pattern matching preview 3 java"); runTest("switch pattern matching preview 3 java");
checkVersion("SwitchPatternPreview3OK", Constants.MAJOR_19, Constants.PREVIEW_MINOR_VERSION);
checkVersion("SwitchPatternPreview3OK", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public void testSwitchPatternMatchingPreview3Aspect() { public void testSwitchPatternMatchingPreview3Aspect() {
runTest("switch pattern matching preview 3 aspect"); runTest("switch pattern matching preview 3 aspect");
checkVersion("SwitchPatternPreview3Aspect", Constants.MAJOR_19, Constants.PREVIEW_MINOR_VERSION);
checkVersion("Application", Constants.MAJOR_19, Constants.PREVIEW_MINOR_VERSION);
checkVersion("Shape", Constants.MAJOR_19, Constants.PREVIEW_MINOR_VERSION);
checkVersion("S", Constants.MAJOR_19, Constants.PREVIEW_MINOR_VERSION);
checkVersion("SwitchPatternPreview3Aspect", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("Application", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("Shape", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("S", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public void testSwitchPatternMatchingCaseLabelDominatedByPrecedingError() { public void testSwitchPatternMatchingCaseLabelDominatedByPrecedingError() {

+ 2
- 2
tests/src/test/java/org/aspectj/systemtest/ajc1919/SanityTestsJava19.java ファイルの表示

*/ */
public class SanityTestsJava19 extends XMLBasedAjcTestCaseForJava19OrLater { public class SanityTestsJava19 extends XMLBasedAjcTestCaseForJava19OrLater {


public static final int bytecode_version_for_JDK_level = Constants.MAJOR_19;
public static final int bytecode_version_for_JDK_level = Constants.ClassFileVersion.of(19).MAJOR;


// Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
public void testSimpleJava_A() { public void testSimpleJava_A() {
public void testVersionCorrect4() { public void testVersionCorrect4() {
runTest("simple - m"); runTest("simple - m");
// Must be 49.0 when -1.5 is specified // Must be 49.0 when -1.5 is specified
checkVersion("A", Constants.MAJOR_1_5, 0);
checkVersion("A", Constants.ClassFileVersion.of(5).MAJOR, 0);
} }


public static Test suite() { public static Test suite() {

+ 2
- 2
tests/src/test/java/org/aspectj/systemtest/ajc192/SanityTestsJava11.java ファイルの表示

* @author Andy Clement * @author Andy Clement
*/ */
public class SanityTestsJava11 extends XMLBasedAjcTestCaseForJava11OrLater { public class SanityTestsJava11 extends XMLBasedAjcTestCaseForJava11OrLater {
public static final int bytecode_version_for_JDK_level = Constants.MAJOR_11;
public static final int bytecode_version_for_JDK_level = Constants.ClassFileVersion.of(11).MAJOR;


// Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
public void testSimpleJava_A() { public void testSimpleJava_A() {


public void testVersionCorrect4() throws ClassNotFoundException { // check it is 49.0 when -1.5 is specified public void testVersionCorrect4() throws ClassNotFoundException { // check it is 49.0 when -1.5 is specified
runTest("simple - m"); runTest("simple - m");
checkVersion("A", Constants.MAJOR_1_5, 0);
checkVersion("A", Constants.ClassFileVersion.of(5).MAJOR, 0);
} }





+ 8
- 7
tests/src/test/java/org/aspectj/systemtest/ajc1920/Java20PreviewFeaturesTests.java ファイルの表示

* @author Alexander Kriegisch * @author Alexander Kriegisch
*/ */
public class Java20PreviewFeaturesTests extends XMLBasedAjcTestCaseForJava20Only { public class Java20PreviewFeaturesTests extends XMLBasedAjcTestCaseForJava20Only {
private static final Constants.ClassFileVersion classFileVersion = Constants.ClassFileVersion.of(20);


public void testSwitchPatternMatchingPreview4Java() { public void testSwitchPatternMatchingPreview4Java() {
runTest("switch pattern matching preview 4 java"); runTest("switch pattern matching preview 4 java");
checkVersion("SwitchPatternPreview4OK", Constants.MAJOR_20, Constants.PREVIEW_MINOR_VERSION);
checkVersion("SwitchPatternPreview4OK", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public void testSwitchPatternMatchingPreview4Error() { public void testSwitchPatternMatchingPreview4Error() {


public void testSwitchPatternMatchingPreview3Aspect() { public void testSwitchPatternMatchingPreview3Aspect() {
runTest("switch pattern matching preview 3 aspect"); runTest("switch pattern matching preview 3 aspect");
checkVersion("SwitchPatternPreview3Aspect", Constants.MAJOR_20, Constants.PREVIEW_MINOR_VERSION);
checkVersion("Application", Constants.MAJOR_20, Constants.PREVIEW_MINOR_VERSION);
checkVersion("Shape", Constants.MAJOR_20, Constants.PREVIEW_MINOR_VERSION);
checkVersion("S", Constants.MAJOR_20, Constants.PREVIEW_MINOR_VERSION);
checkVersion("SwitchPatternPreview3Aspect", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("Application", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("Shape", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("S", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public void testSwitchPatternMatchingCaseLabelDominatedByPrecedingError() { public void testSwitchPatternMatchingCaseLabelDominatedByPrecedingError() {
public void testRecordPatternsPreview1Error() { public void testRecordPatternsPreview1Error() {
// https://github.com/eclipse-jdt/eclipse.jdt.core/issues/450 (fixed for preview 2 in Eclipse 2023-03, 4.27) // https://github.com/eclipse-jdt/eclipse.jdt.core/issues/450 (fixed for preview 2 in Eclipse 2023-03, 4.27)
runTest("record patterns error"); runTest("record patterns error");
checkVersion("RecordPatternsPreview1Error", Constants.MAJOR_20, Constants.PREVIEW_MINOR_VERSION);
checkVersion("Box", Constants.MAJOR_20, Constants.PREVIEW_MINOR_VERSION);
checkVersion("RecordPatternsPreview1Error", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("Box", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public void testRecordPatternsPreview1ExhaustivenessOK1() { public void testRecordPatternsPreview1ExhaustivenessOK1() {

+ 2
- 2
tests/src/test/java/org/aspectj/systemtest/ajc1920/SanityTestsJava20.java ファイルの表示

*/ */
public class SanityTestsJava20 extends XMLBasedAjcTestCaseForJava20OrLater { public class SanityTestsJava20 extends XMLBasedAjcTestCaseForJava20OrLater {


public static final int bytecode_version_for_JDK_level = Constants.MAJOR_20;
public static final int bytecode_version_for_JDK_level = Constants.ClassFileVersion.of(20).MAJOR;


// Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
public void testSimpleJava_A() { public void testSimpleJava_A() {
public void testVersionCorrect4() { public void testVersionCorrect4() {
runTest("simple - m"); runTest("simple - m");
// Must be 49.0 when -1.5 is specified // Must be 49.0 when -1.5 is specified
checkVersion("A", Constants.MAJOR_1_5, 0);
checkVersion("A", Constants.ClassFileVersion.of(5).MAJOR, 0);
} }


public static Test suite() { public static Test suite() {

+ 7
- 7
tests/src/test/java/org/aspectj/systemtest/ajc1921/Ajc1921TestsJava.java ファイルの表示



public void testSwitchPatternMatchingPreview4Java() { public void testSwitchPatternMatchingPreview4Java() {
runTest("switch pattern matching preview 4 java"); runTest("switch pattern matching preview 4 java");
checkVersion("SwitchPatternPreview4OK", Constants.MAJOR_21, Constants.MINOR_21);
checkVersion("SwitchPatternPreview4OK", Constants.ClassFileVersion.of(21).MAJOR, Constants.ClassFileVersion.of(21).MINOR);
} }


public void testSwitchPatternMatchingPreview4Error() { public void testSwitchPatternMatchingPreview4Error() {


public void testSwitchPatternMatchingPreview3Aspect() { public void testSwitchPatternMatchingPreview3Aspect() {
runTest("switch pattern matching preview 3 aspect"); runTest("switch pattern matching preview 3 aspect");
checkVersion("SwitchPatternPreview3Aspect", Constants.MAJOR_21, Constants.MINOR_21);
checkVersion("Application", Constants.MAJOR_21, Constants.MINOR_21);
checkVersion("Shape", Constants.MAJOR_21, Constants.MINOR_21);
checkVersion("S", Constants.MAJOR_21, Constants.MINOR_21);
checkVersion("SwitchPatternPreview3Aspect", Constants.ClassFileVersion.of(21).MAJOR, Constants.ClassFileVersion.of(21).MINOR);
checkVersion("Application", Constants.ClassFileVersion.of(21).MAJOR, Constants.ClassFileVersion.of(21).MINOR);
checkVersion("Shape", Constants.ClassFileVersion.of(21).MAJOR, Constants.ClassFileVersion.of(21).MINOR);
checkVersion("S", Constants.ClassFileVersion.of(21).MAJOR, Constants.ClassFileVersion.of(21).MINOR);
} }


public void testSwitchPatternMatchingCaseLabelDominatedByPrecedingError() { public void testSwitchPatternMatchingCaseLabelDominatedByPrecedingError() {
public void testRecordPatternsPreview1Error() { public void testRecordPatternsPreview1Error() {
// https://github.com/eclipse-jdt/eclipse.jdt.core/issues/450 (fixed for preview 2 in Eclipse 2023-03, 4.27) // https://github.com/eclipse-jdt/eclipse.jdt.core/issues/450 (fixed for preview 2 in Eclipse 2023-03, 4.27)
runTest("record patterns error"); runTest("record patterns error");
checkVersion("RecordPatternsPreview1Error", Constants.MAJOR_21, Constants.MINOR_21);
checkVersion("Box", Constants.MAJOR_21, Constants.MINOR_21);
checkVersion("RecordPatternsPreview1Error", Constants.ClassFileVersion.of(21).MAJOR, Constants.ClassFileVersion.of(21).MINOR);
checkVersion("Box", Constants.ClassFileVersion.of(21).MAJOR, Constants.ClassFileVersion.of(21).MINOR);
} }


public void testRecordPatternsPreview1ExhaustivenessOK1() { public void testRecordPatternsPreview1ExhaustivenessOK1() {

+ 2
- 2
tests/src/test/java/org/aspectj/systemtest/ajc1921/SanityTestsJava21.java ファイルの表示

*/ */
public class SanityTestsJava21 extends XMLBasedAjcTestCaseForJava21OrLater { public class SanityTestsJava21 extends XMLBasedAjcTestCaseForJava21OrLater {


public static final int bytecode_version_for_JDK_level = Constants.MAJOR_21;
public static final int bytecode_version_for_JDK_level = Constants.ClassFileVersion.of(21).MAJOR;


// Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
public void testSimpleJava_A() { public void testSimpleJava_A() {
public void testVersionCorrect4() { public void testVersionCorrect4() {
runTest("simple - m"); runTest("simple - m");
// Must be 49.0 when -1.5 is specified // Must be 49.0 when -1.5 is specified
checkVersion("A", Constants.MAJOR_1_5, 0);
checkVersion("A", Constants.ClassFileVersion.of(5).MAJOR, 0);
} }


public static Test suite() { public static Test suite() {

+ 2
- 2
tests/src/test/java/org/aspectj/systemtest/ajc195/SanityTestsJava13.java ファイルの表示

*/ */
public class SanityTestsJava13 extends XMLBasedAjcTestCaseForJava13OrLater { public class SanityTestsJava13 extends XMLBasedAjcTestCaseForJava13OrLater {


public static final int bytecode_version_for_JDK_level = Constants.MAJOR_13;
public static final int bytecode_version_for_JDK_level = Constants.ClassFileVersion.of(13).MAJOR;


// Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
public void testSimpleJava_A() { public void testSimpleJava_A() {


public void testVersionCorrect4() throws ClassNotFoundException { // check it is 49.0 when -1.5 is specified public void testVersionCorrect4() throws ClassNotFoundException { // check it is 49.0 when -1.5 is specified
runTest("simple - m"); runTest("simple - m");
checkVersion("A", Constants.MAJOR_1_5, 0);
checkVersion("A", Constants.ClassFileVersion.of(5).MAJOR, 0);
} }





+ 3
- 3
tests/src/test/java/org/aspectj/systemtest/ajc196/Ajc196Tests.java ファイルの表示



public void testSwitch1() { public void testSwitch1() {
runTest("switch 1"); runTest("switch 1");
checkVersion("Switch1", Constants.MAJOR_14, 0);
checkVersion("Switch1", Constants.ClassFileVersion.of(14).MAJOR, 0);
} }


public void testSwitch2() { public void testSwitch2() {
runTest("switch 2"); runTest("switch 2");
checkVersion("Switch2", Constants.MAJOR_14, 0);
checkVersion("Switch2", Constants.ClassFileVersion.of(14).MAJOR, 0);
} }


public void testSwitch3() { public void testSwitch3() {
runTest("switch 3"); runTest("switch 3");
checkVersion("Switch3", Constants.MAJOR_14, 0);
checkVersion("Switch3", Constants.ClassFileVersion.of(14).MAJOR, 0);
} }


public static Test suite() { public static Test suite() {

+ 2
- 1
tests/src/test/java/org/aspectj/systemtest/ajc196/Java14PreviewFeaturesTests.java ファイルの表示

* @author Alexander Kriegisch * @author Alexander Kriegisch
*/ */
public class Java14PreviewFeaturesTests extends XMLBasedAjcTestCaseForJava14Only { public class Java14PreviewFeaturesTests extends XMLBasedAjcTestCaseForJava14Only {
private static final Constants.ClassFileVersion classFileVersion = Constants.ClassFileVersion.of(14);


public void testRecords() { public void testRecords() {
runTest("simple record"); runTest("simple record");
checkVersion("Person", Constants.MAJOR_14, Constants.PREVIEW_MINOR_VERSION);
checkVersion("Person", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public void testRecords2() { public void testRecords2() {

+ 2
- 2
tests/src/test/java/org/aspectj/systemtest/ajc196/SanityTestsJava14.java ファイルの表示

*/ */
public class SanityTestsJava14 extends XMLBasedAjcTestCaseForJava14OrLater { public class SanityTestsJava14 extends XMLBasedAjcTestCaseForJava14OrLater {


public static final int bytecode_version_for_JDK_level = Constants.MAJOR_14;
public static final int bytecode_version_for_JDK_level = Constants.ClassFileVersion.of(14).MAJOR;


// Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
public void testSimpleJava_A() { public void testSimpleJava_A() {
public void testVersionCorrect4() { public void testVersionCorrect4() {
runTest("simple - m"); runTest("simple - m");
// Must be 49.0 when -1.5 is specified // Must be 49.0 when -1.5 is specified
checkVersion("A", Constants.MAJOR_1_5, 0);
checkVersion("A", Constants.ClassFileVersion.of(5).MAJOR, 0);
} }


public static Test suite() { public static Test suite() {

+ 7
- 7
tests/src/test/java/org/aspectj/systemtest/ajc197/Ajc197TestsJava.java ファイルの表示



public void testHiddenClass() { public void testHiddenClass() {
runTest("hidden class"); runTest("hidden class");
checkVersion("HiddenClassDemo", Constants.MAJOR_16, Constants.MINOR_16);
checkVersion("HiddenClassDemo", Constants.ClassFileVersion.of(16).MAJOR, Constants.ClassFileVersion.of(16).MINOR);
} }


public void testTextBlock1() { public void testTextBlock1() {
runTest("textblock 1"); runTest("textblock 1");
checkVersion("Code", Constants.MAJOR_16, Constants.MINOR_16);
checkVersion("Code", Constants.ClassFileVersion.of(16).MAJOR, Constants.ClassFileVersion.of(16).MINOR);
} }


public void testTextBlock2() { public void testTextBlock2() {
runTest("textblock 2"); runTest("textblock 2");
checkVersion("Code2", Constants.MAJOR_16, Constants.MINOR_16);
checkVersion("Code2", Constants.ClassFileVersion.of(16).MAJOR, Constants.ClassFileVersion.of(16).MINOR);
} }


public void testRecords() { public void testRecords() {
runTest("simple record"); runTest("simple record");
checkVersion("Person", Constants.MAJOR_16, Constants.MINOR_16);
checkVersion("Person", Constants.ClassFileVersion.of(16).MAJOR, Constants.ClassFileVersion.of(16).MINOR);
} }


public void testRecords2() { public void testRecords2() {
runTest("using a record"); runTest("using a record");
checkVersion("UsingPersonRecord", Constants.MAJOR_16, Constants.MINOR_16);
checkVersion("UsingPersonRecord", Constants.ClassFileVersion.of(16).MAJOR, Constants.ClassFileVersion.of(16).MINOR);
} }


public void testAdvisingRecords() { public void testAdvisingRecords() {
runTest("advising records"); runTest("advising records");
checkVersion("TraceRecordComponents", Constants.MAJOR_16, Constants.MINOR_16);
checkVersion("TraceRecordComponents", Constants.ClassFileVersion.of(16).MAJOR, Constants.ClassFileVersion.of(16).MINOR);
} }


public void testInstanceofPatterns() { public void testInstanceofPatterns() {
runTest("instanceof patterns"); runTest("instanceof patterns");
checkVersion("Jep305", Constants.MAJOR_16, Constants.MINOR_16);
checkVersion("Jep305", Constants.ClassFileVersion.of(16).MAJOR, Constants.ClassFileVersion.of(16).MINOR);
} }


public static Test suite() { public static Test suite() {

+ 5
- 4
tests/src/test/java/org/aspectj/systemtest/ajc197/Java16PreviewFeaturesTests.java ファイルの表示

* @author Alexander Kriegisch * @author Alexander Kriegisch
*/ */
public class Java16PreviewFeaturesTests extends XMLBasedAjcTestCaseForJava16Only { public class Java16PreviewFeaturesTests extends XMLBasedAjcTestCaseForJava16Only {
private static final Constants.ClassFileVersion classFileVersion = Constants.ClassFileVersion.of(16);


public void testSealedClassWithLegalSubclasses() { public void testSealedClassWithLegalSubclasses() {
runTest("sealed class with legal subclasses"); runTest("sealed class with legal subclasses");
checkVersion("Employee", Constants.MAJOR_16, Constants.PREVIEW_MINOR_VERSION);
checkVersion("Manager", Constants.MAJOR_16, Constants.PREVIEW_MINOR_VERSION);
checkVersion("Employee", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("Manager", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public void testSealedClassWithIllegalSubclass() { public void testSealedClassWithIllegalSubclass() {
runTest("sealed class with illegal subclass"); runTest("sealed class with illegal subclass");
checkVersion("Person", Constants.MAJOR_16, Constants.PREVIEW_MINOR_VERSION);
checkVersion("Person", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public void testWeaveSealedClass() { public void testWeaveSealedClass() {
runTest("weave sealed class"); runTest("weave sealed class");
checkVersion("PersonAspect", Constants.MAJOR_16, Constants.PREVIEW_MINOR_VERSION);
checkVersion("PersonAspect", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public static Test suite() { public static Test suite() {

+ 2
- 2
tests/src/test/java/org/aspectj/systemtest/ajc197/SanityTestsJava15.java ファイルの表示

*/ */
public class SanityTestsJava15 extends XMLBasedAjcTestCaseForJava15OrLater { public class SanityTestsJava15 extends XMLBasedAjcTestCaseForJava15OrLater {


public static final int bytecode_version_for_JDK_level = Constants.MAJOR_15;
public static final int bytecode_version_for_JDK_level = Constants.ClassFileVersion.of(15).MAJOR;


// Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
public void testSimpleJava_A() { public void testSimpleJava_A() {
public void testVersionCorrect4() { public void testVersionCorrect4() {
runTest("simple - m"); runTest("simple - m");
// Must be 49.0 when -1.5 is specified // Must be 49.0 when -1.5 is specified
checkVersion("A", Constants.MAJOR_1_5, 0);
checkVersion("A", Constants.ClassFileVersion.of(5).MAJOR, 0);
} }


public static Test suite() { public static Test suite() {

+ 2
- 2
tests/src/test/java/org/aspectj/systemtest/ajc197/SanityTestsJava16.java ファイルの表示

*/ */
public class SanityTestsJava16 extends XMLBasedAjcTestCaseForJava16OrLater { public class SanityTestsJava16 extends XMLBasedAjcTestCaseForJava16OrLater {


public static final int bytecode_version_for_JDK_level = Constants.MAJOR_16;
public static final int bytecode_version_for_JDK_level = Constants.ClassFileVersion.of(16).MAJOR;


// Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
public void testSimpleJava_A() { public void testSimpleJava_A() {
public void testVersionCorrect4() { public void testVersionCorrect4() {
runTest("simple - m"); runTest("simple - m");
// Must be 49.0 when -1.5 is specified // Must be 49.0 when -1.5 is specified
checkVersion("A", Constants.MAJOR_1_5, 0);
checkVersion("A", Constants.ClassFileVersion.of(5).MAJOR, 0);
} }


public static Test suite() { public static Test suite() {

+ 4
- 4
tests/src/test/java/org/aspectj/systemtest/ajc198/Ajc198TestsJava.java ファイルの表示



public void testSealedClassWithLegalSubclasses() { public void testSealedClassWithLegalSubclasses() {
runTest("sealed class with legal subclasses"); runTest("sealed class with legal subclasses");
checkVersion("Employee", Constants.MAJOR_17, Constants.MINOR_17);
checkVersion("Manager", Constants.MAJOR_17, Constants.MINOR_17);
checkVersion("Employee", Constants.ClassFileVersion.of(17).MAJOR, Constants.ClassFileVersion.of(17).MINOR);
checkVersion("Manager", Constants.ClassFileVersion.of(17).MAJOR, Constants.ClassFileVersion.of(17).MINOR);
} }


public void testSealedClassWithIllegalSubclass() { public void testSealedClassWithIllegalSubclass() {
runTest("sealed class with illegal subclass"); runTest("sealed class with illegal subclass");
checkVersion("Person", Constants.MAJOR_17, Constants.MINOR_17);
checkVersion("Person", Constants.ClassFileVersion.of(17).MAJOR, Constants.ClassFileVersion.of(17).MINOR);
} }


public void testWeaveSealedClass() { public void testWeaveSealedClass() {
runTest("weave sealed class"); runTest("weave sealed class");
checkVersion("PersonAspect", Constants.MAJOR_17, Constants.MINOR_17);
checkVersion("PersonAspect", Constants.ClassFileVersion.of(17).MAJOR, Constants.ClassFileVersion.of(17).MINOR);
} }


public static Test suite() { public static Test suite() {

+ 1
- 1
tests/src/test/java/org/aspectj/systemtest/ajc198/CompileWithReleaseTests.java ファイルの表示



// Check compiled byte code version // Check compiled byte code version
String className = "Buffers"; String className = "Buffers";
checkVersion(className, Constants.MAJOR_1_8, Constants.MINOR_1_8);
checkVersion(className, Constants.ClassFileVersion.of(8).MAJOR, Constants.ClassFileVersion.of(8).MINOR);


// Disassemble method and check if Java 8 API is used as expected // Disassemble method and check if Java 8 API is used as expected
JavaClass javaClass; JavaClass javaClass;

+ 6
- 5
tests/src/test/java/org/aspectj/systemtest/ajc198/Java17PreviewFeaturesTests.java ファイルの表示

* @author Alexander Kriegisch * @author Alexander Kriegisch
*/ */
public class Java17PreviewFeaturesTests extends XMLBasedAjcTestCaseForJava17Only { public class Java17PreviewFeaturesTests extends XMLBasedAjcTestCaseForJava17Only {
private static final Constants.ClassFileVersion classFileVersion = Constants.ClassFileVersion.of(17);


public void testSwitchPatternMatchingCaseLabelDominatedByPrecedingError() { public void testSwitchPatternMatchingCaseLabelDominatedByPrecedingError() {
runTest("switch pattern matching error"); runTest("switch pattern matching error");


public void testSwitchPatternMatchingJava() { public void testSwitchPatternMatchingJava() {
runTest("switch pattern matching java"); runTest("switch pattern matching java");
checkVersion("SwitchPatternOK", Constants.MAJOR_17, Constants.PREVIEW_MINOR_VERSION);
checkVersion("SwitchPatternOK", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public void testSwitchPatternMatchingAspect() { public void testSwitchPatternMatchingAspect() {
runTest("switch pattern matching aspect"); runTest("switch pattern matching aspect");
checkVersion("SwitchPatternAspect", Constants.MAJOR_17, Constants.PREVIEW_MINOR_VERSION);
checkVersion("Application", Constants.MAJOR_17, Constants.PREVIEW_MINOR_VERSION);
checkVersion("Shape", Constants.MAJOR_17, Constants.PREVIEW_MINOR_VERSION);
checkVersion("S", Constants.MAJOR_17, Constants.PREVIEW_MINOR_VERSION);
checkVersion("SwitchPatternAspect", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("Application", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("Shape", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("S", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public static Test suite() { public static Test suite() {

+ 2
- 2
tests/src/test/java/org/aspectj/systemtest/ajc198/SanityTestsJava17.java ファイルの表示

*/ */
public class SanityTestsJava17 extends XMLBasedAjcTestCaseForJava17OrLater { public class SanityTestsJava17 extends XMLBasedAjcTestCaseForJava17OrLater {


public static final int bytecode_version_for_JDK_level = Constants.MAJOR_17;
public static final int bytecode_version_for_JDK_level = Constants.ClassFileVersion.of(17).MAJOR;


// Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
public void testSimpleJava_A() { public void testSimpleJava_A() {
public void testVersionCorrect4() { public void testVersionCorrect4() {
runTest("simple - m"); runTest("simple - m");
// Must be 49.0 when -1.5 is specified // Must be 49.0 when -1.5 is specified
checkVersion("A", Constants.MAJOR_1_5, 0);
checkVersion("A", Constants.ClassFileVersion.of(5).MAJOR, 0);
} }


public static Test suite() { public static Test suite() {

+ 9
- 8
tests/src/test/java/org/aspectj/systemtest/ajc199/Java18PreviewFeaturesTests.java ファイルの表示

* @author Alexander Kriegisch * @author Alexander Kriegisch
*/ */
public class Java18PreviewFeaturesTests extends XMLBasedAjcTestCaseForJava18Only { public class Java18PreviewFeaturesTests extends XMLBasedAjcTestCaseForJava18Only {
private static final Constants.ClassFileVersion classFileVersion = Constants.ClassFileVersion.of(18);


public void testSwitchPatternMatchingCaseLabelDominatedByPrecedingError() { public void testSwitchPatternMatchingCaseLabelDominatedByPrecedingError() {
runTest("switch pattern matching error"); runTest("switch pattern matching error");


public void testSwitchPatternMatchingJava() { public void testSwitchPatternMatchingJava() {
runTest("switch pattern matching java"); runTest("switch pattern matching java");
checkVersion("SwitchPatternOK", Constants.MAJOR_18, Constants.PREVIEW_MINOR_VERSION);
checkVersion("SwitchPatternOK", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public void testSwitchPatternMatchingAspect() { public void testSwitchPatternMatchingAspect() {
runTest("switch pattern matching aspect"); runTest("switch pattern matching aspect");
checkVersion("SwitchPatternAspect", Constants.MAJOR_18, Constants.PREVIEW_MINOR_VERSION);
checkVersion("Application", Constants.MAJOR_18, Constants.PREVIEW_MINOR_VERSION);
checkVersion("Shape", Constants.MAJOR_18, Constants.PREVIEW_MINOR_VERSION);
checkVersion("S", Constants.MAJOR_18, Constants.PREVIEW_MINOR_VERSION);
checkVersion("SwitchPatternAspect", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("Application", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("Shape", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("S", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public void testSwitchPatternMatchingPreview2Error1() { public void testSwitchPatternMatchingPreview2Error1() {


public void testSwitchPatternMatchingPreview2Java() { public void testSwitchPatternMatchingPreview2Java() {
runTest("switch pattern matching preview 2 java"); runTest("switch pattern matching preview 2 java");
checkVersion("SwitchPatternPreview2OK", Constants.MAJOR_18, Constants.PREVIEW_MINOR_VERSION);
checkVersion("SwitchPatternPreview2OK", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public void testSwitchPatternMatchingPreview2Aspect() { public void testSwitchPatternMatchingPreview2Aspect() {
runTest("switch pattern matching preview 2 aspect"); runTest("switch pattern matching preview 2 aspect");
checkVersion("SwitchPatternPreview2Aspect", Constants.MAJOR_18, Constants.PREVIEW_MINOR_VERSION);
checkVersion("Application", Constants.MAJOR_18, Constants.PREVIEW_MINOR_VERSION);
checkVersion("SwitchPatternPreview2Aspect", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
checkVersion("Application", classFileVersion.MAJOR, classFileVersion.PREVIEW_MINOR);
} }


public static Test suite() { public static Test suite() {

+ 2
- 2
tests/src/test/java/org/aspectj/systemtest/ajc199/SanityTestsJava18.java ファイルの表示

*/ */
public class SanityTestsJava18 extends XMLBasedAjcTestCaseForJava18OrLater { public class SanityTestsJava18 extends XMLBasedAjcTestCaseForJava18OrLater {


public static final int bytecode_version_for_JDK_level = Constants.MAJOR_18;
public static final int bytecode_version_for_JDK_level = Constants.ClassFileVersion.of(18).MAJOR;


// Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
public void testSimpleJava_A() { public void testSimpleJava_A() {
public void testVersionCorrect4() { public void testVersionCorrect4() {
runTest("simple - m"); runTest("simple - m");
// Must be 49.0 when -1.5 is specified // Must be 49.0 when -1.5 is specified
checkVersion("A", Constants.MAJOR_1_5, 0);
checkVersion("A", Constants.ClassFileVersion.of(5).MAJOR, 0);
} }


public static Test suite() { public static Test suite() {

読み込み中…
キャンセル
保存