On the way refactorings

This commit is contained in:
Nikolay Krasko
2012-05-02 12:20:54 +04:00
parent fac735a419
commit f67aebe4be
6 changed files with 46 additions and 34 deletions
@@ -42,8 +42,8 @@ public interface ModuleConfiguration {
void addDefaultImports(@NotNull Collection<JetImportDirective> directives); void addDefaultImports(@NotNull Collection<JetImportDirective> directives);
/** /**
* * This method is called every time a namespace descriptor is created. Use it to add extra descriptors to the namespace, e.g. merge a
* This method is called every time a namespace descriptor is created. Use it to add extra descriptors to the namespace, e.g. merge a Java package with a Kotlin one * Java package with a Kotlin one
*/ */
void extendNamespaceScope(@NotNull BindingTrace trace, @NotNull NamespaceDescriptor namespaceDescriptor, @NotNull WritableScope namespaceMemberScope); void extendNamespaceScope(@NotNull BindingTrace trace, @NotNull NamespaceDescriptor namespaceDescriptor, @NotNull WritableScope namespaceMemberScope);
@@ -22,7 +22,10 @@ import org.jetbrains.jet.lang.psi.JetParameter;
import org.jetbrains.jet.lang.resolve.AbstractScopeAdapter; import org.jetbrains.jet.lang.resolve.AbstractScopeAdapter;
import org.jetbrains.jet.lang.resolve.BindingContextUtils; import org.jetbrains.jet.lang.resolve.BindingContextUtils;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.scopes.*; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver; import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor;
@@ -43,14 +46,21 @@ public class MutableClassDescriptor extends MutableClassDescriptorLite {
private final WritableScope scopeForSupertypeResolution; private final WritableScope scopeForSupertypeResolution;
private WritableScope scopeForInitializers = null; //contains members + primary constructor value parameters + map for backing fields private WritableScope scopeForInitializers = null; //contains members + primary constructor value parameters + map for backing fields
public MutableClassDescriptor(@NotNull BindingTrace trace, @NotNull DeclarationDescriptor containingDeclaration, @NotNull JetScope outerScope, ClassKind kind) { public MutableClassDescriptor(@NotNull BindingTrace trace, @NotNull DeclarationDescriptor containingDeclaration,
@NotNull JetScope outerScope, ClassKind kind) {
super(containingDeclaration, kind); super(containingDeclaration, kind);
RedeclarationHandler redeclarationHandler = RedeclarationHandler.DO_NOTHING; RedeclarationHandler redeclarationHandler = RedeclarationHandler.DO_NOTHING;
setScopeForMemberLookup(new WritableScopeImpl(JetScope.EMPTY, this, redeclarationHandler).setDebugName("MemberLookup").changeLockLevel(WritableScope.LockLevel.BOTH)); setScopeForMemberLookup(new WritableScopeImpl(JetScope.EMPTY, this, redeclarationHandler)
this.scopeForSupertypeResolution = new WritableScopeImpl(outerScope, this, redeclarationHandler).setDebugName("SupertypeResolution").changeLockLevel(WritableScope.LockLevel.BOTH); .setDebugName("MemberLookup")
this.scopeForMemberResolution = new WritableScopeImpl(scopeForSupertypeResolution, this, redeclarationHandler).setDebugName("MemberResolution").changeLockLevel(WritableScope.LockLevel.BOTH); .changeLockLevel(WritableScope.LockLevel.BOTH));
this.scopeForSupertypeResolution = new WritableScopeImpl(outerScope, this, redeclarationHandler)
.setDebugName("SupertypeResolution")
.changeLockLevel(WritableScope.LockLevel.BOTH);
this.scopeForMemberResolution = new WritableScopeImpl(scopeForSupertypeResolution, this, redeclarationHandler)
.setDebugName("MemberResolution")
.changeLockLevel(WritableScope.LockLevel.BOTH);
if (getKind() == ClassKind.TRAIT) { if (getKind() == ClassKind.TRAIT) {
setUpScopeForInitializers(this); setUpScopeForInitializers(this);
} }
@@ -17,7 +17,6 @@
package org.jetbrains.jet.lang.descriptors; package org.jetbrains.jet.lang.descriptors;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
@@ -30,7 +29,9 @@ public class NamespaceDescriptorImpl extends AbstractNamespaceDescriptorImpl imp
private WritableScope memberScope; private WritableScope memberScope;
public NamespaceDescriptorImpl(@NotNull NamespaceDescriptorParent containingDeclaration, @NotNull List<AnnotationDescriptor> annotations, @NotNull String name) { public NamespaceDescriptorImpl(@NotNull NamespaceDescriptorParent containingDeclaration,
@NotNull List<AnnotationDescriptor> annotations,
@NotNull String name) {
super(containingDeclaration, annotations, name); super(containingDeclaration, annotations, name);
} }
@@ -109,6 +109,9 @@ public class Visibilities {
public static final Set<Visibility> INTERNAL_VISIBILITIES = Sets.newHashSet(PRIVATE, INTERNAL, INTERNAL_PROTECTED, LOCAL); public static final Set<Visibility> INTERNAL_VISIBILITIES = Sets.newHashSet(PRIVATE, INTERNAL, INTERNAL_PROTECTED, LOCAL);
private Visibilities() {
}
public static boolean isVisible(DeclarationDescriptorWithVisibility what, DeclarationDescriptor from) { public static boolean isVisible(DeclarationDescriptorWithVisibility what, DeclarationDescriptor from) {
DeclarationDescriptorWithVisibility parent = what; DeclarationDescriptorWithVisibility parent = what;
while (parent != null) { while (parent != null) {
@@ -57,13 +57,13 @@ public class JetParsing extends AbstractJetParsing {
/*package*/ static final TokenSet TYPE_REF_FIRST = TokenSet.create(LBRACKET, IDENTIFIER, FUN_KEYWORD, LPAR, CAPITALIZED_THIS_KEYWORD, HASH); /*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); private static final TokenSet RECEIVER_TYPE_TERMINATORS = TokenSet.create(DOT, SAFE_ACCESS);
public static JetParsing createForTopLevel(SemanticWhitespaceAwarePsiBuilder builder) { static JetParsing createForTopLevel(SemanticWhitespaceAwarePsiBuilder builder) {
JetParsing jetParsing = new JetParsing(builder); JetParsing jetParsing = new JetParsing(builder);
jetParsing.myExpressionParsing = new JetExpressionParsing(builder, jetParsing); jetParsing.myExpressionParsing = new JetExpressionParsing(builder, jetParsing);
return jetParsing; return jetParsing;
} }
public static JetParsing createForByClause(final SemanticWhitespaceAwarePsiBuilder builder) { private static JetParsing createForByClause(final SemanticWhitespaceAwarePsiBuilder builder) {
final SemanticWhitespaceAwarePsiBuilderForByClause builderForByClause = new SemanticWhitespaceAwarePsiBuilderForByClause(builder); final SemanticWhitespaceAwarePsiBuilderForByClause builderForByClause = new SemanticWhitespaceAwarePsiBuilderForByClause(builder);
JetParsing jetParsing = new JetParsing(builderForByClause); JetParsing jetParsing = new JetParsing(builderForByClause);
jetParsing.myExpressionParsing = new JetExpressionParsing(builderForByClause, jetParsing) { jetParsing.myExpressionParsing = new JetExpressionParsing(builderForByClause, jetParsing) {
@@ -94,7 +94,7 @@ public class JetParsing extends AbstractJetParsing {
* : preamble toplevelObject[| import]* [eof] * : preamble toplevelObject[| import]* [eof]
* ; * ;
*/ */
public void parseFile() { void parseFile() {
PsiBuilder.Marker fileMarker = mark(); PsiBuilder.Marker fileMarker = mark();
parsePreamble(); parsePreamble();
@@ -297,7 +297,7 @@ public class JetParsing extends AbstractJetParsing {
/* /*
* (modifier | attribute)* * (modifier | attribute)*
*/ */
public boolean parseModifierList(JetNodeType nodeType, boolean allowShortAnnotations) { boolean parseModifierList(JetNodeType nodeType, boolean allowShortAnnotations) {
return parseModifierList(nodeType, null, allowShortAnnotations); return parseModifierList(nodeType, null, allowShortAnnotations);
} }
@@ -306,7 +306,7 @@ public class JetParsing extends AbstractJetParsing {
* *
* Feeds modifiers (not attributes) into the passed consumer, if it is not null * Feeds modifiers (not attributes) into the passed consumer, if it is not null
*/ */
public boolean parseModifierList(JetNodeType nodeType, Consumer<IElementType> tokenConsumer, boolean allowShortAnnotations) { boolean parseModifierList(JetNodeType nodeType, @Nullable Consumer<IElementType> tokenConsumer, boolean allowShortAnnotations) {
PsiBuilder.Marker list = mark(); PsiBuilder.Marker list = mark();
boolean empty = true; boolean empty = true;
while (!eof()) { while (!eof()) {
@@ -336,8 +336,10 @@ public class JetParsing extends AbstractJetParsing {
* : annotation* * : annotation*
* ; * ;
*/ */
public void parseAnnotations(boolean allowShortAnnotations) { void parseAnnotations(boolean allowShortAnnotations) {
while (parseAnnotation(allowShortAnnotations)); while (true) {
if (!(parseAnnotation(allowShortAnnotations))) break;
}
} }
/* /*
@@ -417,7 +419,7 @@ public class JetParsing extends AbstractJetParsing {
* (classBody? | enumClassBody) * (classBody? | enumClassBody)
* ; * ;
*/ */
public IElementType parseClass(boolean enumClass) { IElementType parseClass(boolean enumClass) {
assert _atSet(CLASS_KEYWORD, TRAIT_KEYWORD); assert _atSet(CLASS_KEYWORD, TRAIT_KEYWORD);
advance(); // CLASS_KEYWORD or TRAIT_KEYWORD advance(); // CLASS_KEYWORD or TRAIT_KEYWORD
@@ -649,7 +651,7 @@ public class JetParsing extends AbstractJetParsing {
* : "object" SimpleName? ":" delegationSpecifier{","}? classBody? * : "object" SimpleName? ":" delegationSpecifier{","}? classBody?
* ; * ;
*/ */
public void parseObject(boolean named, boolean optionalBody) { void parseObject(boolean named, boolean optionalBody) {
assert _at(OBJECT_KEYWORD); assert _at(OBJECT_KEYWORD);
advance(); // OBJECT_KEYWORD advance(); // OBJECT_KEYWORD
@@ -785,7 +787,7 @@ public class JetParsing extends AbstractJetParsing {
* : modifiers "type" SimpleName (typeParameters typeConstraints)? "=" type * : modifiers "type" SimpleName (typeParameters typeConstraints)? "=" type
* ; * ;
*/ */
public JetNodeType parseTypeDef() { JetNodeType parseTypeDef() {
assert _at(TYPE_KEYWORD); assert _at(TYPE_KEYWORD);
advance(); // TYPE_KEYWORD advance(); // TYPE_KEYWORD
@@ -815,11 +817,11 @@ public class JetParsing extends AbstractJetParsing {
* (getter? setter? | setter? getter?) SEMI? * (getter? setter? | setter? getter?) SEMI?
* ; * ;
*/ */
public JetNodeType parseProperty() { private JetNodeType parseProperty() {
return parseProperty(false); return parseProperty(false);
} }
public JetNodeType parseProperty(boolean local) { JetNodeType parseProperty(boolean local) {
if (at(VAL_KEYWORD) || at(VAR_KEYWORD)) { if (at(VAL_KEYWORD) || at(VAR_KEYWORD)) {
advance(); // VAL_KEYWORD or VAR_KEYWORD advance(); // VAL_KEYWORD or VAR_KEYWORD
} }
@@ -970,7 +972,7 @@ public class JetParsing extends AbstractJetParsing {
* functionBody? * functionBody?
* ; * ;
*/ */
public IElementType parseFunction() { IElementType parseFunction() {
assert _at(FUN_KEYWORD); assert _at(FUN_KEYWORD);
advance(); // FUN_KEYWORD advance(); // FUN_KEYWORD
@@ -1086,7 +1088,7 @@ public class JetParsing extends AbstractJetParsing {
* : "{" (expressions)* "}" * : "{" (expressions)* "}"
* ; * ;
*/ */
public void parseBlock() { void parseBlock() {
PsiBuilder.Marker block = mark(); PsiBuilder.Marker block = mark();
myBuilder.enableNewlines(); myBuilder.enableNewlines();
@@ -1303,11 +1305,11 @@ public class JetParsing extends AbstractJetParsing {
* nullableType * nullableType
* : typeDescriptor "?" * : typeDescriptor "?"
*/ */
public void parseTypeRef() { void parseTypeRef() {
parseTypeRef(TokenSet.EMPTY); parseTypeRef(TokenSet.EMPTY);
} }
public void parseTypeRef(TokenSet extraRecoverySet) { void parseTypeRef(TokenSet extraRecoverySet) {
PsiBuilder.Marker typeRefMarker = parseTypeRefContents(extraRecoverySet); PsiBuilder.Marker typeRefMarker = parseTypeRefContents(extraRecoverySet);
typeRefMarker.done(TYPE_REFERENCE); typeRefMarker.done(TYPE_REFERENCE);
} }
@@ -1461,7 +1463,7 @@ public class JetParsing extends AbstractJetParsing {
/* /*
* (optionalProjection type){","} * (optionalProjection type){","}
*/ */
public PsiBuilder.Marker parseTypeArgumentList() { private PsiBuilder.Marker parseTypeArgumentList() {
if (!at(LT)) return null; if (!at(LT)) return null;
PsiBuilder.Marker list = mark(); PsiBuilder.Marker list = mark();
@@ -1472,7 +1474,7 @@ public class JetParsing extends AbstractJetParsing {
return list; return list;
} }
public boolean tryParseTypeArgumentList(TokenSet extraRecoverySet) { boolean tryParseTypeArgumentList(TokenSet extraRecoverySet) {
myBuilder.disableNewlines(); myBuilder.disableNewlines();
advance(); // LT advance(); // LT
@@ -1605,7 +1607,7 @@ public class JetParsing extends AbstractJetParsing {
* : parameter ("=" element)? * : parameter ("=" element)?
* ; * ;
*/ */
public void parseValueParameterList(boolean isFunctionTypeContents, TokenSet recoverySet) { void parseValueParameterList(boolean isFunctionTypeContents, TokenSet recoverySet) {
PsiBuilder.Marker parameters = mark(); PsiBuilder.Marker parameters = mark();
myBuilder.disableNewlines(); myBuilder.disableNewlines();
@@ -1736,10 +1738,6 @@ public class JetParsing extends AbstractJetParsing {
this.tokens = TokenSet.create(token); this.tokens = TokenSet.create(token);
} }
public TokenDetector(TokenSet tokens) {
this.tokens = tokens;
}
@Override @Override
public void consume(IElementType item) { public void consume(IElementType item) {
if (tokens.contains(item)) { if (tokens.contains(item)) {
@@ -22,8 +22,8 @@ import org.jetbrains.annotations.NotNull;
* @author Nikolay Krasko * @author Nikolay Krasko
*/ */
public final class ImportPath { public final class ImportPath {
final @NotNull FqName fqName; private final @NotNull FqName fqName;
final boolean isAllUnder; private final boolean isAllUnder;
public ImportPath(@NotNull FqName fqName, boolean isAllUnder) { public ImportPath(@NotNull FqName fqName, boolean isAllUnder) {
this.fqName = fqName; this.fqName = fqName;