Don't use DeclarationOrigin
This commit is contained in:
committed by
Alexander Udalov
parent
69295290eb
commit
1843b7bbbe
+1
-20
@@ -18,16 +18,10 @@ package org.jetbrains.jet.lang.resolve.java.provider;
|
||||
|
||||
import com.intellij.psi.PsiClass;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||
|
||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.JAVA;
|
||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.KOTLIN;
|
||||
|
||||
public class ClassPsiDeclarationProviderImpl extends PsiDeclarationProviderBase implements ClassPsiDeclarationProvider {
|
||||
|
||||
@NotNull
|
||||
protected final DeclarationOrigin declarationOrigin;
|
||||
@NotNull
|
||||
protected final PsiClassFinder psiClassFinder;
|
||||
|
||||
@@ -40,14 +34,12 @@ public class ClassPsiDeclarationProviderImpl extends PsiDeclarationProviderBase
|
||||
this.staticMembers = staticMembers;
|
||||
this.psiClass = psiClass;
|
||||
this.psiClassFinder = psiClassFinder;
|
||||
this.declarationOrigin = determineOrigin(psiClass);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
protected MembersCache buildMembersCache() {
|
||||
return MembersCache.buildMembersByNameCache(new MembersCache(), psiClassFinder, psiClass, null, staticMembers,
|
||||
getDeclarationOrigin() == KOTLIN);
|
||||
return MembersCache.buildMembersByNameCache(new MembersCache(), psiClassFinder, psiClass, null, staticMembers);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -56,17 +48,6 @@ public class ClassPsiDeclarationProviderImpl extends PsiDeclarationProviderBase
|
||||
return psiClass;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public DeclarationOrigin getDeclarationOrigin() {
|
||||
return declarationOrigin;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static DeclarationOrigin determineOrigin(@Nullable PsiClass psiClass) {
|
||||
return JAVA;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isStaticMembers() {
|
||||
return staticMembers;
|
||||
|
||||
-22
@@ -1,22 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet.lang.resolve.java.provider;
|
||||
|
||||
public enum DeclarationOrigin {
|
||||
JAVA,
|
||||
KOTLIN
|
||||
}
|
||||
+3
-10
@@ -104,11 +104,10 @@ public final class MembersCache {
|
||||
@NotNull PsiClassFinder finder,
|
||||
@Nullable PsiClass psiClass,
|
||||
@Nullable PsiPackage psiPackage,
|
||||
boolean staticMembers,
|
||||
boolean isKotlin
|
||||
boolean staticMembers
|
||||
) {
|
||||
if (psiClass != null) {
|
||||
membersCache.new ClassMemberProcessor(new PsiClassWrapper(psiClass), staticMembers, isKotlin).process();
|
||||
membersCache.new ClassMemberProcessor(new PsiClassWrapper(psiClass), staticMembers).process();
|
||||
}
|
||||
|
||||
//TODO:
|
||||
@@ -145,12 +144,10 @@ public final class MembersCache {
|
||||
@NotNull
|
||||
private final PsiClassWrapper psiClass;
|
||||
private final boolean staticMembers;
|
||||
private final boolean kotlin;
|
||||
|
||||
private ClassMemberProcessor(@NotNull PsiClassWrapper psiClass, boolean staticMembers, boolean kotlin) {
|
||||
private ClassMemberProcessor(@NotNull PsiClassWrapper psiClass, boolean staticMembers) {
|
||||
this.psiClass = psiClass;
|
||||
this.staticMembers = staticMembers;
|
||||
this.kotlin = kotlin;
|
||||
}
|
||||
|
||||
public void process() {
|
||||
@@ -160,10 +157,6 @@ public final class MembersCache {
|
||||
}
|
||||
|
||||
private void processFields() {
|
||||
// Hack to load static members for enum class loaded from class file
|
||||
if (kotlin && !psiClass.getPsiClass().isEnum()) {
|
||||
return;
|
||||
}
|
||||
for (final PsiField field : psiClass.getPsiClass().getAllFields()) {
|
||||
addTask(field, new RunOnce() {
|
||||
@Override
|
||||
|
||||
+1
-10
@@ -20,9 +20,6 @@ import com.intellij.psi.PsiPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||
|
||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.JAVA;
|
||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.KOTLIN;
|
||||
|
||||
public final class PackagePsiDeclarationProviderImpl extends PsiDeclarationProviderBase implements PackagePsiDeclarationProvider {
|
||||
|
||||
@NotNull
|
||||
@@ -48,12 +45,6 @@ public final class PackagePsiDeclarationProviderImpl extends PsiDeclarationProvi
|
||||
@NotNull
|
||||
@Override
|
||||
protected MembersCache buildMembersCache() {
|
||||
return MembersCache.buildMembersByNameCache(new MembersCache(), psiClassFinder, null, getPsiPackage(), true, getDeclarationOrigin() == KOTLIN);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public DeclarationOrigin getDeclarationOrigin() {
|
||||
return JAVA;
|
||||
return MembersCache.buildMembersByNameCache(new MembersCache(), psiClassFinder, null, getPsiPackage(), true);
|
||||
}
|
||||
}
|
||||
|
||||
-3
@@ -22,7 +22,4 @@ public interface PsiDeclarationProvider {
|
||||
|
||||
@NotNull
|
||||
MembersCache getMembersCache();
|
||||
|
||||
@NotNull
|
||||
DeclarationOrigin getDeclarationOrigin();
|
||||
}
|
||||
|
||||
+1
-1
@@ -289,7 +289,7 @@ public final class JavaClassResolver {
|
||||
|
||||
// TODO: ugly hack: tests crash if initializeTypeParameters called with class containing proper supertypes
|
||||
List<TypeParameterDescriptor> classTypeParameters = classDescriptor.getTypeConstructor().getParameters();
|
||||
supertypes.addAll(supertypesResolver.getSupertypes(classDescriptor, new PsiClassWrapper(psiClass), classData, classTypeParameters));
|
||||
supertypes.addAll(supertypesResolver.getSupertypes(classDescriptor, new PsiClassWrapper(psiClass), classTypeParameters));
|
||||
|
||||
if (psiClass.isEnum()) {
|
||||
ClassDescriptorFromJvmBytecode classObjectDescriptor = createClassObjectDescriptorForEnum(classDescriptor, psiClass);
|
||||
|
||||
+9
-17
@@ -34,7 +34,9 @@ import org.jetbrains.jet.lang.resolve.java.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesPropagationData;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.PackagePsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
@@ -49,8 +51,6 @@ import java.util.Set;
|
||||
|
||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
|
||||
import static org.jetbrains.jet.lang.resolve.OverridingUtil.*;
|
||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.JAVA;
|
||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.KOTLIN;
|
||||
import static org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils.*;
|
||||
|
||||
public final class JavaFunctionResolver {
|
||||
@@ -97,13 +97,13 @@ public final class JavaFunctionResolver {
|
||||
) {
|
||||
PsiClass containingClass = method.getPsiMethod().getContainingClass();
|
||||
assert containingClass != null : "containing class is null for " + method;
|
||||
return resolveMethodToFunctionDescriptor(containingClass, method, DeclarationOrigin.JAVA, ownerDescriptor, false);
|
||||
return resolveMethodToFunctionDescriptor(containingClass, method, ownerDescriptor, false);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private SimpleFunctionDescriptor resolveMethodToFunctionDescriptor(
|
||||
@NotNull PsiClass psiClass, PsiMethodWrapper method,
|
||||
@NotNull DeclarationOrigin declarationOrigin, @NotNull ClassOrNamespaceDescriptor ownerDescriptor, boolean record
|
||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor, boolean record
|
||||
) {
|
||||
if (!DescriptorResolverUtils.isCorrectOwnerForEnumMember(ownerDescriptor, method.getPsiMember())) {
|
||||
return null;
|
||||
@@ -116,14 +116,6 @@ public final class JavaFunctionResolver {
|
||||
|
||||
PsiMethod psiMethod = method.getPsiMethod();
|
||||
PsiClass containingClass = psiMethod.getContainingClass();
|
||||
if (declarationOrigin == KOTLIN) {
|
||||
// TODO: unless maybe class explicitly extends Object
|
||||
assert containingClass != null;
|
||||
String ownerClassName = containingClass.getQualifiedName();
|
||||
if (DescriptorResolverUtils.OBJECT_FQ_NAME.asString().equals(ownerClassName)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (trace.get(BindingContext.FUNCTION, psiMethod) != null) {
|
||||
return trace.get(BindingContext.FUNCTION, psiMethod);
|
||||
@@ -195,7 +187,7 @@ public final class JavaFunctionResolver {
|
||||
BindingContextUtils.recordFunctionDeclarationToDescriptor(trace, psiMethod, functionDescriptorImpl);
|
||||
}
|
||||
|
||||
if (declarationOrigin == JAVA && record) {
|
||||
if (record) {
|
||||
trace.record(JavaBindingContext.IS_DECLARED_IN_JAVA, functionDescriptorImpl);
|
||||
}
|
||||
|
||||
@@ -260,7 +252,7 @@ public final class JavaFunctionResolver {
|
||||
@NotNull
|
||||
private Set<FunctionDescriptor> resolveNamedGroupFunctions(
|
||||
@NotNull ClassOrNamespaceDescriptor owner, @NotNull PsiClass psiClass,
|
||||
NamedMembers namedMembers, Name methodName, PsiDeclarationProvider scopeData
|
||||
NamedMembers namedMembers, Name methodName
|
||||
) {
|
||||
|
||||
Set<SimpleFunctionDescriptor> functionsFromSupertypes = null;
|
||||
@@ -271,7 +263,7 @@ public final class JavaFunctionResolver {
|
||||
Set<SimpleFunctionDescriptor> functionsFromCurrent = Sets.newHashSet();
|
||||
for (PsiMethodWrapper method : namedMembers.getMethods()) {
|
||||
SimpleFunctionDescriptor function =
|
||||
resolveMethodToFunctionDescriptor(psiClass, method, scopeData.getDeclarationOrigin(), owner, true);
|
||||
resolveMethodToFunctionDescriptor(psiClass, method, owner, true);
|
||||
if (function != null) {
|
||||
functionsFromCurrent.add(function);
|
||||
ContainerUtil.addIfNotNull(functionsFromCurrent, resolveSamAdapter(function));
|
||||
@@ -393,7 +385,7 @@ public final class JavaFunctionResolver {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
PsiClass psiClass = scopeData.getPsiClass();
|
||||
return resolveNamedGroupFunctions(ownerDescriptor, psiClass, namedMembers, methodName, scopeData);
|
||||
return resolveNamedGroupFunctions(ownerDescriptor, psiClass, namedMembers, methodName);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+4
-19
@@ -41,8 +41,6 @@ import org.jetbrains.jet.lang.types.TypeUtils;
|
||||
import javax.inject.Inject;
|
||||
import java.util.*;
|
||||
|
||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.JAVA;
|
||||
|
||||
//TODO: getters and setter are not working
|
||||
public final class JavaPropertyResolver {
|
||||
|
||||
@@ -85,14 +83,13 @@ public final class JavaPropertyResolver {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
return resolveNamedGroupProperties(ownerDescriptor, scopeData, namedMembers, fieldName,
|
||||
return resolveNamedGroupProperties(ownerDescriptor, namedMembers, fieldName,
|
||||
"class or namespace " + DescriptorUtils.getFQName(ownerDescriptor));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private Set<VariableDescriptor> resolveNamedGroupProperties(
|
||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor,
|
||||
@NotNull PsiDeclarationProvider scopeData,
|
||||
@NotNull NamedMembers namedMembers,
|
||||
@NotNull Name propertyName,
|
||||
@NotNull String context
|
||||
@@ -116,7 +113,7 @@ public final class JavaPropertyResolver {
|
||||
continue;
|
||||
}
|
||||
|
||||
propertiesFromCurrent.add(resolveProperty(ownerDescriptor, scopeData, propertyName, context, propertyPsiData));
|
||||
propertiesFromCurrent.add(resolveProperty(ownerDescriptor, propertyName, context, propertyPsiData));
|
||||
}
|
||||
|
||||
Set<PropertyDescriptor> propertiesFromSupertypes = getPropertiesFromSupertypes(propertyName, ownerDescriptor);
|
||||
@@ -163,12 +160,10 @@ public final class JavaPropertyResolver {
|
||||
@NotNull
|
||||
private PropertyDescriptor resolveProperty(
|
||||
@NotNull ClassOrNamespaceDescriptor owner,
|
||||
@NotNull PsiDeclarationProvider scopeData,
|
||||
@NotNull Name propertyName,
|
||||
@NotNull String context,
|
||||
@NotNull PropertyPsiData psiData
|
||||
) {
|
||||
boolean isFinal = isPropertyFinal(scopeData, psiData);
|
||||
boolean isVar = psiData.isVar();
|
||||
|
||||
PropertyPsiDataElement characteristicMember = psiData.getCharacteristicMember();
|
||||
@@ -182,7 +177,7 @@ public final class JavaPropertyResolver {
|
||||
}
|
||||
|
||||
PropertyDescriptorImpl propertyDescriptor =
|
||||
createPropertyDescriptor(owner, propertyName, psiData, isFinal, isVar, visibility, kind);
|
||||
createPropertyDescriptor(owner, propertyName, psiData, true, isVar, visibility, kind);
|
||||
|
||||
PropertyGetterDescriptorImpl getterDescriptor = resolveGetter(visibility, kind, getter, propertyDescriptor);
|
||||
PropertySetterDescriptorImpl setterDescriptor = resolveSetter(psiData, kind, propertyDescriptor);
|
||||
@@ -206,12 +201,9 @@ public final class JavaPropertyResolver {
|
||||
receiverType
|
||||
);
|
||||
initializeSetterAndGetter(propertyDescriptor, getterDescriptor, setterDescriptor, propertyType, psiData);
|
||||
|
||||
trace.record(BindingContext.VARIABLE, psiData.getCharacteristicPsi(), propertyDescriptor);
|
||||
|
||||
if (scopeData.getDeclarationOrigin() == JAVA) {
|
||||
trace.record(JavaBindingContext.IS_DECLARED_IN_JAVA, propertyDescriptor);
|
||||
}
|
||||
trace.record(JavaBindingContext.IS_DECLARED_IN_JAVA, propertyDescriptor);
|
||||
|
||||
if (AnnotationUtils.isPropertyAcceptableAsAnnotationParameter(propertyDescriptor) && psiData.getCharacteristicPsi() instanceof PsiField) {
|
||||
PsiExpression initializer = ((PsiField) psiData.getCharacteristicPsi()).getInitializer();
|
||||
@@ -442,13 +434,6 @@ public final class JavaPropertyResolver {
|
||||
return regularPropertiesCount;
|
||||
}
|
||||
|
||||
private static boolean isPropertyFinal(PsiDeclarationProvider scopeData, PropertyPsiData psiData) {
|
||||
if (scopeData.getDeclarationOrigin() == JAVA) {
|
||||
return true;
|
||||
}
|
||||
return psiData.isFinal();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Set<PropertyDescriptor> getPropertiesFromSupertypes(
|
||||
@NotNull Name propertyName, @NotNull ClassOrNamespaceDescriptor ownerDescriptor
|
||||
|
||||
+2
-9
@@ -26,7 +26,6 @@ import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.resolve.java.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiClassWrapper;
|
||||
import org.jetbrains.jet.lang.types.ErrorUtils;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
@@ -38,8 +37,6 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.KOTLIN;
|
||||
|
||||
public final class JavaSupertypeResolver {
|
||||
|
||||
private BindingTrace trace;
|
||||
@@ -64,7 +61,6 @@ public final class JavaSupertypeResolver {
|
||||
public Collection<JetType> getSupertypes(
|
||||
@NotNull ClassDescriptor classDescriptor,
|
||||
@NotNull PsiClassWrapper psiClass,
|
||||
@NotNull ClassPsiDeclarationProvider classData,
|
||||
@NotNull List<TypeParameterDescriptor> typeParameters
|
||||
) {
|
||||
|
||||
@@ -80,20 +76,17 @@ public final class JavaSupertypeResolver {
|
||||
reportIncompleteHierarchyForErrorTypes(classDescriptor, result);
|
||||
|
||||
if (result.isEmpty()) {
|
||||
addBaseClass(psiClass, classData, classDescriptor, result);
|
||||
addBaseClass(psiClass, classDescriptor, result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private void addBaseClass(
|
||||
@NotNull PsiClassWrapper psiClass,
|
||||
@NotNull ClassPsiDeclarationProvider classData,
|
||||
@NotNull ClassDescriptor classDescriptor,
|
||||
@NotNull List<JetType> result
|
||||
) {
|
||||
if (classData.getDeclarationOrigin() == KOTLIN
|
||||
|| DescriptorResolverUtils.OBJECT_FQ_NAME.equalsTo(psiClass.getQualifiedName())
|
||||
// TODO: annotations
|
||||
if (DescriptorResolverUtils.OBJECT_FQ_NAME.equalsTo(psiClass.getQualifiedName())
|
||||
|| classDescriptor.getKind() == ClassKind.ANNOTATION_CLASS) {
|
||||
result.add(KotlinBuiltIns.getInstance().getAnyType());
|
||||
}
|
||||
|
||||
+6
-14
@@ -69,15 +69,18 @@ public final class PropertyPsiData {
|
||||
}
|
||||
|
||||
private static void checkDuplicatePropertyComponent(
|
||||
@NotNull PropertyPsiDataElement checked, @NotNull String componentTypeName, @Nullable PropertyPsiDataElement existent) {
|
||||
@NotNull PropertyPsiDataElement checked, @NotNull String componentTypeName, @Nullable PropertyPsiDataElement existent
|
||||
) {
|
||||
if (existent != null) {
|
||||
PsiClass checkedElementClass = checked.getMember().getPsiMember().getContainingClass();
|
||||
PsiClass existentElementClass = existent.getMember().getPsiMember().getContainingClass();
|
||||
|
||||
throw new IllegalStateException(
|
||||
String.format("Psi element '%s' in class '%s' overwrites '%s' in class '%s' while generating %s component for property",
|
||||
checked.getMember().getPsiMember(), checkedElementClass != null ? checkedElementClass.getQualifiedName() : "<no-class>",
|
||||
existent.getMember().getPsiMember(), existentElementClass != null ? existentElementClass.getQualifiedName() : "<no-class>",
|
||||
checked.getMember().getPsiMember(),
|
||||
checkedElementClass != null ? checkedElementClass.getQualifiedName() : "<no-class>",
|
||||
existent.getMember().getPsiMember(),
|
||||
existentElementClass != null ? existentElementClass.getQualifiedName() : "<no-class>",
|
||||
componentTypeName));
|
||||
}
|
||||
}
|
||||
@@ -194,15 +197,4 @@ public final class PropertyPsiData {
|
||||
public boolean isPropertyForNamedObject() {
|
||||
return field != null && JvmAbi.INSTANCE_FIELD.equals(field.getMember().getName());
|
||||
}
|
||||
|
||||
public boolean isFinal() {
|
||||
if (getter != null) {
|
||||
return getter.getMember().isFinal();
|
||||
}
|
||||
if (setter != null) {
|
||||
return setter.getMember().isFinal();
|
||||
}
|
||||
assert field != null : "Property with no getter and no setter should at least have a backing field";
|
||||
return field.getMember().isFinal();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user