提交 f89a29ff 编写于 作者: S svtk

rollback -resolveModifiers() method location

上级 5cb298c0
package org.jetbrains.jet.lang.descriptors;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.JetModifierList;
import org.jetbrains.jet.lexer.JetTokens;
/**
* @author svtk
*/
......@@ -28,13 +23,5 @@ public class ClassModifiers extends Modifiers {
return trait;
}
public static ClassModifiers resolveModifiers(@Nullable JetModifierList modifierList) {
if (modifierList == null) return DEFAULT_MODIFIERS;
return new ClassModifiers(
modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD),
modifierList.hasModifier(JetTokens.OPEN_KEYWORD) || modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD),
modifierList.hasModifier(JetTokens.TRAIT_KEYWORD)
);
}
}
package org.jetbrains.jet.lang.descriptors;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.JetModifierList;
import org.jetbrains.jet.lexer.JetTokens;
/**
* @author abreslav
*/
......@@ -32,19 +27,4 @@ public class MemberModifiers extends Modifiers {
public boolean isOverridable() {
return isAbstract() || isVirtual() || isOverride();
}
@NotNull
public static MemberModifiers resolveModifiers(@Nullable JetModifierList modifierList) {
return resolveModifiers(modifierList, DEFAULT_MODIFIERS);
}
@NotNull
public static MemberModifiers resolveModifiers(@Nullable JetModifierList modifierList, @NotNull MemberModifiers defaultModifiers) {
if (modifierList == null) return defaultModifiers;
return new MemberModifiers(
modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD),
modifierList.hasModifier(JetTokens.VIRTUAL_KEYWORD),
modifierList.hasModifier(JetTokens.OVERRIDE_KEYWORD)
);
}
}
......@@ -25,9 +25,6 @@ import java.util.*;
* @author abreslav
*/
public class ClassDescriptorResolver {
// private static final MemberModifiers DEFAULT_MODIFIERS = new MemberModifiers(false, false, false);
private final JetSemanticServices semanticServices;
private final TypeResolver typeResolver;
private final TypeResolver typeResolverNotCheckingBounds;
......@@ -144,7 +141,7 @@ public class ClassDescriptorResolver {
index++;
}
descriptor.setTypeParameterDescriptors(typeParameters);
descriptor.setClassModifiers(ClassModifiers.resolveModifiers(classElement.getModifierList()));
descriptor.setClassModifiers(resolveClassModifiers(classElement.getModifierList()));
trace.record(BindingContext.CLASS, classElement, descriptor);
}
......@@ -230,7 +227,7 @@ public class ClassDescriptorResolver {
typeParameterDescriptors,
valueParameterDescriptors,
returnType,
MemberModifiers.resolveModifiers(function.getModifierList()));
resolveMemberModifiers(function.getModifierList()));
trace.record(BindingContext.FUNCTION, function, functionDescriptor);
return functionDescriptor;
......@@ -463,7 +460,7 @@ public class ClassDescriptorResolver {
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(
containingDeclaration,
annotationResolver.createAnnotationStubs(modifierList),
MemberModifiers.resolveModifiers(modifierList), // TODO : default modifiers differ in different contexts
resolveMemberModifiers(modifierList), // TODO : default modifiers differ in different contexts
false,
null,
JetPsiUtil.safeName(objectDeclaration.getName()),
......@@ -513,7 +510,7 @@ public class ClassDescriptorResolver {
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(
containingDeclaration,
annotationResolver.resolveAnnotations(scope, modifierList),
MemberModifiers.resolveModifiers(modifierList), // TODO : default modifiers differ in different contexts
resolveMemberModifiers(modifierList), // TODO : default modifiers differ in different contexts
isVar,
receiverType,
JetPsiUtil.safeName(property.getName()),
......@@ -559,6 +556,30 @@ public class ClassDescriptorResolver {
return typeResolver.resolveType(scope, propertyTypeRef);
}
}
private static ClassModifiers resolveClassModifiers(@Nullable JetModifierList modifierList) {
if (modifierList == null) return ClassModifiers.DEFAULT_MODIFIERS;
return new ClassModifiers(
modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD),
modifierList.hasModifier(JetTokens.OPEN_KEYWORD) || modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD),
modifierList.hasModifier(JetTokens.TRAIT_KEYWORD)
);
}
@NotNull
private MemberModifiers resolveMemberModifiers(@Nullable JetModifierList modifierList, @NotNull MemberModifiers defaultModifiers) {
if (modifierList == null) return defaultModifiers;
return new MemberModifiers(
modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD),
modifierList.hasModifier(JetTokens.VIRTUAL_KEYWORD),
modifierList.hasModifier(JetTokens.OVERRIDE_KEYWORD)
);
}
@NotNull
private MemberModifiers resolveMemberModifiers(@Nullable JetModifierList modifierList) {
return resolveMemberModifiers(modifierList, MemberModifiers.DEFAULT_MODIFIERS);
}
@Nullable
private PropertySetterDescriptor resolvePropertySetterDescriptor(@NotNull JetScope scope, @NotNull JetProperty property, @NotNull PropertyDescriptor propertyDescriptor) {
......@@ -569,7 +590,7 @@ public class ClassDescriptorResolver {
JetParameter parameter = setter.getParameter();
setterDescriptor = new PropertySetterDescriptor(
MemberModifiers.resolveModifiers(setter.getModifierList()), // TODO : default modifiers differ in different contexts
resolveMemberModifiers(setter.getModifierList()), // TODO : default modifiers differ in different contexts
propertyDescriptor, annotations, setter.getBodyExpression() != null, false);
if (parameter != null) {
if (parameter.isRef()) {
......@@ -633,7 +654,7 @@ public class ClassDescriptorResolver {
}
getterDescriptor = new PropertyGetterDescriptor(
MemberModifiers.resolveModifiers(getter.getModifierList()), // TODO : default modifiers differ in different contexts
resolveMemberModifiers(getter.getModifierList()), // TODO : default modifiers differ in different contexts
propertyDescriptor, annotations, returnType, getter.getBodyExpression() != null, false);
trace.record(BindingContext.PROPERTY_ACCESSOR, getter, getterDescriptor);
}
......@@ -708,7 +729,7 @@ public class ClassDescriptorResolver {
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(
classDescriptor,
annotationResolver.resolveAnnotations(scope, modifierList),
MemberModifiers.resolveModifiers(modifierList),
resolveMemberModifiers(modifierList),
isMutable,
null,
name == null ? "<no name>" : name,
......
......@@ -451,7 +451,7 @@ public class TopDownAnalyzer {
@Override
public void visitNamedFunction(JetNamedFunction function) {
FunctionDescriptorImpl functionDescriptor = classDescriptorResolver.resolveFunctionDescriptor(namespaceLike, scope, function);
checkFunctionCorrectness(function, functionDescriptor, namespaceLike);
checkFunction(function, functionDescriptor, namespaceLike);
namespaceLike.addFunctionDescriptor(functionDescriptor);
functions.put(function, functionDescriptor);
declaringScopes.put(function, scope);
......@@ -550,14 +550,31 @@ public class TopDownAnalyzer {
private void bindOverridesInAClass(MutableClassDescriptor classDescriptor) {
for (FunctionDescriptor declaredFunction : classDescriptor.getFunctions()) {
// JetFunction function = (JetFunction) trace.get(BindingContext.DESCRIPTOR_TO_DECLARATION, declaredFunction);
// boolean isOverride = declaredFunction.getModifiers().isOverride();
for (JetType supertype : classDescriptor.getTypeConstructor().getSupertypes()) {
FunctionDescriptor overridden = findFunctionOverridableBy(declaredFunction, supertype);
if (overridden != null) {
// if (isOverride && !overridden.getModifiers().isOverridable()) {
// trace.getErrorHandler().genericError(function.getModifierList().getModifierNode(JetTokens.OVERRIDE_KEYWORD),
// "Method " + overridden.getName() + " in " + overridden.getContainingDeclaration().getName() + " is final and can not be overridden");
// isOverride = false;
// }
((FunctionDescriptorImpl) declaredFunction).addOverriddenFunction(overridden);
}
}
}
}
// if (declaredFunction.getModifiers().isOverride() && declaredFunction.getOverriddenDescriptors().size() == 0) {
// trace.getErrorHandler().genericError(function.getModifierList().getModifierNode(JetTokens.OVERRIDE_KEYWORD),
// "Method " + declaredFunction.getName() + " overrides nothing");
}
// if (!declaredFunction.getModifiers().isOverride() && declaredFunction.getOverriddenDescriptors().size() > 0) {
// FunctionDescriptor overriddenMethod = declaredFunction.getOverriddenDescriptors().iterator().next();
// trace.getErrorHandler().genericError(function.getNameIdentifier().getNode(),
// "Method " + declaredFunction.getName() + " overrides method " + overriddenMethod.getName() + " in class " +
// overriddenMethod.getContainingDeclaration().getName() + " and needs 'override' modifier");
}
// }
// }
@Nullable
private FunctionDescriptor findFunctionOverridableBy(@NotNull FunctionDescriptor declaredFunction, @NotNull JetType supertype) {
......@@ -916,11 +933,6 @@ public class TopDownAnalyzer {
if (setter != null && setterDescriptor != null) {
resolveFunctionBody(fieldAccessTrackingTrace, setter, setterDescriptor, accessorScope);
}
// JetExpression initializer = property.getInitializer();
// if (!property.isVar() && initializer != null && !trace.getBindingContext().get(BindingContext.BACKING_FIELD_REQUIRED, propertyDescriptor)) {
// trace.getErrorHandler().genericError(initializer.getNode(), "Initializer is not allowed here because this property has no setter and no backing field either");
// }
}
protected void checkProperty(JetProperty property, PropertyDescriptor propertyDescriptor, @Nullable ClassDescriptor classDescriptor) {
......@@ -968,7 +980,7 @@ public class TopDownAnalyzer {
}
}
protected void checkFunctionCorrectness(JetNamedFunction function, FunctionDescriptor functionDescriptor, DeclarationDescriptor containingDescriptor) {
protected void checkFunction(JetNamedFunction function, FunctionDescriptor functionDescriptor, DeclarationDescriptor containingDescriptor) {
PsiElement nameIdentifier = function.getNameIdentifier();
if (containingDescriptor instanceof ClassDescriptor) {
ClassDescriptor classDescriptor = (ClassDescriptor) containingDescriptor;
......
......@@ -27,5 +27,5 @@ public class TopDownAnalyzerForStandardLibrary extends TopDownAnalyzer {
@Override
protected void checkFunctionCorrectness(JetNamedFunction function, FunctionDescriptor functionDescriptor, DeclarationDescriptor containingDescriptor) {}
protected void checkFunction(JetNamedFunction function, FunctionDescriptor functionDescriptor, DeclarationDescriptor containingDescriptor) {}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册