aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/core/src/lombok/DirectoryRunner.java3
-rw-r--r--test/core/src/lombok/LombokTestSource.java5
-rw-r--r--test/core/src/lombok/RunTestsViaEcj.java96
-rw-r--r--test/pretty/resource/after/TryWithResourcesVarRef.java (renamed from test/pretty/resource/after/tryWithResourcesVarRef.java)0
-rw-r--r--test/stubs/org/checkerframework/checker/calledmethods/qual/CalledMethods.java17
-rw-r--r--test/stubs/org/checkerframework/checker/calledmethods/qual/NotCalledMethods.java17
-rw-r--r--test/stubs/org/checkerframework/common/aliasing/qual/Unique.java12
-rw-r--r--test/stubs/org/checkerframework/common/returnsreceiver/qual/This.java12
-rw-r--r--test/stubs/org/checkerframework/dataflow/qual/Pure.java12
-rw-r--r--test/stubs/org/checkerframework/dataflow/qual/SideEffectFree.java12
-rw-r--r--test/transform/resource/after-delombok/BuilderWithDeprecatedAnnOnly.java104
-rw-r--r--test/transform/resource/after-delombok/CheckerFrameworkBasic.java14
-rw-r--r--test/transform/resource/after-delombok/CheckerFrameworkBuilder.java26
-rw-r--r--test/transform/resource/after-delombok/CheckerFrameworkSuperBuilder.java44
-rw-r--r--test/transform/resource/after-delombok/EqualsAndHashCodeCache.java167
-rw-r--r--test/transform/resource/after-delombok/WithMethodMarkedDeprecatedAnnOnly.java11
-rw-r--r--test/transform/resource/after-ecj/BuilderWithDeprecatedAnnOnly.java88
-rw-r--r--test/transform/resource/after-ecj/CheckerFrameworkBasic.java10
-rw-r--r--test/transform/resource/after-ecj/CheckerFrameworkBuilder.java20
-rw-r--r--test/transform/resource/after-ecj/CheckerFrameworkSuperBuilder.java40
-rw-r--r--test/transform/resource/after-ecj/EqualsAndHashCodeCache.java189
-rw-r--r--test/transform/resource/after-ecj/GetterSetterJavadocEcj.java86
-rw-r--r--test/transform/resource/after-ecj/SetterDeprecatedEcj.java14
-rw-r--r--test/transform/resource/after-ecj/WithMethodMarkedDeprecatedAnnOnly.java11
-rw-r--r--test/transform/resource/before/BuilderJavadoc.java1
-rw-r--r--test/transform/resource/before/BuilderWithDeprecated.java1
-rw-r--r--test/transform/resource/before/BuilderWithDeprecatedAnnOnly.java10
-rw-r--r--test/transform/resource/before/CheckerFrameworkBasic.java3
-rw-r--r--test/transform/resource/before/DelegateAlreadyImplemented.java1
-rw-r--r--test/transform/resource/before/DelegateFlagUsage.java1
-rw-r--r--test/transform/resource/before/DelegateGenerics.java1
-rw-r--r--test/transform/resource/before/DelegateOnGetter.java1
-rw-r--r--test/transform/resource/before/DelegateOnGetterNone.java1
-rw-r--r--test/transform/resource/before/DelegateOnMethods.java1
-rw-r--r--test/transform/resource/before/DelegateOnStatic.java1
-rw-r--r--test/transform/resource/before/DelegateRecursion.java1
-rw-r--r--test/transform/resource/before/DelegateTypesAndExcludes.java1
-rw-r--r--test/transform/resource/before/DelegateWithDeprecated.java1
-rw-r--r--test/transform/resource/before/DelegateWithVarargs.java1
-rw-r--r--test/transform/resource/before/DelegateWithVarargs2.java1
-rw-r--r--test/transform/resource/before/EqualsAndHashCodeCache.java29
-rw-r--r--test/transform/resource/before/GetterDeprecated.java3
-rw-r--r--test/transform/resource/before/GetterSetterJavadoc.java1
-rw-r--r--test/transform/resource/before/GetterSetterJavadocEcj.java65
-rw-r--r--test/transform/resource/before/OnXJava7StyleOn8.java2
-rw-r--r--test/transform/resource/before/OnXJava8StyleOn7.java2
-rw-r--r--test/transform/resource/before/SetterAndWithMethodJavadoc.java1
-rw-r--r--test/transform/resource/before/SetterDeprecated.java3
-rw-r--r--test/transform/resource/before/SetterDeprecatedEcj.java12
-rw-r--r--test/transform/resource/before/ValDelegateMethodReference.java2
-rw-r--r--test/transform/resource/before/WithMethodMarkedDeprecated.java1
-rw-r--r--test/transform/resource/before/WithMethodMarkedDeprecatedAnnOnly.java10
-rw-r--r--test/transform/resource/messages-delombok/CheckerFrameworkBasic.java.messages4
-rw-r--r--test/transform/resource/messages-delombok/CheckerFrameworkBuilder.java.messages1
-rw-r--r--test/transform/resource/messages-delombok/CheckerFrameworkSuperBuilder.java.messages3
-rw-r--r--test/transform/resource/messages-ecj/CheckerFrameworkBasic.java.messages1
-rw-r--r--test/transform/resource/messages-ecj/CheckerFrameworkBuilder.java.messages1
-rw-r--r--test/transform/resource/messages-ecj/CheckerFrameworkSuperBuilder.java.messages1
-rw-r--r--test/transform/resource/messages-idempotent/CheckerFrameworkBasic.java.messages10
59 files changed, 1077 insertions, 112 deletions
diff --git a/test/core/src/lombok/DirectoryRunner.java b/test/core/src/lombok/DirectoryRunner.java
index a174355d..93b18039 100644
--- a/test/core/src/lombok/DirectoryRunner.java
+++ b/test/core/src/lombok/DirectoryRunner.java
@@ -180,7 +180,8 @@ public class DirectoryRunner extends Runner {
case DELOMBOK:
return new RunTestsViaDelombok().createTester(params, file, "javac", params.getVersion());
case ECJ:
- return new RunTestsViaEcj().createTester(params, file, "ecj", params.getVersion());
+ String platform = RunTestsViaEcj.eclipseAvailable() ? "eclipse" : "ecj";
+ return new RunTestsViaEcj().createTester(params, file, platform, params.getVersion());
default:
case JAVAC:
throw new UnsupportedOperationException();
diff --git a/test/core/src/lombok/LombokTestSource.java b/test/core/src/lombok/LombokTestSource.java
index a0a6407a..e23a0f57 100644
--- a/test/core/src/lombok/LombokTestSource.java
+++ b/test/core/src/lombok/LombokTestSource.java
@@ -65,7 +65,10 @@ public class LombokTestSource {
public boolean runOnPlatform(String platform) {
if (platforms == null || platforms.isEmpty()) return true;
- for (String pl : platforms) if (pl.equalsIgnoreCase(platform)) return true;
+ for (String pl : platforms) {
+ if (pl.startsWith("!") && pl.regionMatches(true, 1, platform, 0, platform.length())) return false;
+ if (pl.equalsIgnoreCase(platform)) return true;
+ }
return false;
}
diff --git a/test/core/src/lombok/RunTestsViaEcj.java b/test/core/src/lombok/RunTestsViaEcj.java
index b98c19b7..1d840a21 100644
--- a/test/core/src/lombok/RunTestsViaEcj.java
+++ b/test/core/src/lombok/RunTestsViaEcj.java
@@ -35,6 +35,14 @@ import java.util.concurrent.atomic.AtomicReference;
import lombok.eclipse.Eclipse;
import lombok.javac.CapturingDiagnosticListener.CompilerMessage;
+import org.eclipse.core.internal.registry.ExtensionRegistry;
+import org.eclipse.core.internal.runtime.Activator;
+import org.eclipse.core.internal.runtime.PlatformActivator;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.RegistryFactory;
+import org.eclipse.core.runtime.adaptor.EclipseStarter;
+import org.eclipse.core.runtime.spi.IRegistryProvider;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.compiler.CategorizedProblem;
import org.eclipse.jdt.core.compiler.CharOperation;
@@ -49,6 +57,9 @@ import org.eclipse.jdt.internal.compiler.batch.FileSystem;
import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory;
+import org.eclipse.jdt.internal.core.JavaModelManager;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
public class RunTestsViaEcj extends AbstractRunTests {
protected CompilerOptions ecjCompilerOptions() {
@@ -107,7 +118,17 @@ public class RunTestsViaEcj extends AbstractRunTests {
String source = readFile(file);
char[] sourceArray = source.toCharArray();
- final ICompilationUnit sourceUnit = new TestCompilationUnit(file.getName(), source);
+ final ICompilationUnit sourceUnit;
+ try {
+ if (eclipseAvailable()) {
+ sourceUnit = new TestCompilationUnitEclipse(file.getName(), source);
+ } else {
+ sourceUnit = new TestCompilationUnitEcj(file.getName(), source);
+ }
+ } catch (Throwable t) {
+ t.printStackTrace();
+ return false;
+ }
Compiler ecjCompiler = new Compiler(createFileSystem(file, minVersion), ecjErrorHandlingPolicy(), ecjCompilerOptions(), bitbucketRequestor, new DefaultProblemFactory(Locale.ENGLISH)) {
@Override protected synchronized void addCompilationUnit(ICompilationUnit inUnit, CompilationUnitDeclaration parsedUnit) {
@@ -116,6 +137,8 @@ public class RunTestsViaEcj extends AbstractRunTests {
}
};
+ // initializeEclipseBundles();
+
ecjCompiler.compile(new ICompilationUnit[] {sourceUnit});
CompilationResult compilationResult = compilationResult_.get();
@@ -137,7 +160,37 @@ public class RunTestsViaEcj extends AbstractRunTests {
return true;
}
- private boolean eclipseAvailable() {
+ @SuppressWarnings("unused")
+ private static class EclipseInitializer {
+ static void initializeEclipseBundles() throws Exception {
+ // This code does not work yet, it's research-in-progress.
+ // The problem is that parts of the eclipse handler (in `PatchValEclipse` and friends) do not work unless
+ // an actual eclipse exists; PatchVal causes code to run that will end up running `ResourcesPlugin.getWorkspace()`, which
+ // goes down a rabbit hole of pinging off of various static fields (or `getX()` calls which return static fields), all
+ // of which are `null` until the plugin they belong to is properly initialized.
+ // This code is work in progress to 'hack' the initialization of each plugin one-by-one, but I doubt this is the right
+ // way to do it, as I bet it's fragile (will break when eclipse updates rather easily), and who knows how many fields
+ // and things need to be initialized.
+ // A better plan would be to start an actual, real eclipse, by telling `EclipseStarter.startup` to launch some sort of
+ // application (or at least a bunch of bundles/products/apps, including the JDT). This will then take long enough that
+ // it'll need to be cached and re-used for each test or the Eclipse test run would take far too long.
+
+ BundleContext context = EclipseStarter.startup(new String[0], null);
+ RegistryFactory.setDefaultRegistryProvider(new IRegistryProvider() {
+ private final ExtensionRegistry REG = new ExtensionRegistry(null, null, null);
+ @Override public IExtensionRegistry getRegistry() {
+ return REG;
+ }
+ });
+ new Activator().start(context);
+ new PlatformActivator().start(context);
+ for (Bundle b : context.getBundles()) System.out.println("BUNDLE: " + b.getSymbolicName());
+ new ResourcesPlugin().start(context);
+ JavaModelManager.getJavaModelManager().startup();
+ }
+ }
+
+ static boolean eclipseAvailable() {
try {
Class.forName("org.eclipse.jdt.core.dom.CompilationUnit");
} catch (Throwable t) {
@@ -171,7 +224,7 @@ public class RunTestsViaEcj extends AbstractRunTests {
i.remove();
}
}
- if (new File("bin").exists()) classpath.add("bin");
+ if (new File("bin/main").exists()) classpath.add("bin/main");
classpath.add("dist/lombok.jar");
if (bootRuntimePath == null || bootRuntimePath.isEmpty()) throw new IllegalStateException("System property delombok.bootclasspath is not set; set it to the rt of java6 or java8");
classpath.add(bootRuntimePath);
@@ -184,11 +237,44 @@ public class RunTestsViaEcj extends AbstractRunTests {
return new FileSystem(classpath.toArray(new String[0]), new String[] {file.getAbsolutePath()}, "UTF-8");
}
- private static final class TestCompilationUnit extends org.eclipse.jdt.internal.core.CompilationUnit {
+ private static final class TestCompilationUnitEcj implements ICompilationUnit {
+ private final char[] name, source, mainTypeName;
+
+ TestCompilationUnitEcj(String name, String source) {
+ this.source = source.toCharArray();
+ this.name = name.toCharArray();
+
+ char[] fileNameCharArray = getFileName();
+ int start = CharOperation.lastIndexOf(File.separatorChar, fileNameCharArray) + 1;
+ int end = CharOperation.lastIndexOf('.', fileNameCharArray);
+ if (end == -1) {
+ end = fileNameCharArray.length;
+ }
+ mainTypeName = CharOperation.subarray(fileNameCharArray, start, end);
+ }
+
+ @Override public char[] getFileName() {
+ return name;
+ }
+
+ @Override public char[] getContents() {
+ return source;
+ }
+
+ @Override public char[] getMainTypeName() {
+ return mainTypeName;
+ }
+
+ @Override public char[][] getPackageName() {
+ return null;
+ }
+ }
+
+ private static final class TestCompilationUnitEclipse extends org.eclipse.jdt.internal.core.CompilationUnit {
private final char[] source;
private final char[] mainTypeName;
- private TestCompilationUnit(String name, String source) {
+ private TestCompilationUnitEclipse(String name, String source) {
super(null, name, null);
this.source = source.toCharArray();
diff --git a/test/pretty/resource/after/tryWithResourcesVarRef.java b/test/pretty/resource/after/TryWithResourcesVarRef.java
index 5117f706..5117f706 100644
--- a/test/pretty/resource/after/tryWithResourcesVarRef.java
+++ b/test/pretty/resource/after/TryWithResourcesVarRef.java
diff --git a/test/stubs/org/checkerframework/checker/calledmethods/qual/CalledMethods.java b/test/stubs/org/checkerframework/checker/calledmethods/qual/CalledMethods.java
new file mode 100644
index 00000000..514e8c6b
--- /dev/null
+++ b/test/stubs/org/checkerframework/checker/calledmethods/qual/CalledMethods.java
@@ -0,0 +1,17 @@
+package org.checkerframework.checker.calledmethods.qual;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+public @interface CalledMethods {
+ /**
+ * Methods that have been called, on any expression whose type is annotated.
+ *
+ * @return methods that have been called
+ */
+ public String[] value() default {};
+} \ No newline at end of file
diff --git a/test/stubs/org/checkerframework/checker/calledmethods/qual/NotCalledMethods.java b/test/stubs/org/checkerframework/checker/calledmethods/qual/NotCalledMethods.java
new file mode 100644
index 00000000..7a9ef37c
--- /dev/null
+++ b/test/stubs/org/checkerframework/checker/calledmethods/qual/NotCalledMethods.java
@@ -0,0 +1,17 @@
+package org.checkerframework.checker.calledmethods.qual;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+public @interface NotCalledMethods {
+ /**
+ * Methods that have been called, on any expression whose type is annotated.
+ *
+ * @return methods that have been called
+ */
+ public String[] value() default {};
+} \ No newline at end of file
diff --git a/test/stubs/org/checkerframework/common/aliasing/qual/Unique.java b/test/stubs/org/checkerframework/common/aliasing/qual/Unique.java
new file mode 100644
index 00000000..fe7acfca
--- /dev/null
+++ b/test/stubs/org/checkerframework/common/aliasing/qual/Unique.java
@@ -0,0 +1,12 @@
+package org.checkerframework.common.aliasing.qual;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+public @interface Unique {} \ No newline at end of file
diff --git a/test/stubs/org/checkerframework/common/returnsreceiver/qual/This.java b/test/stubs/org/checkerframework/common/returnsreceiver/qual/This.java
new file mode 100644
index 00000000..8ae1cd59
--- /dev/null
+++ b/test/stubs/org/checkerframework/common/returnsreceiver/qual/This.java
@@ -0,0 +1,12 @@
+package org.checkerframework.common.returnsreceiver.qual;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+@Inherited
+public @interface This {} \ No newline at end of file
diff --git a/test/stubs/org/checkerframework/dataflow/qual/Pure.java b/test/stubs/org/checkerframework/dataflow/qual/Pure.java
new file mode 100644
index 00000000..d9bb1bf4
--- /dev/null
+++ b/test/stubs/org/checkerframework/dataflow/qual/Pure.java
@@ -0,0 +1,12 @@
+package org.checkerframework.dataflow.qual;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+public @interface Pure {} \ No newline at end of file
diff --git a/test/stubs/org/checkerframework/dataflow/qual/SideEffectFree.java b/test/stubs/org/checkerframework/dataflow/qual/SideEffectFree.java
new file mode 100644
index 00000000..9c32d369
--- /dev/null
+++ b/test/stubs/org/checkerframework/dataflow/qual/SideEffectFree.java
@@ -0,0 +1,12 @@
+package org.checkerframework.dataflow.qual;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+public @interface SideEffectFree {} \ No newline at end of file
diff --git a/test/transform/resource/after-delombok/BuilderWithDeprecatedAnnOnly.java b/test/transform/resource/after-delombok/BuilderWithDeprecatedAnnOnly.java
new file mode 100644
index 00000000..f039c047
--- /dev/null
+++ b/test/transform/resource/after-delombok/BuilderWithDeprecatedAnnOnly.java
@@ -0,0 +1,104 @@
+import com.google.common.collect.ImmutableList;
+public class BuilderWithDeprecatedAnnOnly {
+ @Deprecated
+ int dep1;
+ @Deprecated
+ java.util.List<String> strings;
+ @Deprecated
+ ImmutableList<Integer> numbers;
+ @java.lang.SuppressWarnings("all")
+ BuilderWithDeprecatedAnnOnly(final int dep1, final java.util.List<String> strings, final ImmutableList<Integer> numbers) {
+ this.dep1 = dep1;
+ this.strings = strings;
+ this.numbers = numbers;
+ }
+ @java.lang.SuppressWarnings("all")
+ public static class BuilderWithDeprecatedAnnOnlyBuilder {
+ @java.lang.SuppressWarnings("all")
+ private int dep1;
+ @java.lang.SuppressWarnings("all")
+ private java.util.ArrayList<String> strings;
+ @java.lang.SuppressWarnings("all")
+ private com.google.common.collect.ImmutableList.Builder<Integer> numbers;
+ @java.lang.SuppressWarnings("all")
+ BuilderWithDeprecatedAnnOnlyBuilder() {
+ }
+ @java.lang.Deprecated
+ @java.lang.SuppressWarnings("all")
+ public BuilderWithDeprecatedAnnOnly.BuilderWithDeprecatedAnnOnlyBuilder dep1(final int dep1) {
+ this.dep1 = dep1;
+ return this;
+ }
+ @java.lang.Deprecated
+ @java.lang.SuppressWarnings("all")
+ public BuilderWithDeprecatedAnnOnly.BuilderWithDeprecatedAnnOnlyBuilder string(final String string) {
+ if (this.strings == null) this.strings = new java.util.ArrayList<String>();
+ this.strings.add(string);
+ return this;
+ }
+ @java.lang.Deprecated
+ @java.lang.SuppressWarnings("all")
+ public BuilderWithDeprecatedAnnOnly.BuilderWithDeprecatedAnnOnlyBuilder strings(final java.util.Collection<? extends String> strings) {
+ if (strings == null) {
+ throw new java.lang.NullPointerException("strings cannot be null");
+ }
+ if (this.strings == null) this.strings = new java.util.ArrayList<String>();
+ this.strings.addAll(strings);
+ return this;
+ }
+ @java.lang.Deprecated
+ @java.lang.SuppressWarnings("all")
+ public BuilderWithDeprecatedAnnOnly.BuilderWithDeprecatedAnnOnlyBuilder clearStrings() {
+ if (this.strings != null) this.strings.clear();
+ return this;
+ }
+ @java.lang.Deprecated
+ @java.lang.SuppressWarnings("all")
+ public BuilderWithDeprecatedAnnOnly.BuilderWithDeprecatedAnnOnlyBuilder number(final Integer number) {
+ if (this.numbers == null) this.numbers = com.google.common.collect.ImmutableList.builder();
+ this.numbers.add(number);
+ return this;
+ }
+ @java.lang.Deprecated
+ @java.lang.SuppressWarnings("all")
+ public BuilderWithDeprecatedAnnOnly.BuilderWithDeprecatedAnnOnlyBuilder numbers(final java.lang.Iterable<? extends Integer> numbers) {
+ if (numbers == null) {
+ throw new java.lang.NullPointerException("numbers cannot be null");
+ }
+ if (this.numbers == null) this.numbers = com.google.common.collect.ImmutableList.builder();
+ this.numbers.addAll(numbers);
+ return this;
+ }
+ @java.lang.Deprecated
+ @java.lang.SuppressWarnings("all")
+ public BuilderWithDeprecatedAnnOnly.BuilderWithDeprecatedAnnOnlyBuilder clearNumbers() {
+ this.numbers = null;
+ return this;
+ }
+ @java.lang.SuppressWarnings("all")
+ public BuilderWithDeprecatedAnnOnly build() {
+ java.util.List<String> strings;
+ switch (this.strings