diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetObjectDeclarationName.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetObjectDeclarationName.java index 3fbc07d0c97..7df092981ed 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetObjectDeclarationName.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetObjectDeclarationName.java @@ -17,16 +17,47 @@ package org.jetbrains.jet.lang.psi; import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; import com.intellij.psi.search.SearchScope; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.util.IncorrectOperationException; +import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lexer.JetTokens; -public class JetObjectDeclarationName extends JetNamedDeclarationNotStubbed { - +public class JetObjectDeclarationName extends JetExpressionImpl { public JetObjectDeclarationName(@NotNull ASTNode node) { super(node); } + @Override + @Nullable + public String getName() { + PsiElement identifier = getNameIdentifier(); + if (identifier != null) { + String text = identifier.getText(); + return text != null ? JetPsiUtil.unquoteIdentifier(text) : null; + } + else { + return null; + } + } + + public PsiElement getNameIdentifier() { + return findChildByType(JetTokens.IDENTIFIER); + } + + public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException { + return getNameIdentifier().replace(JetPsiFactory.createNameIdentifier(getProject(), name)); + } + + @Override + public int getTextOffset() { + PsiElement identifier = getNameIdentifier(); + return identifier != null ? identifier.getTextRange().getStartOffset() : getTextRange().getStartOffset(); + } + @Override public void accept(@NotNull JetVisitorVoid visitor) { visitor.visitObjectDeclarationName(this); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java index 4fa4ee02c0e..28b10e59324 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java @@ -383,7 +383,7 @@ public class JetVisitor extends PsiElementVisitor { } public R visitObjectDeclarationName(@NotNull JetObjectDeclarationName declarationName, D data) { - return visitNamedDeclaration(declarationName, data); + return visitExpression(declarationName, data); } public R visitStringTemplateEntry(@NotNull JetStringTemplateEntry entry, D data) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitorVoid.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitorVoid.java index a7985b62e30..4692d04e670 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitorVoid.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitorVoid.java @@ -373,7 +373,7 @@ public class JetVisitorVoid extends PsiElementVisitor { } public void visitObjectDeclarationName(@NotNull JetObjectDeclarationName declaration) { - visitNamedDeclaration(declaration); + visitExpression(declaration); } public void visitStringTemplateEntry(@NotNull JetStringTemplateEntry entry) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java index 2108c93655f..132f6008fa5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java @@ -332,13 +332,6 @@ public class ResolveSession implements KotlinCodeAnalyzer { return getBindingContext().get(BindingContext.DECLARATION_TO_DESCRIPTOR, property); } - @Override - public DeclarationDescriptor visitObjectDeclarationName(@NotNull JetObjectDeclarationName declarationName, Void data) { - JetScope scopeForDeclaration = getInjector().getScopeProvider().getResolutionScopeForDeclaration(declarationName.getParent()); - scopeForDeclaration.getProperties(safeNameForLazyResolve(declarationName)); - return getBindingContext().get(BindingContext.DECLARATION_TO_DESCRIPTOR, declarationName); - } - @Override public DeclarationDescriptor visitJetElement(@NotNull JetElement element, Void data) { throw new IllegalArgumentException("Unsupported declaration type: " + element + " " + diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java index e53cea6792b..496f872c88b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java @@ -137,21 +137,12 @@ public class ScopeProvider { return getFileScope((JetFile) elementOfDeclaration.getContainingFile()); } - assert jetDeclaration != null : "Can't happen because of getParentOfType(null, ?) == null"; - if (parentDeclaration instanceof JetClassOrObject) { JetClassOrObject classOrObject = (JetClassOrObject) parentDeclaration; LazyClassDescriptor classDescriptor = (LazyClassDescriptor) resolveSession.getClassDescriptor(classOrObject); if (jetDeclaration instanceof JetClassInitializer || jetDeclaration instanceof JetProperty) { return classDescriptor.getScopeForPropertyInitializerResolution(); } - if (jetDeclaration instanceof JetEnumEntry) { - LazyClassDescriptor descriptor = (LazyClassDescriptor) classDescriptor.getClassObjectDescriptor(); - assert descriptor != null : "There should be class object descriptor for enum class " + parentDeclaration.getText() + - " on entry " + jetDeclaration.getText(); - - return descriptor.getScopeForMemberDeclarationResolution(); - } return classDescriptor.getScopeForMemberDeclarationResolution(); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java index 8e5a44cb6a0..f62ad117f65 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java @@ -247,7 +247,7 @@ public abstract class AbstractLazyMemberScope