Allow default object to be denoted with 'default' modifier
Report 'default' modifier in illegal positions
This commit is contained in:
@@ -91,7 +91,7 @@ public class JetObjectDeclaration extends JetNamedDeclarationStub<KotlinObjectSt
|
||||
if (stub != null) {
|
||||
return stub.isDefault();
|
||||
}
|
||||
return getClassKeyword() != null;
|
||||
return getClassKeyword() != null || hasModifier(JetTokens.DEFAULT_KEYWORD);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -39,6 +39,7 @@ import java.util.*;
|
||||
|
||||
import static org.jetbrains.kotlin.diagnostics.Errors.*;
|
||||
import static org.jetbrains.kotlin.lexer.JetTokens.*;
|
||||
import static org.jetbrains.kotlin.psi.JetStubbedPsiUtil.getContainingDeclaration;
|
||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isDefaultObject;
|
||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isEnumEntry;
|
||||
|
||||
@@ -141,6 +142,7 @@ public class ModifiersChecker {
|
||||
}
|
||||
else {
|
||||
checkInnerModifier(modifierListOwner, descriptor);
|
||||
checkDefaultModifier(modifierListOwner);
|
||||
checkModalityModifiers(modifierListOwner);
|
||||
checkVisibilityModifiers(modifierListOwner, descriptor);
|
||||
checkVarianceModifiersOfTypeParameters(modifierListOwner);
|
||||
@@ -232,6 +234,24 @@ public class ModifiersChecker {
|
||||
IN_OBJECT,
|
||||
}
|
||||
|
||||
private void checkDefaultModifier(@NotNull JetDeclaration declaration) {
|
||||
if (declaration.hasModifier(DEFAULT_KEYWORD) && !isDefaultModifierAllowed(declaration)) {
|
||||
reportIllegalModifiers(declaration, Collections.singletonList(DEFAULT_KEYWORD));
|
||||
}
|
||||
}
|
||||
|
||||
// NOTE: just checks if this is legal context for default modifier (Default object descriptor can be created)
|
||||
// DEFAULT_OBJECT_NOT_ALLOWED can be reported later
|
||||
public static boolean isDefaultModifierAllowed(@NotNull JetDeclaration declaration) {
|
||||
if (declaration instanceof JetObjectDeclaration) {
|
||||
JetDeclaration containingDeclaration = getContainingDeclaration(declaration);
|
||||
if (containingDeclaration instanceof JetClassOrObject) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static InnerModifierCheckResult checkIllegalInner(DeclarationDescriptor descriptor) {
|
||||
if (!(descriptor instanceof ClassDescriptor)) return InnerModifierCheckResult.ILLEGAL_POSITION;
|
||||
|
||||
+1
-1
@@ -20,9 +20,9 @@ import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.psi.*;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind;
|
||||
import org.jetbrains.kotlin.psi.JetObjectDeclaration;
|
||||
import org.jetbrains.kotlin.psi.JetParameter;
|
||||
import org.jetbrains.kotlin.psi.JetTypeParameterList;
|
||||
import org.jetbrains.kotlin.resolve.ModifiersChecker;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -54,6 +55,6 @@ public class JetObjectInfo extends JetClassOrObjectInfo<JetObjectDeclaration> {
|
||||
}
|
||||
|
||||
public boolean isDefaultObject() {
|
||||
return element.isDefault();
|
||||
return element.isDefault() && ModifiersChecker.isDefaultModifierAllowed(element);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user