diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/PackagePartClassUtils.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/PackagePartClassUtils.kt index 0eb666739a1..3fb0acb4f4d 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/PackagePartClassUtils.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/PackagePartClassUtils.kt @@ -56,9 +56,9 @@ import java.util.* @TestOnly public @jvmStatic fun getDefaultPartFqName(facadeClassFqName: FqName, file: VirtualFile): FqName = - getDefaultPartFqNameForFilePath(facadeClassFqName.parent(), file.name) + getPackagePartFqName(facadeClassFqName.parent(), file.name) - private @jvmStatic fun getDefaultPartFqNameForFilePath(packageFqName: FqName, fileName: String): FqName { + public @jvmStatic fun getPackagePartFqName(packageFqName: FqName, fileName: String): FqName { val partClassName = getPartClassName(FileUtil.getNameWithoutExtension(fileName)) return packageFqName.child(Name.identifier(partClassName)) } @@ -73,7 +73,8 @@ import java.util.* JvmClassName.byFqNameWithoutInnerClasses(getPackagePartFqName(file)).internalName public @jvmStatic fun getPackagePartFqName(file: JetFile): FqName = - getDefaultPartFqNameForFilePath(file.packageFqName, file.name) + getPackagePartFqName(file.packageFqName, file.name) + public @jvmStatic fun getPackagePartFqName(callable: DeserializedCallableMemberDescriptor): FqName { val implClassName = callable.nameResolver.getName(callable.proto.getExtension(JvmProtoBuf.implClassName)) diff --git a/compiler/testData/cli/jvm/help.out b/compiler/testData/cli/jvm/help.out index 9761134ea11..251552b82c0 100644 --- a/compiler/testData/cli/jvm/help.out +++ b/compiler/testData/cli/jvm/help.out @@ -10,6 +10,7 @@ where possible options include: -module Path to the module file to compile -script Evaluate the script file -kotlin-home Path to Kotlin compiler home directory, used for annotations and runtime libraries discovery + -module-name Module name -nowarn Generate no warnings -verbose Enable verbose logging output -version Display compiler version diff --git a/compiler/testData/cli/jvm/wrongArgument.out b/compiler/testData/cli/jvm/wrongArgument.out index 3ffa78c3259..c18093498aa 100644 --- a/compiler/testData/cli/jvm/wrongArgument.out +++ b/compiler/testData/cli/jvm/wrongArgument.out @@ -11,6 +11,7 @@ where possible options include: -module Path to the module file to compile -script Evaluate the script file -kotlin-home Path to Kotlin compiler home directory, used for annotations and runtime libraries discovery + -module-name Module name -nowarn Generate no warnings -verbose Enable verbose logging output -version Display compiler version diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/KotlinPackageAnnotationTest.java b/compiler/tests/org/jetbrains/kotlin/codegen/KotlinPackageAnnotationTest.java index 0c8ae032fb1..8f714c11f14 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/KotlinPackageAnnotationTest.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/KotlinPackageAnnotationTest.java @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.codegen; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.load.java.JvmAnnotationNames; import org.jetbrains.kotlin.load.kotlin.PackageClassUtils; +import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.serialization.PackageData; import org.jetbrains.kotlin.serialization.ProtoBuf; @@ -41,7 +42,7 @@ public class KotlinPackageAnnotationTest extends CodegenTestCase { createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY); } - public void testPackageKotlinInfo() throws Exception { + public void testOldPackageKotlinInfo() throws Exception { loadText("package " + PACKAGE_NAME + "\n" + "\n" + "fun foo() = 42\n" + @@ -62,6 +63,31 @@ public class KotlinPackageAnnotationTest extends CodegenTestCase { assertNotNull(data); PackageData packageData = JvmProtoBufUtil.readPackageDataFrom(data); + Set callableNames = collectCallableNames(packageData.getPackageProto().getMemberList(), packageData.getNameResolver()); + assertEmpty(callableNames); + } + + public void testPackagePartKotlinInfo() throws Exception { + loadText("package " + PACKAGE_NAME + "\n" + + "\n" + + "fun foo() = 42\n" + + "val bar = 239\n" + + "\n" + + "class A\n" + + "class B\n" + + "object C\n"); + Class aClass = generateClass(PackagePartClassUtils.getPackagePartFqName(PACKAGE_NAME, DEFAULT_TEST_FILE_NAME).asString()); + + Class annotationClass = loadAnnotationClassQuietly(JvmAnnotationNames.KOTLIN_FILE_FACADE.asString()); + assertTrue(aClass.isAnnotationPresent(annotationClass)); + assertTrue(aClass.isAnnotationPresent(annotationClass)); + + Annotation kotlinPackage = aClass.getAnnotation(annotationClass); + + String[] data = (String[]) CodegenTestUtil.getAnnotationAttribute(kotlinPackage, "data"); + assertNotNull(data); + PackageData packageData = JvmProtoBufUtil.readPackageDataFrom(data); + Set callableNames = collectCallableNames(packageData.getPackageProto().getMemberList(), packageData.getNameResolver()); assertSameElements(callableNames, Arrays.asList("foo", "bar")); } diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/KotlinSyntheticClassAnnotationTest.java b/compiler/tests/org/jetbrains/kotlin/codegen/KotlinSyntheticClassAnnotationTest.java index 796b669ef1b..4257e6b8a81 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/KotlinSyntheticClassAnnotationTest.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/KotlinSyntheticClassAnnotationTest.java @@ -48,14 +48,6 @@ public class KotlinSyntheticClassAnnotationTest extends CodegenTestCase { createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.ALL); } - public void testPackagePart() { - doTestKotlinSyntheticClass( - "fun foo() = 42", - KotlinPackage.capitalize(DEFAULT_TEST_FILE_NAME), - PACKAGE_PART - ); - } - public void testTraitImpl() { doTestKotlinSyntheticClass( "trait A { fun foo() = 42 }", diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractSdkAnnotationsValidityTest.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractSdkAnnotationsValidityTest.java index 23419354766..ff9e2d86363 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractSdkAnnotationsValidityTest.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractSdkAnnotationsValidityTest.java @@ -79,8 +79,7 @@ public abstract class AbstractSdkAnnotationsValidityTest extends UsefulTestCase BindingTrace trace = new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(); ModuleDescriptor module = LazyResolveTestUtil.resolve( - commonEnvironment.getProject(), trace, Collections.emptyList(), - new JvmPackageMappingProvider(commonEnvironment) + commonEnvironment.getProject(), trace, Collections.emptyList(), commonEnvironment ); AlternativeSignatureErrorFindingVisitor visitor = diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/KotlinClassFinderTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/KotlinClassFinderTest.kt index f0975b16a4c..d6b07aa5177 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/KotlinClassFinderTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/KotlinClassFinderTest.kt @@ -73,7 +73,7 @@ public class KotlinClassFinderTest : KotlinTestWithEnvironmentManagement() { EnvironmentConfigFiles.JVM_CONFIG_FILES) // Activate Kotlin light class finder - LazyResolveTestUtil.resolveProject(environment.project) + LazyResolveTestUtil.resolveProject(environment.project, environment) return environment } diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadDescriptorUtil.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadDescriptorUtil.java index c37f03bd13b..794dc4c5d9d 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadDescriptorUtil.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadDescriptorUtil.java @@ -104,7 +104,7 @@ public final class LoadDescriptorUtil { BindingTrace trace = new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(); ModuleDescriptor module = LazyResolveTestUtil - .resolve(environment.getProject(), trace, Collections.emptyList(), new JvmPackageMappingProvider(environment)); + .resolve(environment.getProject(), trace, Collections.emptyList(), environment); PackageViewDescriptor packageView = module.getPackage(TEST_PACKAGE_FQNAME); return Pair.create(packageView, trace.getBindingContext()); diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/longTest/ResolveDescriptorsFromExternalLibraries.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/longTest/ResolveDescriptorsFromExternalLibraries.java index 06a9639b0e9..e42a53bf0d9 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/longTest/ResolveDescriptorsFromExternalLibraries.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/longTest/ResolveDescriptorsFromExternalLibraries.java @@ -178,7 +178,7 @@ public class ResolveDescriptorsFromExternalLibraries { } } - ModuleDescriptor module = LazyResolveTestUtil.resolveProject(jetCoreEnvironment.getProject()); + ModuleDescriptor module = LazyResolveTestUtil.resolveProject(jetCoreEnvironment.getProject(), jetCoreEnvironment); boolean hasErrors; try { diff --git a/compiler/tests/org/jetbrains/kotlin/resolve/AbstractResolveTest.java b/compiler/tests/org/jetbrains/kotlin/resolve/AbstractResolveTest.java index 38e2a51a9d3..44c94dfffff 100644 --- a/compiler/tests/org/jetbrains/kotlin/resolve/AbstractResolveTest.java +++ b/compiler/tests/org/jetbrains/kotlin/resolve/AbstractResolveTest.java @@ -26,8 +26,8 @@ public abstract class AbstractResolveTest extends ExtensibleResolveTestCase { Project project = getProject(); return new ExpectedResolveData( - JetExpectedResolveDataUtil.prepareDefaultNameToDescriptors(project), - JetExpectedResolveDataUtil.prepareDefaultNameToDeclaration(project) + JetExpectedResolveDataUtil.prepareDefaultNameToDescriptors(project, getEnvironment()), + JetExpectedResolveDataUtil.prepareDefaultNameToDeclaration(project, getEnvironment()) ) { @Override protected JetFile createJetFile(String fileName, String text) { diff --git a/compiler/tests/org/jetbrains/kotlin/resolve/JetExpectedResolveDataUtil.java b/compiler/tests/org/jetbrains/kotlin/resolve/JetExpectedResolveDataUtil.java index 05e2b1a5323..3fcd726a4c5 100644 --- a/compiler/tests/org/jetbrains/kotlin/resolve/JetExpectedResolveDataUtil.java +++ b/compiler/tests/org/jetbrains/kotlin/resolve/JetExpectedResolveDataUtil.java @@ -20,6 +20,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.builtins.KotlinBuiltIns; +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl; import org.jetbrains.kotlin.incremental.components.NoLookupLocation; @@ -50,7 +51,7 @@ public class JetExpectedResolveDataUtil { private JetExpectedResolveDataUtil() { } - public static Map prepareDefaultNameToDescriptors(Project project) { + public static Map prepareDefaultNameToDescriptors(Project project, KotlinCoreEnvironment environment) { KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance(); Map nameToDescriptor = new HashMap(); @@ -65,25 +66,25 @@ public class JetExpectedResolveDataUtil { return nameToDescriptor; } - public static Map prepareDefaultNameToDeclaration(Project project) { + public static Map prepareDefaultNameToDeclaration(Project project, KotlinCoreEnvironment environment) { Map nameToDeclaration = new HashMap(); - PsiClass java_util_Collections = findClass("java.util.Collections", project); + PsiClass java_util_Collections = findClass("java.util.Collections", project, environment); nameToDeclaration.put("java::java.util.Collections.emptyList()", findMethod(java_util_Collections, "emptyList")); nameToDeclaration.put("java::java.util.Collections", java_util_Collections); - PsiClass java_util_List = findClass("java.util.ArrayList", project); - nameToDeclaration.put("java::java.util.List", findClass("java.util.List", project)); + PsiClass java_util_List = findClass("java.util.ArrayList", project, environment); + nameToDeclaration.put("java::java.util.List", findClass("java.util.List", project, environment)); nameToDeclaration.put("java::java.util.ArrayList", java_util_List); nameToDeclaration.put("java::java.util.ArrayList.set()", java_util_List.findMethodsByName("set", true)[0]); nameToDeclaration.put("java::java.util.ArrayList.get()", java_util_List.findMethodsByName("get", true)[0]); nameToDeclaration.put("java::java", findPackage("java", project)); nameToDeclaration.put("java::java.util", findPackage("java.util", project)); nameToDeclaration.put("java::java.lang", findPackage("java.lang", project)); - nameToDeclaration.put("java::java.lang.Object", findClass("java.lang.Object", project)); - nameToDeclaration.put("java::java.lang.Comparable", findClass("java.lang.Comparable", project)); - PsiClass java_lang_System = findClass("java.lang.System", project); + nameToDeclaration.put("java::java.lang.Object", findClass("java.lang.Object", project, environment)); + nameToDeclaration.put("java::java.lang.Comparable", findClass("java.lang.Comparable", project, environment)); + PsiClass java_lang_System = findClass("java.lang.System", project, environment); nameToDeclaration.put("java::java.lang.System", java_lang_System); - PsiMethod[] methods = findClass("java.io.PrintStream", project).findMethodsByName("print", true); + PsiMethod[] methods = findClass("java.io.PrintStream", project, environment).findMethodsByName("print", true); nameToDeclaration.put("java::java.io.PrintStream.print(Object)", methods[8]); nameToDeclaration.put("java::java.io.PrintStream.print(Int)", methods[2]); nameToDeclaration.put("java::java.io.PrintStream.print(char[])", methods[6]); @@ -91,7 +92,7 @@ public class JetExpectedResolveDataUtil { PsiField outField = java_lang_System.findFieldByName("out", true); assertNotNull("'out' property wasn't found", outField); nameToDeclaration.put("java::java.lang.System.out", outField); - PsiClass java_lang_Number = findClass("java.lang.Number", project); + PsiClass java_lang_Number = findClass("java.lang.Number", project, environment); nameToDeclaration.put("java::java.lang.Number", java_lang_Number); nameToDeclaration.put("java::java.lang.Number.intValue()", java_lang_Number.findMethodsByName("intValue", true)[0]); @@ -113,8 +114,8 @@ public class JetExpectedResolveDataUtil { } @NotNull - private static PsiClass findClass(String qualifiedName, Project project) { - ModuleDescriptor module = LazyResolveTestUtil.resolveProject(project); + private static PsiClass findClass(String qualifiedName, Project project, KotlinCoreEnvironment environment) { + ModuleDescriptor module = LazyResolveTestUtil.resolveProject(project, environment); ClassDescriptor classDescriptor = DescriptorUtilPackage.resolveTopLevelClass(module, new FqName(qualifiedName), NoLookupLocation.FROM_TEST); assertNotNull("Class descriptor wasn't resolved: " + qualifiedName, classDescriptor); PsiClass psiClass = (PsiClass) DescriptorToSourceUtils.getSourceFromDescriptor(classDescriptor); diff --git a/compiler/tests/org/jetbrains/kotlin/resolve/lazy/LazyResolveTestUtil.java b/compiler/tests/org/jetbrains/kotlin/resolve/lazy/LazyResolveTestUtil.java index 14ad834060e..6094d4039cf 100644 --- a/compiler/tests/org/jetbrains/kotlin/resolve/lazy/LazyResolveTestUtil.java +++ b/compiler/tests/org/jetbrains/kotlin/resolve/lazy/LazyResolveTestUtil.java @@ -42,13 +42,13 @@ public class LazyResolveTestUtil { } @NotNull - public static ModuleDescriptor resolveProject(@NotNull Project project) { - return resolve(project, Collections.emptyList()); + public static ModuleDescriptor resolveProject(@NotNull Project project, @NotNull KotlinCoreEnvironment environment) { + return resolve(project, Collections.emptyList(), environment); } @NotNull - public static ModuleDescriptor resolve(@NotNull Project project, @NotNull List sourceFiles) { - return resolve(project, new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(), sourceFiles, PackageMappingProvider.EMPTY); + public static ModuleDescriptor resolve(@NotNull Project project, @NotNull List sourceFiles, @NotNull KotlinCoreEnvironment environment) { + return resolve(project, new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(), sourceFiles, environment); } @NotNull @@ -56,13 +56,13 @@ public class LazyResolveTestUtil { @NotNull Project project, @NotNull BindingTrace trace, @NotNull List sourceFiles, - @NotNull PackageMappingProvider packageMappingProvider + @NotNull KotlinCoreEnvironment environment ) { ModuleContext moduleContext = TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(project, "test"); TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegrationNoIncremental( moduleContext, sourceFiles, trace, TopDownAnalysisMode.TopLevelDeclarations, - packageMappingProvider + new JvmPackageMappingProvider(environment) ); return moduleContext.getModule(); diff --git a/compiler/tests/org/jetbrains/kotlin/test/JetTestUtils.java b/compiler/tests/org/jetbrains/kotlin/test/JetTestUtils.java index 6fa014303eb..8a3d3c9a494 100644 --- a/compiler/tests/org/jetbrains/kotlin/test/JetTestUtils.java +++ b/compiler/tests/org/jetbrains/kotlin/test/JetTestUtils.java @@ -505,7 +505,7 @@ public class JetTestUtils { } } } - LazyResolveTestUtil.resolve(environment.getProject(), jetFiles); + LazyResolveTestUtil.resolve(environment.getProject(), jetFiles, environment); } public static void assertEqualsToFile(@NotNull File expectedFile, @NotNull String actual) { diff --git a/compiler/tests/org/jetbrains/kotlin/types/JetTypeCheckerTest.java b/compiler/tests/org/jetbrains/kotlin/types/JetTypeCheckerTest.java index 18b3305ea36..39ffa78e8b4 100644 --- a/compiler/tests/org/jetbrains/kotlin/types/JetTypeCheckerTest.java +++ b/compiler/tests/org/jetbrains/kotlin/types/JetTypeCheckerTest.java @@ -599,7 +599,8 @@ public class JetTypeCheckerTest extends JetLiteFixture { private JetScope getDeclarationsScope(String path) throws IOException { ModuleDescriptor moduleDescriptor = LazyResolveTestUtil.resolve( getProject(), - Collections.singletonList(JetTestUtils.loadJetFile(getProject(), new File(path))) + Collections.singletonList(JetTestUtils.loadJetFile(getProject(), new File(path))), + getEnvironment() ); FqName fqName = new FqName("testData"); @@ -616,7 +617,7 @@ public class JetTypeCheckerTest extends JetLiteFixture { List scopeChain = new ArrayList(); scopeChain.add(writableScope); - ModuleDescriptor module = LazyResolveTestUtil.resolveProject(getProject()); + ModuleDescriptor module = LazyResolveTestUtil.resolveProject(getProject(), getEnvironment()); for (ImportPath defaultImport : module.getDefaultImports()) { FqName fqName = defaultImport.fqnPart(); if (defaultImport.isAllUnder()) {