Add annotation for parameter name in signatures

This commit is contained in:
e5l
2017-08-11 16:45:48 +03:00
committed by Leonid Stashevsky
parent 8201ff3006
commit 62e87c873c
37 changed files with 766 additions and 18 deletions
@@ -24,6 +24,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime;
import org.jetbrains.kotlin.config.CompilerConfiguration;
import org.jetbrains.kotlin.config.ContentRootsKt;
import org.jetbrains.kotlin.config.JVMConfigurationKeys;
@@ -35,10 +36,7 @@ import org.jetbrains.kotlin.test.TestJdkKind;
import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase;
import java.io.File;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
public abstract class KotlinMultiFileTestWithJava<M, F> extends KtUsefulTestCase {
protected File javaFilesDir;
@@ -78,7 +76,7 @@ public abstract class KotlinMultiFileTestWithJava<M, F> extends KtUsefulTestCase
CompilerConfiguration configuration = KotlinTestUtils.newConfiguration(
getConfigurationKind(),
getTestJdkKind(file),
CollectionsKt.plus(Collections.singletonList(KotlinTestUtils.getAnnotationsJar()), getExtraClasspath()),
getClasspath(file),
isJavaSourceRootNeeded() ? Collections.singletonList(javaFilesDir) : Collections.emptyList()
);
configuration.add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, StandardScriptDefinition.INSTANCE);
@@ -110,6 +108,22 @@ public abstract class KotlinMultiFileTestWithJava<M, F> extends KtUsefulTestCase
: TestJdkKind.MOCK_JDK;
}
private List<File> getClasspath(File file) {
List<File> result = new ArrayList<>();
result.add(KotlinTestUtils.getAnnotationsJar());
result.addAll(getExtraClasspath());
boolean loadAndroidAnnotations = InTextDirectivesUtils.isDirectiveDefined(
FilesKt.readText(file, Charsets.UTF_8), "ANDROID_ANNOTATIONS"
);
if (loadAndroidAnnotations) {
result.add(ForTestCompileRuntime.androidAnnotationsForTests());
}
return result;
}
@NotNull
protected List<File> getExtraClasspath() {
return Collections.emptyList();
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys;
import org.jetbrains.kotlin.cli.common.output.outputUtils.OutputUtilsKt;
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
import org.jetbrains.kotlin.cli.jvm.config.JvmContentRootsKt;
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime;
import org.jetbrains.kotlin.config.*;
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
@@ -555,12 +556,21 @@ public abstract class CodegenTestCase extends KtUsefulTestCase {
@Nullable File javaSourceDir
) {
configurationKind = extractConfigurationKind(files);
boolean loadAndroidAnnotations = files.stream().anyMatch(it ->
InTextDirectivesUtils.isDirectiveDefined(it.content, "ANDROID_ANNOTATIONS")
);
List<String> javacOptions = extractJavacOptions(files);
List<File> classpath = new ArrayList<>();
classpath.add(getAnnotationsJar());
if (loadAndroidAnnotations) {
classpath.add(ForTestCompileRuntime.androidAnnotationsForTests());
}
CompilerConfiguration configuration = createConfiguration(
configurationKind, getJdkKind(files),
Collections.singletonList(getAnnotationsJar()),
classpath,
ArraysKt.filterNotNull(new File[] {javaSourceDir}),
files
);
@@ -586,8 +596,15 @@ public abstract class CodegenTestCase extends KtUsefulTestCase {
OutputUtilsKt.writeAllTo(classFileFactory, kotlinOut);
List<String> javaClasspath = new ArrayList<>();
javaClasspath.add(kotlinOut.getPath());
if (loadAndroidAnnotations) {
javaClasspath.add(ForTestCompileRuntime.androidAnnotationsForTests().getPath());
}
javaClassesOutputDirectory = CodegenTestUtil.compileJava(
findJavaSourcesInDirectory(javaSourceDir), Collections.singletonList(kotlinOut.getPath()), javacOptions
findJavaSourcesInDirectory(javaSourceDir), javaClasspath, javacOptions
);
}
}
@@ -76,6 +76,11 @@ public class ForTestCompileRuntime {
return assertExists(new File("dist/kotlinc/lib/kotlin-annotations-jvm.jar"));
}
@NotNull
public static File androidAnnotationsForTests() {
return assertExists(new File("dist/kotlinc/lib/android-annotations.jar"));
}
// TODO: Do not use these classes, remove them after stdlib tests are merged in the same build as the compiler
@NotNull
@Deprecated
@@ -19,7 +19,11 @@ package org.jetbrains.kotlin.jvm.compiler;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.util.text.StringKt;
import kotlin.collections.CollectionsKt;
import kotlin.io.FilesKt;
import kotlin.sequences.SequencesKt;
import kotlin.text.Charsets;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.analyzer.AnalysisResult;
import org.jetbrains.kotlin.cli.common.output.outputUtils.OutputUtilsKt;
@@ -39,6 +43,7 @@ import org.jetbrains.kotlin.psi.KtFile;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil;
import org.jetbrains.kotlin.test.ConfigurationKind;
import org.jetbrains.kotlin.test.InTextDirectivesUtils;
import org.jetbrains.kotlin.test.KotlinTestUtils;
import org.jetbrains.kotlin.test.TestJdkKind;
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
@@ -49,6 +54,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
public class LoadDescriptorUtil {
@NotNull
@@ -103,10 +109,21 @@ public class LoadDescriptorUtil {
}
public static void compileJavaWithAnnotationsJar(@NotNull Collection<File> javaFiles, @NotNull File outDir) throws IOException {
String classPath = ForTestCompileRuntime.runtimeJarForTests() + File.pathSeparator +
KotlinTestUtils.getAnnotationsJar().getPath();
List<File> classpath = new ArrayList<>();
classpath.add(ForTestCompileRuntime.runtimeJarForTests());
classpath.add(KotlinTestUtils.getAnnotationsJar());
for (File test: javaFiles) {
String content = FilesKt.readText(test, Charsets.UTF_8);
if (InTextDirectivesUtils.isDirectiveDefined(content, "ANDROID_ANNOTATIONS")) {
classpath.add(ForTestCompileRuntime.androidAnnotationsForTests());
}
}
KotlinTestUtils.compileJavaFiles(javaFiles, Arrays.asList(
"-classpath", classPath,
"-classpath", classpath.stream().map(File::getPath).collect(Collectors.joining(File.pathSeparator)),
"-sourcepath", "compiler/testData/loadJava/include",
"-d", outDir.getPath()
));