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.Maps;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.util.containers.Queue;
|
import com.intellij.util.containers.Queue;
|
||||||
import org.jetbrains.annotations.NotNull;
|
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.DataFlowUtils;
|
||||||
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
||||||
import org.jetbrains.jet.lang.types.expressions.LabelResolver;
|
import org.jetbrains.jet.lang.types.expressions.LabelResolver;
|
||||||
|
import org.jetbrains.jet.lexer.JetKeywordToken;
|
||||||
import org.jetbrains.jet.lexer.JetTokens;
|
import org.jetbrains.jet.lexer.JetTokens;
|
||||||
import org.jetbrains.jet.util.Box;
|
import org.jetbrains.jet.util.Box;
|
||||||
import org.jetbrains.jet.util.ReenteringLazyValueComputationException;
|
import org.jetbrains.jet.util.ReenteringLazyValueComputationException;
|
||||||
@@ -364,17 +366,28 @@ public class BodyResolver {
|
|||||||
if (primaryConstructor != null) {
|
if (primaryConstructor != null) {
|
||||||
for (JetClassInitializer anonymousInitializer : anonymousInitializers) {
|
for (JetClassInitializer anonymousInitializer : anonymousInitializers) {
|
||||||
expressionTypingServices.getType(scopeForInitializers, anonymousInitializer.getBody(), NO_EXPECTED_TYPE, context.getOuterDataFlowInfo(), trace);
|
expressionTypingServices.getType(scopeForInitializers, anonymousInitializer.getBody(), NO_EXPECTED_TYPE, context.getOuterDataFlowInfo(), trace);
|
||||||
annotationResolver.resolveAnnotationsWithArguments(scopeForInitializers, anonymousInitializer.getModifierList(), trace);
|
processModifiersOnInitializer(anonymousInitializer, scopeForInitializers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (JetClassInitializer anonymousInitializer : anonymousInitializers) {
|
for (JetClassInitializer anonymousInitializer : anonymousInitializers) {
|
||||||
trace.report(ANONYMOUS_INITIALIZER_IN_TRAIT.on(anonymousInitializer));
|
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() {
|
private void resolvePrimaryConstructorParameters() {
|
||||||
for (Map.Entry<JetClassOrObject, MutableClassDescriptor> entry : context.getClasses().entrySet()) {
|
for (Map.Entry<JetClassOrObject, MutableClassDescriptor> entry : context.getClasses().entrySet()) {
|
||||||
if (!(entry.getKey() instanceof JetClass)) continue;
|
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) {}
|
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