From 5c0e4fbaa6029a95f71650a9c5c35757dd1f25e4 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 16 Mar 2011 18:21:28 +0300 Subject: [PATCH] Unary + and -, redeclarations reported as errors --- .../lang/parsing/JetExpressionParsing.java | 6 ++ .../jet/lang/psi/JetNamedDeclaration.java | 57 ------------------- .../jet/lang/resolve/TopDownAnalyzer.java | 6 +- .../jet/lang/resolve/WritableScope.java | 13 +++-- .../jet/lang/types/JetTypeInferrer.java | 2 + .../org/jetbrains/jet/lexer/JetTokens.java | 5 +- 6 files changed, 22 insertions(+), 67 deletions(-) diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index ec09f5af435..f4d4c2e40a2 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -188,6 +188,12 @@ public class JetExpressionParsing extends AbstractJetParsing { IElementType[] usedOperations = ALL_OPERATIONS.getTypes(); Set usedSet = new HashSet(Arrays.asList(usedOperations)); +// if (opSet.size() > usedSet.size()) { +// opSet.removeAll(usedSet); +// assert false : opSet; +// } +// assert usedSet.size() == opSet.size(); + usedSet.removeAll(opSet); assert usedSet.isEmpty() : "" + usedSet; diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetNamedDeclaration.java b/idea/src/org/jetbrains/jet/lang/psi/JetNamedDeclaration.java index 1fb42c41916..9cf3319d8c3 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetNamedDeclaration.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetNamedDeclaration.java @@ -1,11 +1,8 @@ package org.jetbrains.jet.lang.psi; import com.intellij.lang.ASTNode; -import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiNameIdentifierOwner; -import com.intellij.psi.PsiReference; -import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -30,60 +27,6 @@ public abstract class JetNamedDeclaration extends JetDeclaration implements PsiN return findChildByType(JetTokens.IDENTIFIER); } - @Override - public PsiReference getReference() { - return new PsiReference() { - @Override - public PsiElement getElement() { - return getNameIdentifier(); - } - - @Override - public TextRange getRangeInElement() { - PsiElement element = getElement(); - if (element == null) return null; - return element.getTextRange().shiftRight(element.getTextOffset()); - } - - @Override - public PsiElement resolve() { - return PsiTreeUtil.getParentOfType(JetNamedDeclaration.this, JetFile.class); - } - - @NotNull - @Override - public String getCanonicalText() { - return ""; - } - - @Override - public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException { - throw new IncorrectOperationException(); - } - - @Override - public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException { - throw new IncorrectOperationException(); - } - - @Override - public boolean isReferenceTo(PsiElement element) { - return resolve() == element; - } - - @NotNull - @Override - public Object[] getVariants() { - return EMPTY_ARRAY; - } - - @Override - public boolean isSoft() { - return false; - } - }; - } - @Override public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException { return getNameIdentifier().replace(JetChangeUtil.createNameIdentifier(getProject(), name)); diff --git a/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java index d5caba0ad39..12a920b283a 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -117,11 +117,11 @@ public class TopDownAnalyzer { } private void processExtension(JetExtension extension) { - throw new UnsupportedOperationException(); // TODO + throw new UnsupportedOperationException(extension.getText()); // TODO } - private void processTypeDef(JetTypedef typedef) { - throw new UnsupportedOperationException(); // TODO + private void processTypeDef(@NotNull JetTypedef typedef) { + throw new UnsupportedOperationException(typedef.getText()); // TODO } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/idea/src/org/jetbrains/jet/lang/resolve/WritableScope.java b/idea/src/org/jetbrains/jet/lang/resolve/WritableScope.java index 7e55657bcf5..ed0fdcbf399 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/WritableScope.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/WritableScope.java @@ -149,8 +149,9 @@ public class WritableScope extends JetScopeAdapter { public void addTypeParameterDescriptor(TypeParameterDescriptor typeParameterDescriptor) { String name = typeParameterDescriptor.getName(); Map typeParameterDescriptors = getTypeParameterDescriptors(); - if (typeParameterDescriptors.containsKey(name)) { - throw new UnsupportedOperationException("Type parameter redeclared"); // TODO + TypeParameterDescriptor originalDescriptor = typeParameterDescriptors.get(name); + if (originalDescriptor != null) { + errorHandler.redeclaration(originalDescriptor, typeParameterDescriptor); } typeParameterDescriptors.put(name, typeParameterDescriptor); } @@ -178,9 +179,11 @@ public class WritableScope extends JetScopeAdapter { public void addClassAlias(String name, ClassDescriptor classDescriptor) { Map classDescriptors = getClassDescriptors(); - if (classDescriptors.put(name, classDescriptor) != null) { - throw new UnsupportedOperationException("Class redeclared: " + classDescriptor.getName()); + ClassDescriptor originalDescriptor = classDescriptors.get(name); + if (originalDescriptor != null) { + errorHandler.redeclaration(originalDescriptor, classDescriptor); } + classDescriptors.put(name, classDescriptor); } @Override @@ -219,7 +222,7 @@ public class WritableScope extends JetScopeAdapter { public void addNamespace(NamespaceDescriptor namespaceDescriptor) { NamespaceDescriptor oldValue = getNamespaceDescriptors().put(namespaceDescriptor.getName(), namespaceDescriptor); if (oldValue != null) { - throw new UnsupportedOperationException("Namespace redeclared: " + namespaceDescriptor.getName()); + errorHandler.redeclaration(oldValue, namespaceDescriptor); } } diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index a5b76e9877c..049c0dc33de 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -20,6 +20,8 @@ public class JetTypeInferrer { static { unaryOperationNames.put(JetTokens.PLUSPLUS, "inc"); unaryOperationNames.put(JetTokens.MINUSMINUS, "dec"); + unaryOperationNames.put(JetTokens.PLUS, "plus"); + unaryOperationNames.put(JetTokens.MINUS, "minus"); unaryOperationNames.put(JetTokens.EXCL, "not"); } diff --git a/idea/src/org/jetbrains/jet/lexer/JetTokens.java b/idea/src/org/jetbrains/jet/lexer/JetTokens.java index 413f9e0ce61..c287ff77a76 100644 --- a/idea/src/org/jetbrains/jet/lexer/JetTokens.java +++ b/idea/src/org/jetbrains/jet/lexer/JetTokens.java @@ -6,7 +6,6 @@ package org.jetbrains.jet.lexer; import com.intellij.psi.TokenType; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.TokenSet; -import org.jetbrains.jet.lang.parsing.JetExpressionParsing; public interface JetTokens { JetToken EOF = new JetToken("EOF"); @@ -163,6 +162,8 @@ public interface JetTokens { MINUS, EXCL, DIV, PERC, LT, GT, LTEQ, GTEQ, EQEQEQ, ARROW, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR, SAFE_ACCESS, ELVIS, // MAP, FILTER, - QUEST, COLON, SEMICOLON, RANGE, EQ, MULTEQ, DIVEQ, PERCEQ, PLUSEQ, MINUSEQ, + QUEST, COLON, +// SEMICOLON, + RANGE, EQ, MULTEQ, DIVEQ, PERCEQ, PLUSEQ, MINUSEQ, NOT_IN, NOT_IS, HASH, IDENTIFIER, LABEL_IDENTIFIER, ATAT, AT); }