JetNamespaceHeader → JetPackageDirective.
This commit is contained in:
@@ -146,7 +146,7 @@ public interface JetNodeTypes {
|
||||
JetNodeType WHEN_CONDITION_IS_PATTERN = new JetNodeType("WHEN_CONDITION_IS_PATTERN", JetWhenConditionIsPattern.class);
|
||||
JetNodeType WHEN_CONDITION_EXPRESSION = new JetNodeType("WHEN_CONDITION_WITH_EXPRESSION", JetWhenConditionWithExpression.class);
|
||||
|
||||
JetNodeType NAMESPACE_HEADER = new JetNodeType("NAMESPACE_HEADER", JetNamespaceHeader.class);
|
||||
JetNodeType PACKAGE_DIRECTIVE = new JetNodeType("PACKAGE_DIRECTIVE", JetPackageDirective.class);
|
||||
JetNodeType SCRIPT = new JetNodeType("SCRIPT", JetScript.class);
|
||||
|
||||
IFileElementType TYPE_CODE_FRAGMENT = new JetTypeCodeFragmentType();
|
||||
|
||||
@@ -204,7 +204,7 @@ public class PositioningStrategies {
|
||||
}
|
||||
else if (element instanceof JetFile) {
|
||||
JetFile file = (JetFile) element;
|
||||
PsiElement nameIdentifier = file.getNamespaceHeader().getNameIdentifier();
|
||||
PsiElement nameIdentifier = file.getPackageDirective().getNameIdentifier();
|
||||
if (nameIdentifier != null) {
|
||||
return markElement(nameIdentifier);
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
private static final TokenSet CLASS_NAME_RECOVERY_SET = TokenSet.orSet(TokenSet.create(LT, LPAR, COLON, LBRACE), TOPLEVEL_OBJECT_FIRST);
|
||||
private static final TokenSet TYPE_PARAMETER_GT_RECOVERY_SET = TokenSet.create(WHERE_KEYWORD, LPAR, COLON, LBRACE, GT);
|
||||
private static final TokenSet PARAMETER_NAME_RECOVERY_SET = TokenSet.create(COLON, EQ, COMMA, RPAR);
|
||||
private static final TokenSet NAMESPACE_NAME_RECOVERY_SET = TokenSet.create(DOT, EOL_OR_SEMICOLON);
|
||||
private static final TokenSet PACKAGE_NAME_RECOVERY_SET = TokenSet.create(DOT, EOL_OR_SEMICOLON);
|
||||
private static final TokenSet IMPORT_RECOVERY_SET = TokenSet.create(AS_KEYWORD, DOT, EOL_OR_SEMICOLON);
|
||||
/*package*/ static final TokenSet TYPE_REF_FIRST = TokenSet.create(LBRACKET, IDENTIFIER, FUN_KEYWORD, LPAR, CAPITALIZED_THIS_KEYWORD, HASH);
|
||||
private static final TokenSet RECEIVER_TYPE_TERMINATORS = TokenSet.create(DOT, SAFE_ACCESS);
|
||||
@@ -144,16 +144,16 @@ public class JetParsing extends AbstractJetParsing {
|
||||
|
||||
/*
|
||||
*preamble
|
||||
* : namespaceHeader? import*
|
||||
* : packageDirective? import*
|
||||
* ;
|
||||
*/
|
||||
private void parsePreamble(boolean imports) {
|
||||
/*
|
||||
* namespaceHeader
|
||||
* : modifiers "namespace" SimpleName{"."} SEMI?
|
||||
* packageDirective
|
||||
* : modifiers "package" SimpleName{"."} SEMI?
|
||||
* ;
|
||||
*/
|
||||
PsiBuilder.Marker namespaceHeader = mark();
|
||||
PsiBuilder.Marker packageDirective = mark();
|
||||
PsiBuilder.Marker firstEntry = mark();
|
||||
parseModifierList(MODIFIER_LIST, true);
|
||||
|
||||
@@ -161,12 +161,12 @@ public class JetParsing extends AbstractJetParsing {
|
||||
advance(); // PACKAGE_KEYWORD
|
||||
|
||||
|
||||
parseNamespaceName();
|
||||
parsePackageName();
|
||||
|
||||
if (at(LBRACE)) {
|
||||
// Because it's blocked namespace and it will be parsed as one of top level objects
|
||||
// Because it's blocked package and it will be parsed as one of top level objects
|
||||
firstEntry.rollbackTo();
|
||||
namespaceHeader.done(NAMESPACE_HEADER);
|
||||
packageDirective.done(PACKAGE_DIRECTIVE);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -177,22 +177,22 @@ public class JetParsing extends AbstractJetParsing {
|
||||
else {
|
||||
firstEntry.rollbackTo();
|
||||
}
|
||||
namespaceHeader.done(NAMESPACE_HEADER);
|
||||
packageDirective.done(PACKAGE_DIRECTIVE);
|
||||
|
||||
if(imports)
|
||||
parseImportDirectives();
|
||||
}
|
||||
|
||||
/* SimpleName{"."} */
|
||||
private void parseNamespaceName() {
|
||||
private void parsePackageName() {
|
||||
while (true) {
|
||||
if (myBuilder.newlineBeforeCurrentToken()) {
|
||||
errorWithRecovery("Package name must be a '.'-separated identifier list placed on a single line", NAMESPACE_NAME_RECOVERY_SET);
|
||||
errorWithRecovery("Package name must be a '.'-separated identifier list placed on a single line", PACKAGE_NAME_RECOVERY_SET);
|
||||
break;
|
||||
}
|
||||
|
||||
PsiBuilder.Marker nsName = mark();
|
||||
if (expect(IDENTIFIER, "Package name must be a '.'-separated identifier list", NAMESPACE_NAME_RECOVERY_SET)) {
|
||||
if (expect(IDENTIFIER, "Package name must be a '.'-separated identifier list", PACKAGE_NAME_RECOVERY_SET)) {
|
||||
nsName.done(REFERENCE_EXPRESSION);
|
||||
}
|
||||
else {
|
||||
@@ -297,7 +297,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
|
||||
/*
|
||||
* toplevelObject
|
||||
* : namespace
|
||||
* : package
|
||||
* : class
|
||||
* : extension
|
||||
* : function
|
||||
@@ -315,7 +315,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
IElementType keywordToken = tt();
|
||||
IElementType declType = null;
|
||||
// if (keywordToken == PACKAGE_KEYWORD) {
|
||||
// declType = parseNamespaceBlock();
|
||||
// declType = parsePackageBlock();
|
||||
// }
|
||||
// else
|
||||
if (keywordToken == CLASS_KEYWORD || keywordToken == TRAIT_KEYWORD) {
|
||||
@@ -1481,7 +1481,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
|
||||
/*
|
||||
* userType
|
||||
* : ("namespace" ".")? simpleUserType{"."}
|
||||
* : ("package" ".")? simpleUserType{"."}
|
||||
* ;
|
||||
*/
|
||||
void parseUserType() {
|
||||
|
||||
@@ -210,7 +210,7 @@ public class JetClass extends JetTypeParameterListOwnerStub<PsiJetClassStub> imp
|
||||
}
|
||||
PsiFile file = getContainingFile();
|
||||
if (!(file instanceof JetFile)) return null;
|
||||
String fileQualifiedName = ((JetFile) file).getNamespaceHeader().getQualifiedName();
|
||||
String fileQualifiedName = ((JetFile) file).getPackageDirective().getQualifiedName();
|
||||
if (!fileQualifiedName.isEmpty()) {
|
||||
parts.add(fileQualifiedName);
|
||||
}
|
||||
|
||||
@@ -89,11 +89,11 @@ public class JetFile extends PsiFileBase implements JetDeclarationContainer, Jet
|
||||
return null;
|
||||
}
|
||||
|
||||
// scripts has no namespace header
|
||||
// scripts have no package directive
|
||||
@Nullable
|
||||
public JetNamespaceHeader getNamespaceHeader() {
|
||||
ASTNode ast = getNode().findChildByType(JetNodeTypes.NAMESPACE_HEADER);
|
||||
return ast != null ? (JetNamespaceHeader) ast.getPsi() : null;
|
||||
public JetPackageDirective getPackageDirective() {
|
||||
ASTNode ast = getNode().findChildByType(JetNodeTypes.PACKAGE_DIRECTIVE);
|
||||
return ast != null ? (JetPackageDirective) ast.getPsi() : null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -103,8 +103,8 @@ public class JetFile extends PsiFileBase implements JetDeclarationContainer, Jet
|
||||
return stub.getPackageName();
|
||||
}
|
||||
|
||||
JetNamespaceHeader statement = getNamespaceHeader();
|
||||
return statement != null ? statement.getQualifiedName() : null;
|
||||
JetPackageDirective directive = getPackageDirective();
|
||||
return directive != null ? directive.getQualifiedName() : null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -97,7 +97,7 @@ public class JetNamedFunction extends JetTypeParameterListOwnerStub<PsiJetFuncti
|
||||
PsiElement parent = getParent();
|
||||
if (parent instanceof JetFile) {
|
||||
// fqname is different in scripts
|
||||
if (((JetFile) parent).getNamespaceHeader() == null) {
|
||||
if (((JetFile) parent).getPackageDirective() == null) {
|
||||
return null;
|
||||
}
|
||||
JetFile jetFile = (JetFile) parent;
|
||||
|
||||
+4
-4
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2013 JetBrains s.r.o.
|
||||
* 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.
|
||||
@@ -27,15 +27,15 @@ import org.jetbrains.jet.lang.resolve.name.SpecialNames;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class JetNamespaceHeader extends JetReferenceExpression {
|
||||
public class JetPackageDirective extends JetReferenceExpression {
|
||||
private String qualifiedNameCache = null;
|
||||
|
||||
public JetNamespaceHeader(@NotNull ASTNode node) {
|
||||
public JetPackageDirective(@NotNull ASTNode node) {
|
||||
super(node);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<JetSimpleNameExpression> getNamespaceNames() {
|
||||
public List<JetSimpleNameExpression> getPackageNames() {
|
||||
return findChildrenByType(JetNodeTypes.REFERENCE_EXPRESSION);
|
||||
}
|
||||
|
||||
@@ -187,8 +187,8 @@ public class JetPsiUtil {
|
||||
|
||||
@NotNull
|
||||
public static FqName getFQName(@NotNull JetFile file) {
|
||||
JetNamespaceHeader header = file.getNamespaceHeader();
|
||||
return header != null ? header.getFqName() : FqName.ROOT;
|
||||
JetPackageDirective directive = file.getPackageDirective();
|
||||
return directive != null ? directive.getFqName() : FqName.ROOT;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -908,14 +908,15 @@ public class JetPsiUtil {
|
||||
}
|
||||
|
||||
public static NavigatablePsiElement getPackageReference(@NotNull JetFile file, int partIndex) {
|
||||
JetNamespaceHeader header = file.getNamespaceHeader();
|
||||
if (header == null) {
|
||||
throw new IllegalArgumentException("Should be called only for files with namespace: " + file);
|
||||
JetPackageDirective directive = file.getPackageDirective();
|
||||
if (directive == null) {
|
||||
throw new IllegalArgumentException("Should be called only for files with package directive: " + file);
|
||||
}
|
||||
|
||||
List<JetSimpleNameExpression> names = header.getNamespaceNames();
|
||||
List<JetSimpleNameExpression> names = directive.getPackageNames();
|
||||
if (!(0 <= partIndex && partIndex < names.size())) {
|
||||
throw new IndexOutOfBoundsException(String.format("%s index for file with header %s is out of range", partIndex, header.getText()));
|
||||
throw new IndexOutOfBoundsException(String.format("%s index for file with directive %s is out of range", partIndex,
|
||||
directive.getText()));
|
||||
}
|
||||
|
||||
return names.get(partIndex);
|
||||
@@ -1002,7 +1003,7 @@ public class JetPsiUtil {
|
||||
@Nullable
|
||||
public static String getPackageName(@NotNull JetElement element) {
|
||||
JetFile file = (JetFile) element.getContainingFile();
|
||||
JetNamespaceHeader header = PsiTreeUtil.findChildOfType(file, JetNamespaceHeader.class);
|
||||
JetPackageDirective header = PsiTreeUtil.findChildOfType(file, JetPackageDirective.class);
|
||||
|
||||
return header != null ? header.getQualifiedName() : null;
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ public class DeclarationResolver {
|
||||
|
||||
|
||||
public void process(@NotNull JetScope rootScope) {
|
||||
checkModifiersAndAnnotationsInNamespaceHeaders();
|
||||
checkModifiersAndAnnotationsInPackageDirectives();
|
||||
resolveAnnotationConstructors();
|
||||
resolveConstructorHeaders();
|
||||
resolveAnnotationStubsOnClassesAndConstructors();
|
||||
@@ -102,12 +102,12 @@ public class DeclarationResolver {
|
||||
checkRedeclarationsInInnerClassNames();
|
||||
}
|
||||
|
||||
private void checkModifiersAndAnnotationsInNamespaceHeaders() {
|
||||
private void checkModifiersAndAnnotationsInPackageDirectives() {
|
||||
for (JetFile file : context.getPackageFragments().keySet()) {
|
||||
JetNamespaceHeader namespaceHeader = file.getNamespaceHeader();
|
||||
if (namespaceHeader == null) continue;
|
||||
JetPackageDirective packageDirective = file.getPackageDirective();
|
||||
if (packageDirective == null) continue;
|
||||
|
||||
PsiElement firstChild = namespaceHeader.getFirstChild();
|
||||
PsiElement firstChild = packageDirective.getFirstChild();
|
||||
if (!(firstChild instanceof JetModifierList)) continue;
|
||||
JetModifierList modifierList = (JetModifierList) firstChild;
|
||||
|
||||
@@ -373,7 +373,7 @@ public class DeclarationResolver {
|
||||
@Override
|
||||
public PsiElement apply(@Nullable JetFile file) {
|
||||
assert file != null : "File is null for aPackage " + aPackage;
|
||||
return file.getNamespaceHeader().getNameIdentifier();
|
||||
return file.getPackageDirective().getNameIdentifier();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinition;
|
||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinitionProvider;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.psi.JetNamespaceHeader;
|
||||
import org.jetbrains.jet.lang.psi.JetPackageDirective;
|
||||
import org.jetbrains.jet.lang.psi.JetScript;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
@@ -119,8 +119,8 @@ public class ScriptHeaderResolver {
|
||||
|
||||
public void processScriptHierarchy(@NotNull JetScript script, @NotNull JetScope outerScope) {
|
||||
JetFile file = (JetFile) script.getContainingFile();
|
||||
JetNamespaceHeader namespaceHeader = file.getNamespaceHeader();
|
||||
FqName fqName = namespaceHeader != null ? new FqName(namespaceHeader.getQualifiedName()) : FqName.ROOT;
|
||||
JetPackageDirective packageDirective = file.getPackageDirective();
|
||||
FqName fqName = packageDirective != null ? new FqName(packageDirective.getQualifiedName()) : FqName.ROOT;
|
||||
PackageFragmentDescriptor ns = packageFragmentProvider.getOrCreateFragment(fqName);
|
||||
|
||||
Integer priority = script.getUserData(PRIORITY_KEY);
|
||||
|
||||
@@ -19,7 +19,7 @@ package org.jetbrains.jet.lang.resolve;
|
||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinition;
|
||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinitionProvider;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.psi.JetNamespaceHeader;
|
||||
import org.jetbrains.jet.lang.psi.JetPackageDirective;
|
||||
|
||||
public class ScriptNameUtil {
|
||||
private ScriptNameUtil() {
|
||||
@@ -40,9 +40,9 @@ public class ScriptNameUtil {
|
||||
name = name.substring(0,index);
|
||||
}
|
||||
name = Character.toUpperCase(name.charAt(0)) + (name.length() == 0 ? "" : name.substring(1));
|
||||
JetNamespaceHeader header = file.getNamespaceHeader();
|
||||
if(header != null && header.getName().length() > 0) {
|
||||
name = header.getName().replace('.','/') + "/" + name;
|
||||
JetPackageDirective directive = file.getPackageDirective();
|
||||
if(directive != null && directive.getName().length() > 0) {
|
||||
name = directive.getName().replace('.','/') + "/" + name;
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
@@ -541,13 +541,13 @@ public class TypeHierarchyResolver {
|
||||
|
||||
@NotNull
|
||||
private MutablePackageFragmentDescriptor getOrCreatePackageFragmentForFile(@NotNull JetFile file) {
|
||||
JetNamespaceHeader namespaceHeader = file.getNamespaceHeader();
|
||||
assert namespaceHeader != null : "scripts are not supported";
|
||||
JetPackageDirective packageDirective = file.getPackageDirective();
|
||||
assert packageDirective != null : "scripts are not supported";
|
||||
|
||||
MutablePackageFragmentDescriptor fragment = packageFragmentProvider.getOrCreateFragment(namespaceHeader.getFqName());
|
||||
MutablePackageFragmentDescriptor fragment = packageFragmentProvider.getOrCreateFragment(packageDirective.getFqName());
|
||||
|
||||
for (JetSimpleNameExpression nameExpression : namespaceHeader.getNamespaceNames()) {
|
||||
FqName fqName = namespaceHeader.getFqName(nameExpression);
|
||||
for (JetSimpleNameExpression nameExpression : packageDirective.getPackageNames()) {
|
||||
FqName fqName = packageDirective.getFqName(nameExpression);
|
||||
|
||||
PackageViewDescriptor packageView = packageFragmentProvider.getModule().getPackage(fqName);
|
||||
assert packageView != null : "package not found: " + fqName;
|
||||
|
||||
@@ -110,12 +110,12 @@ public class ScopeProvider {
|
||||
|
||||
@NotNull
|
||||
private PackageViewDescriptor getFilePackageDescriptor(JetFile file) {
|
||||
JetNamespaceHeader header = file.getNamespaceHeader();
|
||||
if (header == null) {
|
||||
JetPackageDirective directive = file.getPackageDirective();
|
||||
if (directive == null) {
|
||||
throw new IllegalArgumentException("Scripts are not supported: " + file.getName());
|
||||
}
|
||||
|
||||
FqName fqName = new FqName(header.getQualifiedName());
|
||||
FqName fqName = new FqName(directive.getQualifiedName());
|
||||
PackageViewDescriptor packageDescriptor = resolveSession.getModuleDescriptor().getPackage(fqName);
|
||||
|
||||
if (packageDescriptor == null) {
|
||||
|
||||
+2
-2
@@ -61,8 +61,8 @@ public abstract class JetClassOrObjectInfo<E extends JetClassOrObject> implement
|
||||
PsiFile file = element.getContainingFile();
|
||||
if (file instanceof JetFile) {
|
||||
JetFile jetFile = (JetFile) file;
|
||||
JetNamespaceHeader header = jetFile.getNamespaceHeader();
|
||||
return header != null ? header.getFqName() : FqName.ROOT;
|
||||
JetPackageDirective directive = jetFile.getPackageDirective();
|
||||
return directive != null ? directive.getFqName() : FqName.ROOT;
|
||||
}
|
||||
throw new IllegalArgumentException("Not in a JetFile: " + element);
|
||||
}
|
||||
|
||||
+4
-4
@@ -27,7 +27,7 @@ import jet.Function1;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.psi.JetNamespaceHeader;
|
||||
import org.jetbrains.jet.lang.psi.JetPackageDirective;
|
||||
import org.jetbrains.jet.lang.psi.JetPsiUtil;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.data.JetClassLikeInfo;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
@@ -83,12 +83,12 @@ public class FileBasedDeclarationProviderFactory implements DeclarationProviderF
|
||||
private static Index computeFilesByPackage(@NotNull Collection<JetFile> files) {
|
||||
Index index = new Index();
|
||||
for (JetFile file : files) {
|
||||
JetNamespaceHeader header = file.getNamespaceHeader();
|
||||
if (header == null) {
|
||||
JetPackageDirective directive = file.getPackageDirective();
|
||||
if (directive == null) {
|
||||
throw new IllegalArgumentException("Scripts are not supported");
|
||||
}
|
||||
|
||||
FqName packageFqName = new FqName(header.getQualifiedName());
|
||||
FqName packageFqName = new FqName(directive.getQualifiedName());
|
||||
addMeAndParentPackages(index, packageFqName);
|
||||
index.filesByPackage.put(packageFqName, file);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user