Use instance methods instead of JetPsiUtil for getting fq names

Remove unnecessary usages of JetFile#getPackageDirective where only FqName is needed
Make JetFile#getPackageFqName not nullable to avoid confusion on call sites
Remove getPackageName usages
Move getFqName(JetNamedDeclaration) to a separate util class
This commit is contained in:
Pavel V. Talanov
2014-03-18 19:52:03 +04:00
parent 37538f9524
commit a1dbf221b3
53 changed files with 197 additions and 229 deletions
@@ -21,7 +21,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.asm4.Type;
import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.psi.JetScript;
import org.jetbrains.jet.lang.resolve.ScriptNameUtil;
import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -50,7 +49,7 @@ public class KotlinCodegenFacade {
MultiMap<FqName, JetFile> packageFqNameToFiles = new MultiMap<FqName, JetFile>();
for (JetFile file : state.getFiles()) {
if (file == null) throw new IllegalArgumentException("A null file given for compilation");
packageFqNameToFiles.putValue(JetPsiUtil.getFQName(file), file);
packageFqNameToFiles.putValue(file.getPackageFqName(), file);
}
for (Map.Entry<FqName, Collection<JetFile>> entry : packageFqNameToFiles.entrySet()) {
@@ -247,14 +247,14 @@ public class PackageCodegen extends GenerationStateAware {
private static void checkAllFilesHaveSamePackage(Collection<JetFile> packageFiles) {
FqName commonFqName = null;
for (JetFile file : packageFiles) {
FqName fqName = JetPsiUtil.getFQName(file);
FqName fqName = file.getPackageFqName();
if (commonFqName != null) {
if (!commonFqName.equals(fqName)) {
throw new IllegalArgumentException("All files should have same package name");
}
}
else {
commonFqName = JetPsiUtil.getFQName(file);
commonFqName = file.getPackageFqName();
}
}
}
@@ -283,7 +283,7 @@ public class PackageCodegen extends GenerationStateAware {
@NotNull
public static String getPackagePartInternalName(@NotNull JetFile file) {
FqName packageFqName = JetPsiUtil.getFQName(file);
FqName packageFqName = file.getPackageFqName();
return getPackagePartType(getPackageClassFqName(packageFqName), file.getVirtualFile()).getInternalName();
}
}
@@ -62,7 +62,7 @@ public class PackagePartCodegen extends MemberCodegen {
this.packagePartName = packagePartName;
this.context = context;
descriptor = state.getBindingContext().get(BindingContext.FILE_TO_PACKAGE_FRAGMENT, jetFile);
assert descriptor != null : "No package fragment found for jetFile " + jetFile + " declared package: " + jetFile.getPackageName();
assert descriptor != null : "No package fragment found for jetFile " + jetFile + " declared package: " + jetFile.getPackageFqName();
}
public void generate() {
@@ -26,7 +26,6 @@ import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
@@ -136,7 +135,7 @@ public class SamWrapperCodegen extends ParentCodegenAwareImpl {
}
private String getWrapperName(@NotNull JetFile containingFile) {
FqName packageClassFqName = PackageClassUtils.getPackageClassFqName(JetPsiUtil.getFQName(containingFile));
FqName packageClassFqName = PackageClassUtils.getPackageClassFqName(containingFile.getPackageFqName());
String packageInternalName = JvmClassName.byFqNameWithoutInnerClasses(packageClassFqName).getInternalName();
return packageInternalName + "$sam$" + samInterface.getName().asString() + "$" +
Integer.toHexString(CodegenUtil.getPathHashCode(containingFile.getVirtualFile()) * 31 + DescriptorUtils.getFqNameSafe(
@@ -148,7 +148,7 @@ class CodegenAnnotatingVisitor extends JetVisitorVoid {
nameStack.push(asmTypeForScriptPsi(bindingContext, file.getScript()).getInternalName());
}
else {
nameStack.push(JvmClassName.byFqNameWithoutInnerClasses(JetPsiUtil.getFQName(file)).getInternalName());
nameStack.push(JvmClassName.byFqNameWithoutInnerClasses(file.getPackageFqName()).getInternalName());
}
file.acceptChildren(this);
nameStack.pop();
@@ -237,7 +237,7 @@ public class CodegenBinding {
HashSet<FqName> names = new HashSet<FqName>();
for (JetFile file : files) {
if (!file.isScript()) {
names.add(JetPsiUtil.getFQName(file));
names.add(file.getPackageFqName());
}
}
@@ -80,18 +80,15 @@ public final class PsiCodegenPredictor {
}
}
else {
String packageName = ((JetFile) declaration.getContainingFile()).getPackageName();
if (packageName == null) {
return null;
}
FqName packageFqName = ((JetFile) declaration.getContainingFile()).getPackageFqName();
if (declaration instanceof JetNamedFunction) {
JvmClassName packageClass = JvmClassName.byFqNameWithoutInnerClasses(getPackageClassFqName(new FqName(packageName)));
JvmClassName packageClass = JvmClassName.byFqNameWithoutInnerClasses(getPackageClassFqName(packageFqName));
Name name = ((JetNamedFunction) declaration).getNameAsName();
return name == null ? null : packageClass.getInternalName() + "$" + name.asString();
}
parentInternalName = JvmClassName.byFqNameWithoutInnerClasses(packageName).getInternalName();
parentInternalName = JvmClassName.byFqNameWithoutInnerClasses(packageFqName).getInternalName();
}
if (declaration instanceof JetClassObject) {
@@ -82,8 +82,9 @@ public class BuiltInsSerializer(val out: PrintStream?) {
System.err.println("Could not make directories: " + destDir)
}
for (fqName in ContainerUtil.mapNotNull(files) { it?.getPackageName() }.toSet()) {
serializePackage(module, FqName(fqName), destDir)
files.map { it.getPackageFqName() }.toSet().forEach {
fqName ->
serializePackage(module, fqName, destDir)
}
out?.println("Total bytes written: $totalSize to $totalFiles files")
@@ -42,7 +42,6 @@ import org.jetbrains.jet.config.CommonConfigurationKeys;
import org.jetbrains.jet.config.CompilerConfiguration;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.ScriptNameUtil;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
@@ -170,7 +169,7 @@ public class KotlinToJVMBytecodeCompiler {
// more than one main
return null;
}
FqName fqName = JetPsiUtil.getFQName(file);
FqName fqName = file.getPackageFqName();
mainClass = PackageClassUtils.getPackageClassFqName(fqName);
}
}
@@ -48,7 +48,6 @@ import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.PackageLikeBuilderDummy;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.psi.JetScript;
import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
@@ -362,7 +361,7 @@ public class ReplInterpreter {
state.beforeCompile();
KotlinCodegenFacade.generatePackage(
state,
JetPsiUtil.getFQName((JetFile) script.getContainingFile()),
((JetFile) script.getContainingFile()).getPackageFqName(),
Collections.singleton((JetFile) script.getContainingFile()),
errorHandler);
}
@@ -25,7 +25,6 @@ import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.Function;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.resolve.name.FqName;
import java.util.Collection;
@@ -53,12 +52,12 @@ public abstract class JetFilesProvider {
private final FqName name;
public SameJetFilePredicate(JetFile file) {
this.name = JetPsiUtil.getFQName(file);
this.name = file.getPackageFqName();
}
@Override
public boolean apply(PsiFile psiFile) {
return JetPsiUtil.getFQName((JetFile) psiFile).equals(name);
return ((JetFile) psiFile).getPackageFqName().equals(name);
}
}
}
@@ -198,7 +198,7 @@ public class JetClass extends JetTypeParameterListOwnerStub<PsiJetClassStub> imp
}
PsiFile file = getContainingFile();
if (!(file instanceof JetFile)) return null;
String fileQualifiedName = ((JetFile) file).getPackageDirective().getQualifiedName();
String fileQualifiedName = ((JetFile) file).getPackageFqName().asString();
if (!fileQualifiedName.isEmpty()) {
parts.add(fileQualifiedName);
}
@@ -25,11 +25,11 @@ import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiClassOwner;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetNodeTypes;
import org.jetbrains.jet.lang.psi.stubs.PsiJetFileStub;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.plugin.JetFileType;
import org.jetbrains.jet.plugin.JetLanguage;
@@ -92,23 +92,32 @@ public class JetFile extends PsiFileBase implements JetDeclarationContainer, Jet
return null;
}
// scripts have no package directive
// scripts have no package directive, all other files must have package directives
@Nullable
public JetPackageDirective getPackageDirective() {
ASTNode ast = getNode().findChildByType(JetNodeTypes.PACKAGE_DIRECTIVE);
return ast != null ? (JetPackageDirective) ast.getPsi() : null;
}
@Deprecated // getPackageFqName should be used instead
@Override
@Nullable
@NotNull
public String getPackageName() {
return getPackageFqName().asString();
}
@NotNull
public FqName getPackageFqName() {
PsiJetFileStub stub = (PsiJetFileStub) getStub();
if (stub != null) {
return stub.getPackageName();
return stub.getPackageFqName();
}
JetPackageDirective directive = getPackageDirective();
return directive != null ? directive.getQualifiedName() : null;
JetPackageDirective packageDirective = getPackageDirective();
if (packageDirective == null) {
return FqName.ROOT;
}
return packageDirective.getFqName();
}
@NotNull
@@ -102,6 +102,6 @@ abstract class JetNamedDeclarationStub<T extends PsiJetStubWithFqName> extends J
if (stub != null) {
return stub.getFqName();
}
return JetPsiUtil.getFQName(this);
return JetNamedDeclarationUtil.getFQName(this);
}
}
@@ -0,0 +1,87 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.jet.lang.psi;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
import org.jetbrains.jet.lang.resolve.name.Name;
public final class JetNamedDeclarationUtil {
@Nullable
public static FqNameUnsafe getUnsafeFQName(@NotNull JetNamedDeclaration namedDeclaration) {
FqName fqName = namedDeclaration.getFqName();
return fqName != null ? fqName.toUnsafe() : null;
}
@Nullable
//NOTE: use JetNamedDeclaration#getFqName instead
/*package private*/ static FqName getFQName(@NotNull JetNamedDeclaration namedDeclaration) {
Name name = namedDeclaration.getNameAsName();
if (name == null) {
return null;
}
FqName parentFqName = getParentFqName(namedDeclaration);
if (parentFqName == null) {
return null;
}
return parentFqName.child(name);
}
@Nullable
public static FqName getParentFqName(@NotNull JetNamedDeclaration namedDeclaration) {
PsiElement parent = namedDeclaration.getParent();
if (parent instanceof JetClassBody) {
// One nesting to JetClassBody doesn't affect to qualified name
parent = parent.getParent();
}
if (parent instanceof JetFile) {
return ((JetFile) parent).getPackageFqName();
}
else if (parent instanceof JetNamedFunction || parent instanceof JetClass) {
return getFQName((JetNamedDeclaration) parent);
}
else if (namedDeclaration instanceof JetParameter) {
JetClass constructorClass = JetPsiUtil.getClassIfParameterIsProperty((JetParameter) namedDeclaration);
if (constructorClass != null) {
return getFQName(constructorClass);
}
}
else if (parent instanceof JetObjectDeclaration) {
if (parent.getParent() instanceof JetClassObject) {
JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(parent, JetClassOrObject.class);
if (classOrObject != null) {
return getFQName(classOrObject);
}
}
else {
return getFQName((JetNamedDeclaration) parent);
}
}
return null;
}
private JetNamedDeclarationUtil() {
}
}
@@ -21,7 +21,10 @@ import com.google.common.base.Predicate;
import com.google.common.collect.Lists;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.util.Condition;
import com.intellij.psi.*;
import com.intellij.psi.PsiComment;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiWhiteSpace;
import com.intellij.psi.impl.CheckUtil;
import com.intellij.psi.impl.source.codeStyle.CodeEditUtil;
import com.intellij.psi.tree.IElementType;
@@ -189,68 +192,6 @@ public class JetPsiUtil {
}
}
@NotNull
public static FqName getFQName(@NotNull JetFile file) {
JetPackageDirective directive = file.getPackageDirective();
return directive != null ? directive.getFqName() : FqName.ROOT;
}
@Nullable
public static FqNameUnsafe getUnsafeFQName(@NotNull JetNamedDeclaration namedDeclaration) {
FqName fqName = getFQName(namedDeclaration);
return fqName != null ? fqName.toUnsafe() : null;
}
@Nullable
public static FqName getFQName(@NotNull JetNamedDeclaration namedDeclaration) {
Name name = namedDeclaration.getNameAsName();
if (name == null) {
return null;
}
FqName parentFqName = getParentFqName(namedDeclaration);
if (parentFqName == null) {
return null;
}
return parentFqName.child(name);
}
@Nullable
public static FqName getParentFqName(@NotNull JetNamedDeclaration namedDeclaration) {
PsiElement parent = namedDeclaration.getParent();
if (parent instanceof JetClassBody) {
// One nesting to JetClassBody doesn't affect to qualified name
parent = parent.getParent();
}
if (parent instanceof JetFile) {
return getFQName((JetFile) parent);
}
else if (parent instanceof JetNamedFunction || parent instanceof JetClass) {
return getFQName((JetNamedDeclaration) parent);
}
else if (namedDeclaration instanceof JetParameter) {
JetClass constructorClass = getClassIfParameterIsProperty((JetParameter) namedDeclaration);
if (constructorClass != null) {
return getFQName(constructorClass);
}
}
else if (parent instanceof JetObjectDeclaration) {
if (parent.getParent() instanceof JetClassObject) {
JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(parent, JetClassOrObject.class);
if (classOrObject != null) {
return getFQName(classOrObject);
}
}
else {
return getFQName((JetNamedDeclaration) parent);
}
}
return null;
}
/** @return <code>null</code> iff the tye has syntactic errors */
@Nullable
public static FqName toQualifiedName(@NotNull JetUserType userType) {
@@ -889,21 +830,6 @@ public class JetPsiUtil {
return null;
}
public static NavigatablePsiElement getPackageReference(@NotNull JetFile file, int partIndex) {
JetPackageDirective directive = file.getPackageDirective();
if (directive == null) {
throw new IllegalArgumentException("Should be called only for files with package directive: " + file);
}
List<JetSimpleNameExpression> names = directive.getPackageNames();
if (!(0 <= partIndex && partIndex < names.size())) {
throw new IndexOutOfBoundsException(String.format("%s index for file with directive %s is out of range", partIndex,
directive.getText()));
}
return names.get(partIndex);
}
// Delete given element and all the elements separating it from the neighboring elements of the same class
public static void deleteElementWithDelimiters(@NotNull PsiElement element) {
PsiElement paramBefore = PsiTreeUtil.getPrevSiblingOfType(element, element.getClass());
@@ -17,9 +17,12 @@
package org.jetbrains.jet.lang.psi.stubs;
import com.intellij.psi.stubs.PsiFileStub;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.name.FqName;
public interface PsiJetFileStub extends PsiFileStub<JetFile> {
String getPackageName();
@NotNull
FqName getPackageFqName();
boolean isScript();
}
@@ -65,16 +65,16 @@ public class JetFileElementType extends IStubFileElementType<PsiJetFileStub> {
@Override
public void serialize(@NotNull PsiJetFileStub stub, @NotNull StubOutputStream dataStream)
throws IOException {
dataStream.writeName(stub.getPackageName());
dataStream.writeName(stub.getPackageFqName().asString());
dataStream.writeBoolean(stub.isScript());
}
@NotNull
@Override
public PsiJetFileStub deserialize(@NotNull StubInputStream dataStream, StubElement parentStub) throws IOException {
StringRef packName = dataStream.readName();
StringRef packageFqNameAsString = dataStream.readName();
boolean isScript = dataStream.readBoolean();
return new PsiJetFileStubImpl(null, packName, isScript);
return new PsiJetFileStubImpl(null, packageFqNameAsString, isScript);
}
@Override
@@ -31,6 +31,6 @@ public class JetFileStubBuilder extends DefaultStubBuilder {
}
JetFile jetFile = (JetFile) file;
return new PsiJetFileStubImpl(jetFile, jetFile.getPackageName(), jetFile.isScript());
return new PsiJetFileStubImpl(jetFile, jetFile.getPackageFqName().asString(), jetFile.isScript());
}
}
@@ -24,9 +24,11 @@ import com.intellij.psi.stubs.PsiFileStubImpl;
import com.intellij.psi.stubs.StubElement;
import com.intellij.psi.tree.IStubFileElementType;
import com.intellij.util.io.StringRef;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.stubs.PsiJetFileStub;
import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementTypes;
import org.jetbrains.jet.lang.resolve.name.FqName;
import java.util.List;
@@ -35,19 +37,20 @@ public class PsiJetFileStubImpl extends PsiFileStubImpl<JetFile> implements PsiJ
private final StringRef packageName;
private final boolean isScript;
public PsiJetFileStubImpl(JetFile jetFile, StringRef packageName, boolean isScript) {
public PsiJetFileStubImpl(JetFile jetFile, @NotNull StringRef packageName, boolean isScript) {
super(jetFile);
this.packageName = packageName;
this.isScript = isScript;
}
public PsiJetFileStubImpl(JetFile jetFile, String packageName, boolean isScript) {
public PsiJetFileStubImpl(JetFile jetFile, @NotNull String packageName, boolean isScript) {
this(jetFile, StringRef.fromString(packageName), isScript);
}
@Override
public String getPackageName() {
return StringRef.toString(packageName);
@NotNull
public FqName getPackageFqName() {
return new FqName(StringRef.toString(packageName));
}
@Override
@@ -62,15 +65,7 @@ public class PsiJetFileStubImpl extends PsiFileStubImpl<JetFile> implements PsiJ
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("PsiJetFileStubImpl[");
builder.append("package=").append(getPackageName());
builder.append("]");
return builder.toString();
return "PsiJetFileStubImpl[" + "package=" + getPackageFqName().asString() + "]";
}
@Override
@@ -76,7 +76,7 @@ public class ImportsResolver {
private void processImports(@NotNull TopDownAnalysisContext c, @NotNull LookupMode lookupMode) {
for (JetFile file : c.getFiles()) {
WritableScope fileScope = c.getFileScopes().get(file);
processImportsInFile(lookupMode, fileScope, Lists.newArrayList(file.getImportDirectives()), JetPsiUtil.getFQName(file).isRoot());
processImportsInFile(lookupMode, fileScope, Lists.newArrayList(file.getImportDirectives()), file.getPackageFqName().isRoot());
}
for (JetScript script : c.getScripts().keySet()) {
WritableScope scriptScope = c.getScriptScopes().get(script);
@@ -104,8 +104,7 @@ public class ScriptHeaderResolver {
public void processScriptHierarchy(@NotNull TopDownAnalysisContext c, @NotNull JetScript script, @NotNull JetScope outerScope) {
JetFile file = (JetFile) script.getContainingFile();
JetPackageDirective packageDirective = file.getPackageDirective();
FqName fqName = packageDirective != null ? new FqName(packageDirective.getQualifiedName()) : FqName.ROOT;
FqName fqName = file.getPackageFqName();
PackageFragmentDescriptor ns = packageFragmentProvider.getOrCreateFragment(fqName);
Integer priority = script.getUserData(PRIORITY_KEY);
@@ -154,7 +154,7 @@ public class TopDownAnalyzer {
private void registerTopLevelFqName(@NotNull JetNamedDeclaration declaration, @NotNull DeclarationDescriptor descriptor) {
if (DescriptorUtils.isTopLevelDeclaration(descriptor)) {
FqName fqName = JetPsiUtil.getFQName(declaration);
FqName fqName = declaration.getFqName();
if (fqName != null) {
topLevelFqNames.put(fqName, declaration);
}
@@ -190,7 +190,7 @@ public class TopDownAnalyzer {
DescriptorResolver.resolvePackageHeader(packageDirective, moduleDescriptor, trace);
registerDeclarations(file.getDeclarations());
topLevelFqNames.put(JetPsiUtil.getFQName(file), packageDirective);
topLevelFqNames.put(file.getPackageFqName(), packageDirective);
}
resolveAndCheckImports(file, resolveSession);
}
@@ -330,7 +330,7 @@ public class TopDownAnalyzer {
Set<FqName> scriptFqNames = Sets.newHashSet();
for (JetFile file : c.getFileScopes().keySet()) {
if (file.isScript()) {
scriptFqNames.add(JetPsiUtil.getFQName(file));
scriptFqNames.add(file.getPackageFqName());
}
}
for (MutablePackageFragmentDescriptor fragment : packageFragmentProvider.getAllFragments()) {
@@ -371,7 +371,7 @@ public class TypeHierarchyResolver {
createClassDescriptorForSingleton(declaration, JetPsiUtil.safeName(declaration.getName()), ClassKind.OBJECT);
owner.addClassifierDescriptor(descriptor);
trace.record(FQNAME_TO_CLASS_DESCRIPTOR, JetPsiUtil.getUnsafeFQName(declaration), descriptor);
trace.record(FQNAME_TO_CLASS_DESCRIPTOR, JetNamedDeclarationUtil.getUnsafeFQName(declaration), descriptor);
descriptor.getBuilder().setClassObjectDescriptor(createSyntheticClassObject(descriptor));
}
@@ -476,7 +476,7 @@ public class TypeHierarchyResolver {
MutableClassDescriptor mutableClassDescriptor = new MutableClassDescriptor(
containingDeclaration, outerScope, kind, isInner, JetPsiUtil.safeName(klass.getName()));
c.getClasses().put(klass, mutableClassDescriptor);
trace.record(FQNAME_TO_CLASS_DESCRIPTOR, JetPsiUtil.getUnsafeFQName(klass), mutableClassDescriptor);
trace.record(FQNAME_TO_CLASS_DESCRIPTOR, JetNamedDeclarationUtil.getUnsafeFQName(klass), mutableClassDescriptor);
createClassObjectForEnumClass(mutableClassDescriptor);
@@ -25,7 +25,7 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageViewDescriptor;
import org.jetbrains.jet.lang.psi.JetNamedDeclaration;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.psi.JetNamedDeclarationUtil;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.name.NamePackage;
@@ -154,7 +154,7 @@ public class ResolveSessionUtils {
@Nullable
public static FqName safeFqNameForLazyResolve(@NotNull JetNamedDeclaration declaration) {
//NOTE: should only create special names for package level declarations, so we can safely rely on real fq name for parent
FqName parentFqName = JetPsiUtil.getParentFqName(declaration);
FqName parentFqName = JetNamedDeclarationUtil.getParentFqName(declaration);
return parentFqName != null ? parentFqName.child(safeNameForLazyResolve(declaration)) : null;
}
}
@@ -73,7 +73,7 @@ public class ScopeProvider {
@NotNull
public JetScope getFileScope(@NotNull JetFile file) {
return new ChainedScope(resolveSession.getPackageFragment(JetPsiUtil.getFQName(file)),
return new ChainedScope(resolveSession.getPackageFragment(file.getPackageFqName()),
"File scope: " + file.getName(),
getFilePackageDescriptor(file).getMemberScope(),
JetModuleUtil.getSubpackagesOfRootScope(resolveSession.getModuleDescriptor()),
@@ -108,12 +108,7 @@ public class ScopeProvider {
@NotNull
private PackageViewDescriptor getFilePackageDescriptor(JetFile file) {
JetPackageDirective directive = file.getPackageDirective();
if (directive == null) {
throw new IllegalArgumentException("Scripts are not supported: " + file.getName());
}
FqName fqName = new FqName(directive.getQualifiedName());
FqName fqName = file.getPackageFqName();
PackageViewDescriptor packageDescriptor = resolveSession.getModuleDescriptor().getPackage(fqName);
if (packageDescriptor == null) {
@@ -61,8 +61,7 @@ public abstract class JetClassOrObjectInfo<E extends JetClassOrObject> implement
PsiFile file = element.getContainingFile();
if (file instanceof JetFile) {
JetFile jetFile = (JetFile) file;
JetPackageDirective directive = jetFile.getPackageDirective();
return directive != null ? directive.getFqName() : FqName.ROOT;
return jetFile.getPackageFqName();
}
throw new IllegalArgumentException("Not in a JetFile: " + element);
}
@@ -59,12 +59,7 @@ public class FileBasedDeclarationProviderFactory extends AbstractDeclarationProv
private static Index computeFilesByPackage(@NotNull Collection<JetFile> files) {
Index index = new Index();
for (JetFile file : files) {
JetPackageDirective directive = file.getPackageDirective();
if (directive == null) {
throw new IllegalArgumentException("Scripts are not supported");
}
FqName packageFqName = new FqName(directive.getQualifiedName());
FqName packageFqName = file.getPackageFqName();
addMeAndParentPackages(index, packageFqName);
index.filesByPackage.put(packageFqName, file);
}
@@ -56,7 +56,7 @@ public class FileBasedPackageMemberDeclarationProvider extends AbstractPsiBasedD
protected void doCreateIndex(@NotNull Index index) {
for (JetFile file : packageFiles) {
for (JetDeclaration declaration : file.getDeclarations()) {
assert fqName.asString().equals(file.getPackageName()) : "Files declaration utils contains file with invalid package";
assert fqName.equals(file.getPackageFqName()) : "Files declaration utils contains file with invalid package";
index.putToIndex(declaration);
}
}
@@ -181,7 +181,7 @@ public class KotlinJavaFileStubProvider<T extends WithFileStub> implements Cache
@NotNull
@Override
public FqName getPackageFqName() {
return JetPsiUtil.getFQName(getFile());
return getFile().getPackageFqName();
}
@Override
@@ -288,7 +288,7 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
@NotNull
@Override
public String getPackageName() {
return JetPsiUtil.getFQName((JetFile) classOrObject.getContainingFile()).asString();
return ((JetFile) classOrObject.getContainingFile()).getPackageFqName().asString();
}
@NotNull
@@ -234,12 +234,9 @@ public class LightClassUtil {
if (parent instanceof JetFile) {
// top-level declaration
FqName fqName = getPackageClassNameForFile((JetFile) parent);
if (fqName != null) {
Project project = declaration.getProject();
return JavaElementFinder.getInstance(project).findClass(fqName.asString(), GlobalSearchScope.allScope(project));
}
FqName fqName = PackageClassUtils.getPackageClassFqName(((JetFile) parent).getPackageFqName());
Project project = declaration.getProject();
return JavaElementFinder.getInstance(project).findClass(fqName.asString(), GlobalSearchScope.allScope(project));
}
else if (parent instanceof JetClassBody) {
assert parent.getParent() instanceof JetClassOrObject;
@@ -249,12 +246,6 @@ public class LightClassUtil {
return null;
}
@Nullable
private static FqName getPackageClassNameForFile(@NotNull JetFile jetFile) {
String packageName = jetFile.getPackageName();
return packageName == null ? null : PackageClassUtils.getPackageClassFqName(new FqName(packageName));
}
@NotNull
private static PropertyAccessorsPsiMethods extractPropertyAccessors(
@NotNull JetDeclaration jetDeclaration,
@@ -30,7 +30,6 @@ import org.jetbrains.asm4.FieldVisitor;
import org.jetbrains.asm4.MethodVisitor;
import org.jetbrains.jet.codegen.AbstractClassBuilder;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -81,7 +80,7 @@ public class StubClassBuilder extends AbstractClassBuilder {
super.defineClass(origin, version, access, name, signature, superName, interfaces);
if (origin instanceof JetFile) {
FqName packageName = JetPsiUtil.getFQName((JetFile) origin);
FqName packageName = ((JetFile) origin).getPackageFqName();
String packageClassName = PackageClassUtils.getPackageClassName(packageName);
if (name.equals(packageClassName) || name.endsWith("/" + packageClassName)) {
@@ -20,7 +20,6 @@ import com.google.common.collect.Sets;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.ConfigurationKind;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
import java.lang.annotation.*;
@@ -40,7 +39,7 @@ public class AnnotationGenTest extends CodegenTestCase {
}
private Class<?> getPackageClass(@NotNull ClassLoader loader) throws ClassNotFoundException {
return loader.loadClass(PackageClassUtils.getPackageClassName(JetPsiUtil.getFQName(myFiles.getPsiFile())));
return loader.loadClass(PackageClassUtils.getPackageClassName(myFiles.getPsiFile().getPackageFqName()));
}
private Class<?> getPackageSrcClass(@NotNull ClassLoader loader) throws ClassNotFoundException {
@@ -36,7 +36,6 @@ import org.jetbrains.jet.OutputFile;
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys;
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
import org.jetbrains.jet.codegen.forTestCompile.ForTestCompileRuntime;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.utils.UtilsPackage;
@@ -169,7 +168,7 @@ public abstract class CodegenTestCase extends UsefulTestCase {
@NotNull
protected Class<?> generatePackageClass() {
FqName packageFqName = JetPsiUtil.getFQName(myFiles.getPsiFile());
FqName packageFqName = myFiles.getPsiFile().getPackageFqName();
return generateClass(getPackageClassFqName(packageFqName).asString());
}
@@ -25,7 +25,6 @@ import org.jetbrains.jet.TestJdkKind;
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
import org.jetbrains.jet.codegen.CodegenTestCase;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.utils.UtilsPackage;
import java.io.File;
@@ -92,7 +91,7 @@ public abstract class AbstractBlackBoxCodegenTest extends CodegenTestCase {
private void blackBox() {
// If there are many files, the first of them should contain the 'box(): String' function
JetFile firstFile = myFiles.getPsiFiles().get(0);
String fqName = getPackageClassFqName(JetPsiUtil.getFQName(firstFile)).asString();
String fqName = getPackageClassFqName(firstFile.getPackageFqName()).asString();
Class<?> aClass = generateClass(fqName);
try {
@@ -71,7 +71,7 @@ public abstract class AbstractLazyResolveDescriptorRendererTest extends KotlinTe
psiFile.accept(new JetVisitorVoid() {
@Override
public void visitJetFile(@NotNull JetFile file) {
FqName fqName = file.getPackageDirective().getFqName();
FqName fqName = file.getPackageFqName();
if (!fqName.isRoot()) {
PackageViewDescriptor packageDescriptor = lazyModule.getPackage(fqName);
descriptors.add(packageDescriptor);
@@ -37,6 +37,7 @@ import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.name.SpecialNames;
@@ -90,15 +91,9 @@ public class LazyResolveTestUtil {
public static Set<Name> getTopLevelPackagesFromFileList(@NotNull List<JetFile> files) {
Set<Name> shortNames = Sets.newLinkedHashSet();
for (JetFile file : files) {
JetPackageDirective directive = file.getPackageDirective();
if (directive != null) {
List<JetSimpleNameExpression> names = directive.getPackageNames();
Name name = names.isEmpty() ? SpecialNames.ROOT_PACKAGE : names.get(0).getReferencedNameAsName();
shortNames.add(name);
}
else {
throw new IllegalStateException("Scripts are not supported: " + file.getName());
}
List<Name> packageFqNameSegments = file.getPackageFqName().pathSegments();
Name name = packageFqNameSegments.isEmpty() ? SpecialNames.ROOT_PACKAGE : packageFqNameSegments.get(0);
shortNames.add(name);
}
return shortNames;
}
@@ -97,7 +97,7 @@ public class DescriptorRendererTest extends JetLiteFixture {
final BindingContext bindingContext = analyzeExhaust.getBindingContext();
final List<DeclarationDescriptor> descriptors = new ArrayList<DeclarationDescriptor>();
FqName fqName = psiFile.getPackageDirective().getFqName();
FqName fqName = psiFile.getPackageFqName();
if (!fqName.isRoot()) {
PackageViewDescriptor packageDescriptor = analyzeExhaust.getModuleDescriptor().getPackage(fqName);
descriptors.add(packageDescriptor);
@@ -259,10 +259,7 @@ public class JetShortNamesCache extends PsiShortNamesCache {
PsiFile containingFile = jetNamedFunction.getContainingFile();
if (containingFile instanceof JetFile) {
JetFile jetFile = (JetFile) containingFile;
String packageName = jetFile.getPackageName();
if (packageName != null) {
affectedPackages.add(new FqName(packageName));
}
affectedPackages.add(jetFile.getPackageFqName());
}
}
@@ -20,11 +20,9 @@ import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.libraries.LibraryUtil;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiClass;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.MultiMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -122,7 +120,7 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport
// Scripts are not supported
if (file.isScript()) continue;
FqName packageFqName = JetPsiUtil.getFQName(file);
FqName packageFqName = file.getPackageFqName();
// make sure we create a package descriptor
PackageViewDescriptor packageDescriptor = session.getModuleDescriptor().getPackage(packageFqName);
@@ -190,7 +190,7 @@ public class JetPositionManager implements PositionManager {
}
private JetTypeMapper prepareTypeMapper(final JetFile file) {
FqName fqName = JetPsiUtil.getFQName(file);
FqName fqName = file.getPackageFqName();
CachedValue<JetTypeMapper> value = myTypeMappers.get(fqName);
if(value == null) {
value = CachedValuesManager.getManager(file.getProject()).createCachedValue(new CachedValueProvider<JetTypeMapper>() {
@@ -248,7 +248,7 @@ public class JetPositionManager implements PositionManager {
@TestOnly
public void addTypeMapper(JetFile file, final JetTypeMapper typeMapper) {
FqName fqName = JetPsiUtil.getFQName(file);
FqName fqName = file.getPackageFqName();
CachedValue<JetTypeMapper> value = CachedValuesManager.getManager(file.getProject()).createCachedValue(new CachedValueProvider<JetTypeMapper>() {
@Override
public Result<JetTypeMapper> compute() {
@@ -376,11 +376,9 @@ public class ResolveElementCache {
if (expression.getParent() instanceof JetDotQualifiedExpression) {
JetExpression element = ((JetDotQualifiedExpression) expression.getParent()).getReceiverExpression();
String name = ((JetFile) expression.getContainingFile()).getPackageName();
FqName fqName = ((JetFile) expression.getContainingFile()).getPackageFqName();
PackageViewDescriptor filePackage = name != null
? resolveSession.getModuleDescriptor().getPackage(new FqName(name))
: rootPackage;
PackageViewDescriptor filePackage = resolveSession.getModuleDescriptor().getPackage(fqName);
assert filePackage != null : "File package should be already resolved and be found";
JetScope scope = filePackage.getMemberScope();
@@ -674,7 +674,7 @@ public class CreateFunctionFromUsageFix extends CreateFromUsageFixBase {
JetScope scope;
if (isExtension) {
scope = currentFileModule.getPackage(JetPsiUtil.getFQName(currentFile)).getMemberScope();
scope = currentFileModule.getPackage(currentFile.getPackageFqName()).getMemberScope();
}
else {
scope = ((ClassDescriptorWithResolutionScopes) ownerClassDescriptor).getScopeForMemberDeclarationResolution();
@@ -127,7 +127,7 @@ public class ImportInsertHelper {
}
// There's no need to import a declaration from the package of current file
if (JetPsiUtil.getFQName(jetFile).equals(importPath.fqnPart().parent())) {
if (jetFile.getPackageFqName().equals(importPath.fqnPart().parent())) {
return true;
}
}
@@ -77,7 +77,7 @@ public class MoveKotlinFileHandler : MoveFileHandler() {
}
private fun JetFile.packageMatchesDirectory(): Boolean {
return getPackageName() == getParent()?.getPackage()?.getQualifiedName()
return getPackageFqName().asString() == getParent()?.getPackage()?.getQualifiedName()
}
override fun canProcessElement(element: PsiFile?): Boolean {
@@ -91,7 +91,7 @@ public class MoveKotlinFileHandler : MoveFileHandler() {
if (newPackage != null) {
file.putCopyableUserData(
PACKAGE_NAME_INFO_KEY,
PackageNameInfo(JetPsiUtil.getFQName(file), FqName(newPackage.getQualifiedName()))
PackageNameInfo(file.getPackageFqName(), FqName(newPackage.getQualifiedName()))
)
}
}
@@ -239,10 +239,9 @@ public class MoveKotlinTopLevelDeclarationsProcessor(project: Project, val optio
assert(targetFile is JetFile, "Couldn't create Koltin file for: ${declaration.getClass()}: ${declaration.getText()}")
val newPackage = (targetFile as JetFile).getPackageName()
assert (newPackage != null, "${targetFile.getClass()}: ${targetFile.getText()}")
val newPackageFqName = (targetFile as JetFile).getPackageFqName()
val packageNameInfo = PackageNameInfo(JetPsiUtil.getFQName(file!!), FqName(newPackage!!))
val packageNameInfo = PackageNameInfo(file!!.getPackageFqName(), newPackageFqName)
declaration.updateInternalReferencesOnPackageNameChange(packageNameInfo, ShorteningMode.NO_SHORTENING)
val newElement = targetFile.add(declaration) as JetNamedDeclaration
@@ -29,7 +29,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.analyzer.AnalyzerFacade;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -73,7 +72,7 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im
mySourceElement = file;
FqName startClassFQName = PackageClassUtils.getPackageClassFqName(JetPsiUtil.getFQName(file));
FqName startClassFQName = PackageClassUtils.getPackageClassFqName(file.getPackageFqName());
return createConfigurationByQName(module, configurationContext, startClassFQName);
}
@@ -119,7 +118,7 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im
return null;
}
FqName startClassFQName = PackageClassUtils.getPackageClassFqName(JetPsiUtil.getFQName(file));
FqName startClassFQName = PackageClassUtils.getPackageClassFqName(file.getPackageFqName());
for (RunnerAndConfigurationSettings existingConfiguration : existingConfigurations) {
if (existingConfiguration.getType() instanceof JetRunConfigurationType) {
@@ -23,7 +23,6 @@ import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.NamePackage;
@@ -41,7 +40,7 @@ public final class PackageIndexUtil {
Set<FqName> result = Sets.newHashSet();
for (JetFile file : files) {
FqName fqName = JetPsiUtil.getFQName(file);
FqName fqName = file.getPackageFqName();
assert NamePackage.isSubpackageOf(fqName, packageFqName) :
"Registered package is not a subpackage of actually declared package:\n" +
@@ -66,7 +65,7 @@ public final class PackageIndexUtil {
return ContainerUtil.filter(files, new Condition<JetFile>() {
@Override
public boolean value(JetFile file) {
return packageFqName.equals(JetPsiUtil.getFQName(file));
return packageFqName.equals(file.getPackageFqName());
}
});
}
@@ -29,15 +29,14 @@ public class StubIndexServiceImpl implements StubIndexService {
@Override
public void indexFile(PsiJetFileStub stub, IndexSink sink) {
String packageName = stub.getPackageName();
FqName fqName = new FqName(packageName == null ? "" : packageName);
FqName packageFqName = stub.getPackageFqName();
while (true) {
sink.occurrence(JetAllPackagesIndex.getInstance().getKey(), fqName.asString());
if (fqName.isRoot()) {
sink.occurrence(JetAllPackagesIndex.getInstance().getKey(), packageFqName.asString());
if (packageFqName.isRoot()) {
return;
}
fqName = fqName.parent();
packageFqName = packageFqName.parent();
}
}
@@ -101,10 +100,8 @@ public class StubIndexServiceImpl implements StubIndexService {
StubElement parentStub = stub.getParentStub();
if (parentStub instanceof PsiJetFileStub) {
PsiJetFileStub jetFileStub = (PsiJetFileStub) parentStub;
String packageName = jetFileStub.getPackageName();
if (packageName != null) {
sink.occurrence(JetClassByPackageIndex.getInstance().getKey(), packageName);
}
FqName packageFqName = jetFileStub.getPackageFqName();
sink.occurrence(JetClassByPackageIndex.getInstance().getKey(), packageFqName.asString());
}
}
@@ -24,7 +24,6 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.codegen.binding.PsiCodegenPredictor;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.resolve.java.JetFilesProvider;
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -53,7 +52,7 @@ public class DebuggerUtils {
public boolean apply(@Nullable JetFile file) {
return file != null
&& file.getName().equals(fileName)
&& JetPsiUtil.getFQName(file).equals(packageFqName);
&& file.getPackageFqName().equals(packageFqName);
}
});
@@ -23,7 +23,6 @@ import org.jetbrains.jet.asJava.KotlinLightClassForExplicitDeclaration;
import org.jetbrains.jet.asJava.KotlinLightClassForPackage;
import org.jetbrains.jet.lang.psi.JetClassOrObject;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.NamePackage;
import org.jetbrains.jet.lexer.JetTokens;
@@ -46,8 +45,8 @@ public class JetPsiHeuristicsUtil {
// The class is declared private in the targetPackage
// It is visible in this package and all of its subpackages
JetFile targetFile = (JetFile) classOrObject.getContainingFile();
FqName targetPackage = JetPsiUtil.getFQName(targetFile);
FqName fromPackage = JetPsiUtil.getFQName(fromFile);
FqName targetPackage = targetFile.getPackageFqName();
FqName fromPackage = fromFile.getPackageFqName();
return NamePackage.isSubpackageOf(fromPackage, targetPackage);
}
@@ -161,7 +161,7 @@ public abstract class AbstractRenameTest : MultiFileTestCase() {
val document = FileDocumentManager.getInstance()!!.getDocument(mainFile)!!
val jetFile = PsiDocumentManager.getInstance(context.project).getPsiFile(document) as JetFile
val fileFqn = jetFile.getPackageDirective()!!.getFqName()
val fileFqn = jetFile.getPackageFqName()
Assert.assertTrue("File '${mainFilePath}' should have package containing ${fqn}", fileFqn.isSubpackageOf(fqn))
val packageSegment = jetFile.getPackageDirective()!!.getPackageNames()[fqn.pathSegments().size - 1]