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 com.intellij.psi.PsiClass;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
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 {
|
public class ClassPsiDeclarationProviderImpl extends PsiDeclarationProviderBase implements ClassPsiDeclarationProvider {
|
||||||
|
|
||||||
@NotNull
|
|
||||||
protected final DeclarationOrigin declarationOrigin;
|
|
||||||
@NotNull
|
@NotNull
|
||||||
protected final PsiClassFinder psiClassFinder;
|
protected final PsiClassFinder psiClassFinder;
|
||||||
|
|
||||||
@@ -40,14 +34,12 @@ public class ClassPsiDeclarationProviderImpl extends PsiDeclarationProviderBase
|
|||||||
this.staticMembers = staticMembers;
|
this.staticMembers = staticMembers;
|
||||||
this.psiClass = psiClass;
|
this.psiClass = psiClass;
|
||||||
this.psiClassFinder = psiClassFinder;
|
this.psiClassFinder = psiClassFinder;
|
||||||
this.declarationOrigin = determineOrigin(psiClass);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
protected MembersCache buildMembersCache() {
|
protected MembersCache buildMembersCache() {
|
||||||
return MembersCache.buildMembersByNameCache(new MembersCache(), psiClassFinder, psiClass, null, staticMembers,
|
return MembersCache.buildMembersByNameCache(new MembersCache(), psiClassFinder, psiClass, null, staticMembers);
|
||||||
getDeclarationOrigin() == KOTLIN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -56,17 +48,6 @@ public class ClassPsiDeclarationProviderImpl extends PsiDeclarationProviderBase
|
|||||||
return psiClass;
|
return psiClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public DeclarationOrigin getDeclarationOrigin() {
|
|
||||||
return declarationOrigin;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private static DeclarationOrigin determineOrigin(@Nullable PsiClass psiClass) {
|
|
||||||
return JAVA;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isStaticMembers() {
|
public boolean isStaticMembers() {
|
||||||
return staticMembers;
|
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,
|
@NotNull PsiClassFinder finder,
|
||||||
@Nullable PsiClass psiClass,
|
@Nullable PsiClass psiClass,
|
||||||
@Nullable PsiPackage psiPackage,
|
@Nullable PsiPackage psiPackage,
|
||||||
boolean staticMembers,
|
boolean staticMembers
|
||||||
boolean isKotlin
|
|
||||||
) {
|
) {
|
||||||
if (psiClass != null) {
|
if (psiClass != null) {
|
||||||
membersCache.new ClassMemberProcessor(new PsiClassWrapper(psiClass), staticMembers, isKotlin).process();
|
membersCache.new ClassMemberProcessor(new PsiClassWrapper(psiClass), staticMembers).process();
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO:
|
//TODO:
|
||||||
@@ -145,12 +144,10 @@ public final class MembersCache {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private final PsiClassWrapper psiClass;
|
private final PsiClassWrapper psiClass;
|
||||||
private final boolean staticMembers;
|
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.psiClass = psiClass;
|
||||||
this.staticMembers = staticMembers;
|
this.staticMembers = staticMembers;
|
||||||
this.kotlin = kotlin;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void process() {
|
public void process() {
|
||||||
@@ -160,10 +157,6 @@ public final class MembersCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void processFields() {
|
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()) {
|
for (final PsiField field : psiClass.getPsiClass().getAllFields()) {
|
||||||
addTask(field, new RunOnce() {
|
addTask(field, new RunOnce() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-10
@@ -20,9 +20,6 @@ import com.intellij.psi.PsiPackage;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
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 {
|
public final class PackagePsiDeclarationProviderImpl extends PsiDeclarationProviderBase implements PackagePsiDeclarationProvider {
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -48,12 +45,6 @@ public final class PackagePsiDeclarationProviderImpl extends PsiDeclarationProvi
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
protected MembersCache buildMembersCache() {
|
protected MembersCache buildMembersCache() {
|
||||||
return MembersCache.buildMembersByNameCache(new MembersCache(), psiClassFinder, null, getPsiPackage(), true, getDeclarationOrigin() == KOTLIN);
|
return MembersCache.buildMembersByNameCache(new MembersCache(), psiClassFinder, null, getPsiPackage(), true);
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public DeclarationOrigin getDeclarationOrigin() {
|
|
||||||
return JAVA;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -22,7 +22,4 @@ public interface PsiDeclarationProvider {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
MembersCache getMembersCache();
|
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
|
// TODO: ugly hack: tests crash if initializeTypeParameters called with class containing proper supertypes
|
||||||
List<TypeParameterDescriptor> classTypeParameters = classDescriptor.getTypeConstructor().getParameters();
|
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()) {
|
if (psiClass.isEnum()) {
|
||||||
ClassDescriptorFromJvmBytecode classObjectDescriptor = createClassObjectDescriptorForEnum(classDescriptor, psiClass);
|
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.descriptor.ClassDescriptorFromJvmBytecode;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
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.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.java.wrapper.PsiMethodWrapper;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
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.DescriptorUtils.*;
|
||||||
import static org.jetbrains.jet.lang.resolve.OverridingUtil.*;
|
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.*;
|
import static org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils.*;
|
||||||
|
|
||||||
public final class JavaFunctionResolver {
|
public final class JavaFunctionResolver {
|
||||||
@@ -97,13 +97,13 @@ public final class JavaFunctionResolver {
|
|||||||
) {
|
) {
|
||||||
PsiClass containingClass = method.getPsiMethod().getContainingClass();
|
PsiClass containingClass = method.getPsiMethod().getContainingClass();
|
||||||
assert containingClass != null : "containing class is null for " + method;
|
assert containingClass != null : "containing class is null for " + method;
|
||||||
return resolveMethodToFunctionDescriptor(containingClass, method, DeclarationOrigin.JAVA, ownerDescriptor, false);
|
return resolveMethodToFunctionDescriptor(containingClass, method, ownerDescriptor, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private SimpleFunctionDescriptor resolveMethodToFunctionDescriptor(
|
private SimpleFunctionDescriptor resolveMethodToFunctionDescriptor(
|
||||||
@NotNull PsiClass psiClass, PsiMethodWrapper method,
|
@NotNull PsiClass psiClass, PsiMethodWrapper method,
|
||||||
@NotNull DeclarationOrigin declarationOrigin, @NotNull ClassOrNamespaceDescriptor ownerDescriptor, boolean record
|
@NotNull ClassOrNamespaceDescriptor ownerDescriptor, boolean record
|
||||||
) {
|
) {
|
||||||
if (!DescriptorResolverUtils.isCorrectOwnerForEnumMember(ownerDescriptor, method.getPsiMember())) {
|
if (!DescriptorResolverUtils.isCorrectOwnerForEnumMember(ownerDescriptor, method.getPsiMember())) {
|
||||||
return null;
|
return null;
|
||||||
@@ -116,14 +116,6 @@ public final class JavaFunctionResolver {
|
|||||||
|
|
||||||
PsiMethod psiMethod = method.getPsiMethod();
|
PsiMethod psiMethod = method.getPsiMethod();
|
||||||
PsiClass containingClass = psiMethod.getContainingClass();
|
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) {
|
if (trace.get(BindingContext.FUNCTION, psiMethod) != null) {
|
||||||
return trace.get(BindingContext.FUNCTION, psiMethod);
|
return trace.get(BindingContext.FUNCTION, psiMethod);
|
||||||
@@ -195,7 +187,7 @@ public final class JavaFunctionResolver {
|
|||||||
BindingContextUtils.recordFunctionDeclarationToDescriptor(trace, psiMethod, functionDescriptorImpl);
|
BindingContextUtils.recordFunctionDeclarationToDescriptor(trace, psiMethod, functionDescriptorImpl);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (declarationOrigin == JAVA && record) {
|
if (record) {
|
||||||
trace.record(JavaBindingContext.IS_DECLARED_IN_JAVA, functionDescriptorImpl);
|
trace.record(JavaBindingContext.IS_DECLARED_IN_JAVA, functionDescriptorImpl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,7 +252,7 @@ public final class JavaFunctionResolver {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private Set<FunctionDescriptor> resolveNamedGroupFunctions(
|
private Set<FunctionDescriptor> resolveNamedGroupFunctions(
|
||||||
@NotNull ClassOrNamespaceDescriptor owner, @NotNull PsiClass psiClass,
|
@NotNull ClassOrNamespaceDescriptor owner, @NotNull PsiClass psiClass,
|
||||||
NamedMembers namedMembers, Name methodName, PsiDeclarationProvider scopeData
|
NamedMembers namedMembers, Name methodName
|
||||||
) {
|
) {
|
||||||
|
|
||||||
Set<SimpleFunctionDescriptor> functionsFromSupertypes = null;
|
Set<SimpleFunctionDescriptor> functionsFromSupertypes = null;
|
||||||
@@ -271,7 +263,7 @@ public final class JavaFunctionResolver {
|
|||||||
Set<SimpleFunctionDescriptor> functionsFromCurrent = Sets.newHashSet();
|
Set<SimpleFunctionDescriptor> functionsFromCurrent = Sets.newHashSet();
|
||||||
for (PsiMethodWrapper method : namedMembers.getMethods()) {
|
for (PsiMethodWrapper method : namedMembers.getMethods()) {
|
||||||
SimpleFunctionDescriptor function =
|
SimpleFunctionDescriptor function =
|
||||||
resolveMethodToFunctionDescriptor(psiClass, method, scopeData.getDeclarationOrigin(), owner, true);
|
resolveMethodToFunctionDescriptor(psiClass, method, owner, true);
|
||||||
if (function != null) {
|
if (function != null) {
|
||||||
functionsFromCurrent.add(function);
|
functionsFromCurrent.add(function);
|
||||||
ContainerUtil.addIfNotNull(functionsFromCurrent, resolveSamAdapter(function));
|
ContainerUtil.addIfNotNull(functionsFromCurrent, resolveSamAdapter(function));
|
||||||
@@ -393,7 +385,7 @@ public final class JavaFunctionResolver {
|
|||||||
return Collections.emptySet();
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
PsiClass psiClass = scopeData.getPsiClass();
|
PsiClass psiClass = scopeData.getPsiClass();
|
||||||
return resolveNamedGroupFunctions(ownerDescriptor, psiClass, namedMembers, methodName, scopeData);
|
return resolveNamedGroupFunctions(ownerDescriptor, psiClass, namedMembers, methodName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
+4
-19
@@ -41,8 +41,6 @@ import org.jetbrains.jet.lang.types.TypeUtils;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.JAVA;
|
|
||||||
|
|
||||||
//TODO: getters and setter are not working
|
//TODO: getters and setter are not working
|
||||||
public final class JavaPropertyResolver {
|
public final class JavaPropertyResolver {
|
||||||
|
|
||||||
@@ -85,14 +83,13 @@ public final class JavaPropertyResolver {
|
|||||||
return Collections.emptySet();
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
return resolveNamedGroupProperties(ownerDescriptor, scopeData, namedMembers, fieldName,
|
return resolveNamedGroupProperties(ownerDescriptor, namedMembers, fieldName,
|
||||||
"class or namespace " + DescriptorUtils.getFQName(ownerDescriptor));
|
"class or namespace " + DescriptorUtils.getFQName(ownerDescriptor));
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private Set<VariableDescriptor> resolveNamedGroupProperties(
|
private Set<VariableDescriptor> resolveNamedGroupProperties(
|
||||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor,
|
@NotNull ClassOrNamespaceDescriptor ownerDescriptor,
|
||||||
@NotNull PsiDeclarationProvider scopeData,
|
|
||||||
@NotNull NamedMembers namedMembers,
|
@NotNull NamedMembers namedMembers,
|
||||||
@NotNull Name propertyName,
|
@NotNull Name propertyName,
|
||||||
@NotNull String context
|
@NotNull String context
|
||||||
@@ -116,7 +113,7 @@ public final class JavaPropertyResolver {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
propertiesFromCurrent.add(resolveProperty(ownerDescriptor, scopeData, propertyName, context, propertyPsiData));
|
propertiesFromCurrent.add(resolveProperty(ownerDescriptor, propertyName, context, propertyPsiData));
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<PropertyDescriptor> propertiesFromSupertypes = getPropertiesFromSupertypes(propertyName, ownerDescriptor);
|
Set<PropertyDescriptor> propertiesFromSupertypes = getPropertiesFromSupertypes(propertyName, ownerDescriptor);
|
||||||
@@ -163,12 +160,10 @@ public final class JavaPropertyResolver {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private PropertyDescriptor resolveProperty(
|
private PropertyDescriptor resolveProperty(
|
||||||
@NotNull ClassOrNamespaceDescriptor owner,
|
@NotNull ClassOrNamespaceDescriptor owner,
|
||||||
@NotNull PsiDeclarationProvider scopeData,
|
|
||||||
@NotNull Name propertyName,
|
@NotNull Name propertyName,
|
||||||
@NotNull String context,
|
@NotNull String context,
|
||||||
@NotNull PropertyPsiData psiData
|
@NotNull PropertyPsiData psiData
|
||||||
) {
|
) {
|
||||||
boolean isFinal = isPropertyFinal(scopeData, psiData);
|
|
||||||
boolean isVar = psiData.isVar();
|
boolean isVar = psiData.isVar();
|
||||||
|
|
||||||
PropertyPsiDataElement characteristicMember = psiData.getCharacteristicMember();
|
PropertyPsiDataElement characteristicMember = psiData.getCharacteristicMember();
|
||||||
@@ -182,7 +177,7 @@ public final class JavaPropertyResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PropertyDescriptorImpl propertyDescriptor =
|
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);
|
PropertyGetterDescriptorImpl getterDescriptor = resolveGetter(visibility, kind, getter, propertyDescriptor);
|
||||||
PropertySetterDescriptorImpl setterDescriptor = resolveSetter(psiData, kind, propertyDescriptor);
|
PropertySetterDescriptorImpl setterDescriptor = resolveSetter(psiData, kind, propertyDescriptor);
|
||||||
@@ -206,12 +201,9 @@ public final class JavaPropertyResolver {
|
|||||||
receiverType
|
receiverType
|
||||||
);
|
);
|
||||||
initializeSetterAndGetter(propertyDescriptor, getterDescriptor, setterDescriptor, propertyType, psiData);
|
initializeSetterAndGetter(propertyDescriptor, getterDescriptor, setterDescriptor, propertyType, psiData);
|
||||||
|
|
||||||
trace.record(BindingContext.VARIABLE, psiData.getCharacteristicPsi(), propertyDescriptor);
|
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) {
|
if (AnnotationUtils.isPropertyAcceptableAsAnnotationParameter(propertyDescriptor) && psiData.getCharacteristicPsi() instanceof PsiField) {
|
||||||
PsiExpression initializer = ((PsiField) psiData.getCharacteristicPsi()).getInitializer();
|
PsiExpression initializer = ((PsiField) psiData.getCharacteristicPsi()).getInitializer();
|
||||||
@@ -442,13 +434,6 @@ public final class JavaPropertyResolver {
|
|||||||
return regularPropertiesCount;
|
return regularPropertiesCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isPropertyFinal(PsiDeclarationProvider scopeData, PropertyPsiData psiData) {
|
|
||||||
if (scopeData.getDeclarationOrigin() == JAVA) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return psiData.isFinal();
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static Set<PropertyDescriptor> getPropertiesFromSupertypes(
|
private static Set<PropertyDescriptor> getPropertiesFromSupertypes(
|
||||||
@NotNull Name propertyName, @NotNull ClassOrNamespaceDescriptor ownerDescriptor
|
@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.BindingContext;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||||
import org.jetbrains.jet.lang.resolve.java.*;
|
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.resolve.java.wrapper.PsiClassWrapper;
|
||||||
import org.jetbrains.jet.lang.types.ErrorUtils;
|
import org.jetbrains.jet.lang.types.ErrorUtils;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
@@ -38,8 +37,6 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.KOTLIN;
|
|
||||||
|
|
||||||
public final class JavaSupertypeResolver {
|
public final class JavaSupertypeResolver {
|
||||||
|
|
||||||
private BindingTrace trace;
|
private BindingTrace trace;
|
||||||
@@ -64,7 +61,6 @@ public final class JavaSupertypeResolver {
|
|||||||
public Collection<JetType> getSupertypes(
|
public Collection<JetType> getSupertypes(
|
||||||
@NotNull ClassDescriptor classDescriptor,
|
@NotNull ClassDescriptor classDescriptor,
|
||||||
@NotNull PsiClassWrapper psiClass,
|
@NotNull PsiClassWrapper psiClass,
|
||||||
@NotNull ClassPsiDeclarationProvider classData,
|
|
||||||
@NotNull List<TypeParameterDescriptor> typeParameters
|
@NotNull List<TypeParameterDescriptor> typeParameters
|
||||||
) {
|
) {
|
||||||
|
|
||||||
@@ -80,20 +76,17 @@ public final class JavaSupertypeResolver {
|
|||||||
reportIncompleteHierarchyForErrorTypes(classDescriptor, result);
|
reportIncompleteHierarchyForErrorTypes(classDescriptor, result);
|
||||||
|
|
||||||
if (result.isEmpty()) {
|
if (result.isEmpty()) {
|
||||||
addBaseClass(psiClass, classData, classDescriptor, result);
|
addBaseClass(psiClass, classDescriptor, result);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addBaseClass(
|
private void addBaseClass(
|
||||||
@NotNull PsiClassWrapper psiClass,
|
@NotNull PsiClassWrapper psiClass,
|
||||||
@NotNull ClassPsiDeclarationProvider classData,
|
|
||||||
@NotNull ClassDescriptor classDescriptor,
|
@NotNull ClassDescriptor classDescriptor,
|
||||||
@NotNull List<JetType> result
|
@NotNull List<JetType> result
|
||||||
) {
|
) {
|
||||||
if (classData.getDeclarationOrigin() == KOTLIN
|
if (DescriptorResolverUtils.OBJECT_FQ_NAME.equalsTo(psiClass.getQualifiedName())
|
||||||
|| DescriptorResolverUtils.OBJECT_FQ_NAME.equalsTo(psiClass.getQualifiedName())
|
|
||||||
// TODO: annotations
|
|
||||||
|| classDescriptor.getKind() == ClassKind.ANNOTATION_CLASS) {
|
|| classDescriptor.getKind() == ClassKind.ANNOTATION_CLASS) {
|
||||||
result.add(KotlinBuiltIns.getInstance().getAnyType());
|
result.add(KotlinBuiltIns.getInstance().getAnyType());
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-14
@@ -69,15 +69,18 @@ public final class PropertyPsiData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void checkDuplicatePropertyComponent(
|
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) {
|
if (existent != null) {
|
||||||
PsiClass checkedElementClass = checked.getMember().getPsiMember().getContainingClass();
|
PsiClass checkedElementClass = checked.getMember().getPsiMember().getContainingClass();
|
||||||
PsiClass existentElementClass = existent.getMember().getPsiMember().getContainingClass();
|
PsiClass existentElementClass = existent.getMember().getPsiMember().getContainingClass();
|
||||||
|
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
String.format("Psi element '%s' in class '%s' overwrites '%s' in class '%s' while generating %s component for property",
|
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>",
|
checked.getMember().getPsiMember(),
|
||||||
existent.getMember().getPsiMember(), existentElementClass != null ? existentElementClass.getQualifiedName() : "<no-class>",
|
checkedElementClass != null ? checkedElementClass.getQualifiedName() : "<no-class>",
|
||||||
|
existent.getMember().getPsiMember(),
|
||||||
|
existentElementClass != null ? existentElementClass.getQualifiedName() : "<no-class>",
|
||||||
componentTypeName));
|
componentTypeName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -194,15 +197,4 @@ public final class PropertyPsiData {
|
|||||||
public boolean isPropertyForNamedObject() {
|
public boolean isPropertyForNamedObject() {
|
||||||
return field != null && JvmAbi.INSTANCE_FIELD.equals(field.getMember().getName());
|
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