Prohibit modifiers on initializer #KT-4364 Fixed

This commit is contained in:
Natalia Ukhorskaya
2013-12-31 12:16:47 +04:00
parent 161998d2b8
commit 9fb3a22a39
2 changed files with 30 additions and 2 deletions
@@ -18,6 +18,7 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.util.containers.Queue;
import org.jetbrains.annotations.NotNull;
@@ -39,6 +40,7 @@ import org.jetbrains.jet.lang.types.*;
import org.jetbrains.jet.lang.types.expressions.DataFlowUtils;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.types.expressions.LabelResolver;
import org.jetbrains.jet.lexer.JetKeywordToken;
import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.jet.util.Box;
import org.jetbrains.jet.util.ReenteringLazyValueComputationException;
@@ -364,17 +366,28 @@ public class BodyResolver {
if (primaryConstructor != null) {
for (JetClassInitializer anonymousInitializer : anonymousInitializers) {
expressionTypingServices.getType(scopeForInitializers, anonymousInitializer.getBody(), NO_EXPECTED_TYPE, context.getOuterDataFlowInfo(), trace);
annotationResolver.resolveAnnotationsWithArguments(scopeForInitializers, anonymousInitializer.getModifierList(), trace);
processModifiersOnInitializer(anonymousInitializer, scopeForInitializers);
}
}
else {
for (JetClassInitializer anonymousInitializer : anonymousInitializers) {
trace.report(ANONYMOUS_INITIALIZER_IN_TRAIT.on(anonymousInitializer));
annotationResolver.resolveAnnotationsWithArguments(scopeForInitializers, anonymousInitializer.getModifierList(), trace);
processModifiersOnInitializer(anonymousInitializer, scopeForInitializers);
}
}
}
private void processModifiersOnInitializer(@NotNull JetModifierListOwner owner, @NotNull JetScope scope) {
JetModifierList modifierList = owner.getModifierList();
if (modifierList == null) return;
annotationResolver.resolveAnnotationsWithArguments(scope, modifierList, trace);
for (ASTNode node : modifierList.getModifierNodes()) {
trace.report(ILLEGAL_MODIFIER.on(node.getPsi(), (JetKeywordToken) node.getElementType()));
}
}
private void resolvePrimaryConstructorParameters() {
for (Map.Entry<JetClassOrObject, MutableClassDescriptor> entry : context.getClasses().entrySet()) {
if (!(entry.getKey() instanceof JetClass)) continue;
@@ -66,3 +66,18 @@ abstract class IllegalModifiers5() {
try {} catch (annotated("a text") <!ILLEGAL_MODIFIER!>abstract<!> <!ILLEGAL_MODIFIER!>public<!> e: Exception) {}
}
}
//Check illegal modifiers on anonymous initializers
abstract class IllegalModifiers6() {
<!ILLEGAL_MODIFIER!>public<!> {}
<!ILLEGAL_MODIFIER!>private<!> {}
<!ILLEGAL_MODIFIER!>protected<!> {}
<!ILLEGAL_MODIFIER!>vararg<!> {}
<!ILLEGAL_MODIFIER!>abstract<!> {}
<!ILLEGAL_MODIFIER!>open<!> {}
<!ILLEGAL_MODIFIER!>final<!> {}
<!ILLEGAL_MODIFIER!>public<!> annotated {}
<!ILLEGAL_MODIFIER!>private<!> <!NOT_AN_ANNOTATION_CLASS!>IllegalModifiers6()<!> {}
}