Prohibit modifiers on initializer #KT-4364 Fixed
This commit is contained in:
@@ -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()<!> {}
|
||||
}
|
||||
Reference in New Issue
Block a user