Remove obsolete code from ModifiersChecker
Simplify existing code and move closer to usages
This commit is contained in:
@@ -17,7 +17,6 @@
|
||||
package org.jetbrains.kotlin.resolve;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -27,73 +26,20 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticFactory1;
|
||||
import org.jetbrains.kotlin.extensions.DeclarationAttributeAltererExtension;
|
||||
import org.jetbrains.kotlin.lexer.KtKeywordToken;
|
||||
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken;
|
||||
import org.jetbrains.kotlin.lexer.KtTokens;
|
||||
import org.jetbrains.kotlin.psi.*;
|
||||
import org.jetbrains.kotlin.resolve.checkers.DeclarationChecker;
|
||||
import org.jetbrains.kotlin.resolve.checkers.PublishedApiUsageChecker;
|
||||
import org.jetbrains.kotlin.resolve.checkers.UnderscoreChecker;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.jetbrains.kotlin.diagnostics.Errors.NESTED_CLASS_NOT_ALLOWED;
|
||||
import static org.jetbrains.kotlin.diagnostics.Errors.NESTED_OBJECT_NOT_ALLOWED;
|
||||
import static org.jetbrains.kotlin.lexer.KtTokens.*;
|
||||
import static org.jetbrains.kotlin.psi.KtStubbedPsiUtil.getContainingDeclaration;
|
||||
|
||||
public class ModifiersChecker {
|
||||
private static final Set<KtModifierKeywordToken> MODIFIERS_ILLEGAL_ON_PARAMETERS;
|
||||
|
||||
static {
|
||||
MODIFIERS_ILLEGAL_ON_PARAMETERS = Sets.newHashSet();
|
||||
MODIFIERS_ILLEGAL_ON_PARAMETERS.addAll(Arrays.asList(KtTokens.MODIFIER_KEYWORDS_ARRAY));
|
||||
MODIFIERS_ILLEGAL_ON_PARAMETERS.remove(KtTokens.VARARG_KEYWORD);
|
||||
}
|
||||
|
||||
public static boolean isIllegalInner(@NotNull DeclarationDescriptor descriptor) {
|
||||
return checkIllegalInner(descriptor) != InnerModifierCheckResult.ALLOWED;
|
||||
}
|
||||
|
||||
private enum InnerModifierCheckResult {
|
||||
ALLOWED,
|
||||
ILLEGAL_POSITION,
|
||||
IN_INTERFACE,
|
||||
IN_OBJECT,
|
||||
}
|
||||
|
||||
|
||||
// NOTE: just checks if this is legal context for companion modifier (Companion object descriptor can be created)
|
||||
// COMPANION_OBJECT_NOT_ALLOWED can be reported later
|
||||
public static boolean isCompanionModifierAllowed(@NotNull KtDeclaration declaration) {
|
||||
if (declaration instanceof KtObjectDeclaration) {
|
||||
KtDeclaration containingDeclaration = getContainingDeclaration(declaration);
|
||||
if (containingDeclaration instanceof KtClassOrObject) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static InnerModifierCheckResult checkIllegalInner(@NotNull DeclarationDescriptor descriptor) {
|
||||
if (!(descriptor instanceof ClassDescriptor)) return InnerModifierCheckResult.ILLEGAL_POSITION;
|
||||
ClassDescriptor classDescriptor = (ClassDescriptor) descriptor;
|
||||
|
||||
if (classDescriptor.getKind() != ClassKind.CLASS) return InnerModifierCheckResult.ILLEGAL_POSITION;
|
||||
|
||||
DeclarationDescriptor containingDeclaration = classDescriptor.getContainingDeclaration();
|
||||
if (!(containingDeclaration instanceof ClassDescriptor)) return InnerModifierCheckResult.ILLEGAL_POSITION;
|
||||
|
||||
if (DescriptorUtils.isInterface(containingDeclaration)) {
|
||||
return InnerModifierCheckResult.IN_INTERFACE;
|
||||
}
|
||||
else if (DescriptorUtils.isObject(containingDeclaration)) {
|
||||
return InnerModifierCheckResult.IN_OBJECT;
|
||||
}
|
||||
else {
|
||||
return InnerModifierCheckResult.ALLOWED;
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isIllegalNestedClass(@NotNull DeclarationDescriptor descriptor) {
|
||||
if (!(descriptor instanceof ClassDescriptor)) return false;
|
||||
DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration();
|
||||
@@ -192,20 +138,11 @@ public class ModifiersChecker {
|
||||
return defaultVisibility;
|
||||
}
|
||||
|
||||
public static boolean isInnerClass(@Nullable KtModifierList modifierList) {
|
||||
return modifierList != null && modifierList.hasModifier(INNER_KEYWORD);
|
||||
}
|
||||
|
||||
public class ModifiersCheckingProcedure {
|
||||
|
||||
@NotNull
|
||||
private final BindingTrace trace;
|
||||
@NotNull
|
||||
private final LanguageVersionSettings languageVersionSettings;
|
||||
|
||||
private ModifiersCheckingProcedure(@NotNull BindingTrace trace, LanguageVersionSettings languageVersionSettings) {
|
||||
private ModifiersCheckingProcedure(@NotNull BindingTrace trace) {
|
||||
this.trace = trace;
|
||||
this.languageVersionSettings = languageVersionSettings;
|
||||
}
|
||||
|
||||
public void checkParameterHasNoValOrVar(
|
||||
@@ -325,6 +262,6 @@ public class ModifiersChecker {
|
||||
|
||||
@NotNull
|
||||
public ModifiersCheckingProcedure withTrace(@NotNull BindingTrace trace) {
|
||||
return new ModifiersCheckingProcedure(trace, languageVersionSettings);
|
||||
return new ModifiersCheckingProcedure(trace);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,9 +19,10 @@ package org.jetbrains.kotlin.resolve.lazy.data;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind;
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject;
|
||||
import org.jetbrains.kotlin.psi.KtObjectDeclaration;
|
||||
import org.jetbrains.kotlin.psi.KtStubbedPsiUtil;
|
||||
import org.jetbrains.kotlin.psi.KtTypeParameterList;
|
||||
import org.jetbrains.kotlin.resolve.ModifiersChecker;
|
||||
|
||||
public class KtObjectInfo extends KtClassOrObjectInfo<KtObjectDeclaration> {
|
||||
@NotNull
|
||||
@@ -45,6 +46,7 @@ public class KtObjectInfo extends KtClassOrObjectInfo<KtObjectDeclaration> {
|
||||
}
|
||||
|
||||
public boolean isCompanionObject() {
|
||||
return element.isCompanion() && ModifiersChecker.isCompanionModifierAllowed(element);
|
||||
return element.isCompanion() &&
|
||||
KtStubbedPsiUtil.getContainingDeclaration(element) instanceof KtClassOrObject;
|
||||
}
|
||||
}
|
||||
|
||||
+17
-3
@@ -34,7 +34,10 @@ import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.psi.*;
|
||||
import org.jetbrains.kotlin.psi.psiUtil.KtPsiUtilKt;
|
||||
import org.jetbrains.kotlin.psi.synthetics.SyntheticClassOrObjectDescriptor;
|
||||
import org.jetbrains.kotlin.resolve.*;
|
||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
|
||||
import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil;
|
||||
import org.jetbrains.kotlin.resolve.lazy.LazyClassContext;
|
||||
@@ -63,8 +66,10 @@ import static kotlin.collections.CollectionsKt.firstOrNull;
|
||||
import static org.jetbrains.kotlin.descriptors.Visibilities.PRIVATE;
|
||||
import static org.jetbrains.kotlin.descriptors.Visibilities.PUBLIC;
|
||||
import static org.jetbrains.kotlin.diagnostics.Errors.*;
|
||||
import static org.jetbrains.kotlin.lexer.KtTokens.INNER_KEYWORD;
|
||||
import static org.jetbrains.kotlin.resolve.BindingContext.TYPE;
|
||||
import static org.jetbrains.kotlin.resolve.ModifiersChecker.*;
|
||||
import static org.jetbrains.kotlin.resolve.ModifiersChecker.resolveModalityFromModifiers;
|
||||
import static org.jetbrains.kotlin.resolve.ModifiersChecker.resolveVisibilityFromModifiers;
|
||||
|
||||
public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDescriptorWithResolutionScopes, LazyEntity {
|
||||
private static final Function1<KotlinType, Boolean> VALID_SUPERTYPE = type -> {
|
||||
@@ -158,7 +163,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
||||
}
|
||||
this.visibility = isLocal ? Visibilities.LOCAL : resolveVisibilityFromModifiers(modifierList, defaultVisibility);
|
||||
|
||||
this.isInner = isInnerClass(modifierList) && !ModifiersChecker.isIllegalInner(this);
|
||||
this.isInner = modifierList != null && modifierList.hasModifier(INNER_KEYWORD) && !isIllegalInner(this);
|
||||
this.isData = modifierList != null && modifierList.hasModifier(KtTokens.DATA_KEYWORD);
|
||||
this.isHeader = modifierList != null && modifierList.hasModifier(KtTokens.HEADER_KEYWORD);
|
||||
this.isImpl = modifierList != null && modifierList.hasModifier(KtTokens.IMPL_KEYWORD);
|
||||
@@ -258,6 +263,15 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
||||
this.sealedSubclasses = storageManager.createLazyValue(() -> DescriptorUtilsKt.computeSealedSubclasses(this));
|
||||
}
|
||||
|
||||
private static boolean isIllegalInner(@NotNull DeclarationDescriptor descriptor) {
|
||||
if (!DescriptorUtils.isClass(descriptor)) return true;
|
||||
|
||||
DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration();
|
||||
return !(containingDeclaration instanceof ClassDescriptor) ||
|
||||
DescriptorUtils.isInterface(containingDeclaration) ||
|
||||
DescriptorUtils.isObject(containingDeclaration);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private DeclarationDescriptor createInitializerScopeParent() {
|
||||
ConstructorDescriptor primaryConstructor = getUnsubstitutedPrimaryConstructor();
|
||||
|
||||
Reference in New Issue
Block a user