diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java index 1fb2c9328c9..5a0afeddd6a 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java @@ -170,7 +170,6 @@ public class InjectorForJavaDescriptorResolver { javaInnerClassResolver.setClassResolver(javaClassResolver); javaPropertyResolver.setAnnotationResolver(javaAnnotationResolver); - javaPropertyResolver.setJavaSignatureResolver(javaSignatureResolver); javaPropertyResolver.setSemanticServices(javaSemanticServices); javaPropertyResolver.setTrace(bindingTrace); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaSemanticServices.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaSemanticServices.java index c380c2c422c..24970f89dfa 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaSemanticServices.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaSemanticServices.java @@ -170,7 +170,6 @@ public class InjectorForJavaSemanticServices { javaInnerClassResolver.setClassResolver(javaClassResolver); javaPropertyResolver.setAnnotationResolver(javaAnnotationResolver); - javaPropertyResolver.setJavaSignatureResolver(javaSignatureResolver); javaPropertyResolver.setSemanticServices(javaSemanticServices); javaPropertyResolver.setTrace(bindingTrace); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java index 73b64e7d2dd..51b8b3480ff 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -348,7 +348,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly javaInnerClassResolver.setClassResolver(javaClassResolver); javaPropertyResolver.setAnnotationResolver(javaAnnotationResolver); - javaPropertyResolver.setJavaSignatureResolver(javaSignatureResolver); javaPropertyResolver.setSemanticServices(javaSemanticServices); javaPropertyResolver.setTrace(bindingTrace); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/TypeSource.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/TypeSource.java deleted file mode 100644 index 52ccf5362cd..00000000000 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/TypeSource.java +++ /dev/null @@ -1,52 +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; - -import com.intellij.psi.PsiModifierListOwner; -import com.intellij.psi.PsiType; -import org.jetbrains.annotations.NotNull; - -public class TypeSource { - - @NotNull - private final String typeString; - @NotNull - private final PsiType psiType; - @NotNull - private final PsiModifierListOwner psiNotNullOwner; - - public TypeSource(@NotNull String typeString, @NotNull PsiType psiType, @NotNull PsiModifierListOwner psiNotNullOwner) { - this.typeString = typeString; - this.psiType = psiType; - this.psiNotNullOwner = psiNotNullOwner; - } - - @NotNull - public String getTypeString() { - return typeString; - } - - @NotNull - public PsiType getPsiType() { - return psiType; - } - - @NotNull - public PsiModifierListOwner getPsiNotNullOwner() { - return psiNotNullOwner; - } -} diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/prop/PropertyNameUtils.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/prop/PropertyNameUtils.java deleted file mode 100644 index e5a5d9096d1..00000000000 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/prop/PropertyNameUtils.java +++ /dev/null @@ -1,45 +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.prop; - -import com.intellij.openapi.util.text.StringUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; - -public class PropertyNameUtils { - - private PropertyNameUtils() { - } - - @Nullable - public static PropertyParseResult parseMethodToProperty(@NotNull String methodName) { - // TODO: support is properties - if (methodName.startsWith(JvmAbi.GETTER_PREFIX) && methodName.length() > JvmAbi.GETTER_PREFIX.length()) { - String propertyName = StringUtil.decapitalize(methodName.substring(JvmAbi.GETTER_PREFIX.length())); - return new PropertyParseResult(propertyName, true); - } - else if (methodName.startsWith(JvmAbi.SETTER_PREFIX) && methodName.length() > JvmAbi.SETTER_PREFIX.length()) { - String propertyName = StringUtil.decapitalize(methodName.substring(JvmAbi.SETTER_PREFIX.length())); - return new PropertyParseResult(propertyName, false); - } - else { - return null; - } - } - -} diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/prop/PropertyParseResult.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/prop/PropertyParseResult.java deleted file mode 100644 index 142e36b6dd4..00000000000 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/prop/PropertyParseResult.java +++ /dev/null @@ -1,39 +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.prop; - -import org.jetbrains.annotations.NotNull; - -public class PropertyParseResult { - @NotNull - private final String propertyName; - private final boolean getter; - - public PropertyParseResult(@NotNull String propertyName, boolean getter) { - this.propertyName = propertyName; - this.getter = getter; - } - - @NotNull - public String getPropertyName() { - return propertyName; - } - - public boolean isGetter() { - return getter; - } -} diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/provider/MembersCache.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/provider/MembersCache.java index c0836e86a8b..6b8cbb3a3b8 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/provider/MembersCache.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/provider/MembersCache.java @@ -27,10 +27,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.java.JetJavaMirrorMarker; import org.jetbrains.jet.lang.resolve.java.PsiClassFinder; -import org.jetbrains.jet.lang.resolve.java.TypeSource; -import org.jetbrains.jet.lang.resolve.java.prop.PropertyNameUtils; -import org.jetbrains.jet.lang.resolve.java.prop.PropertyParseResult; -import org.jetbrains.jet.lang.resolve.java.wrapper.*; +import org.jetbrains.jet.lang.resolve.java.wrapper.PsiFieldWrapper; +import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMemberWrapper; +import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; @@ -168,35 +167,24 @@ public final class MembersCache { } private void processMethods() { - parseAllMethodsAsProperties(); + createEntriesForAllMethods(); processOwnMethods(); } + private void createEntriesForAllMethods() { + for (PsiMethod method : psiClass.getAllMethods()) { + getOrCreateEmpty(Name.identifier(method.getName())); + } + } + private void processOwnMethods() { for (final PsiMethod method : psiClass.getMethods()) { - RunOnce task = new RunOnce() { + addTask(method, new RunOnce() { @Override public void doRun() { processOwnMethod(method); } - }; - addTask(method, task); - - PropertyParseResult propertyParseResult = PropertyNameUtils.parseMethodToProperty(method.getName()); - if (propertyParseResult != null) { - addTask(propertyParseResult.getPropertyName(), task); - } - } - } - - private void parseAllMethodsAsProperties() { - for (PsiMethod method : psiClass.getAllMethods()) { - createEmptyEntry(Name.identifier(method.getName())); - - PropertyParseResult propertyParseResult = PropertyNameUtils.parseMethodToProperty(method.getName()); - if (propertyParseResult != null) { - createEmptyEntry(Name.identifier(propertyParseResult.getPropertyName())); - } + }); } } @@ -248,8 +236,7 @@ public final class MembersCache { return; } - TypeSource type = new TypeSource("", fieldWrapper.getType(), field); - namedMembers.addPropertyAccessor(new PropertyPsiDataElement(fieldWrapper, type, null)); + namedMembers.addField(fieldWrapper); } private void processOwnMethod(PsiMethod ownMethod) { @@ -259,37 +246,10 @@ public final class MembersCache { return; } - PropertyParseResult propertyParseResult = PropertyNameUtils.parseMethodToProperty(method.getName()); - - // TODO: remove getJavaClass - if (propertyParseResult != null && propertyParseResult.isGetter()) { - processGetter(ownMethod, method, propertyParseResult); - } - else if (propertyParseResult != null) { - processSetter(method, propertyParseResult); - } - NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(method.getName())); namedMembers.addMethod(method); } - //TODO: manually!!!! - private void processSetter(PsiMethodWrapper method, PropertyParseResult propertyParseResult) { - //TODO - String propertyName = propertyParseResult.getPropertyName(); - getOrCreateEmpty(Name.identifier(propertyName)); - } - - private void processGetter(PsiMethod ownMethod, PsiMethodWrapper method, PropertyParseResult propertyParseResult) { - //TODO: - String propertyName = propertyParseResult.getPropertyName(); - getOrCreateEmpty(Name.identifier(propertyName)); - } - - private void createEmptyEntry(@NotNull Name identifier) { - getOrCreateEmpty(identifier); - } - private void processNestedClass(PsiClass nested) { if (isSamInterface(nested)) { NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(nested.getName())); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/provider/NamedMembers.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/provider/NamedMembers.java index 843e3af02d9..38f04414ef7 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/provider/NamedMembers.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/provider/NamedMembers.java @@ -20,7 +20,7 @@ import com.google.common.collect.Lists; import com.intellij.psi.PsiClass; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.resolve.java.wrapper.PropertyPsiDataElement; +import org.jetbrains.jet.lang.resolve.java.wrapper.PsiFieldWrapper; import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper; import org.jetbrains.jet.lang.resolve.name.Name; @@ -39,7 +39,7 @@ public final class NamedMembers { private final List methods = Lists.newArrayList(); @NotNull - private final List propertyPsiDataElements = Lists.newArrayList(); + private final List fields = Lists.newArrayList(); @Nullable private PsiClass samInterface; @@ -48,8 +48,8 @@ public final class NamedMembers { methods.add(method); } - void addPropertyAccessor(@NotNull PropertyPsiDataElement propertyPsiDataElement) { - propertyPsiDataElements.add(propertyPsiDataElement); + void addField(@NotNull PsiFieldWrapper field) { + fields.add(field); } void setSamInterface(@NotNull PsiClass samInterface) { @@ -67,8 +67,8 @@ public final class NamedMembers { } @NotNull - public List getPropertyPsiDataElements() { - return propertyPsiDataElements; + public List getFields() { + return fields; } @Nullable diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java index d93e66aa331..45067a08edc 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java @@ -17,35 +17,36 @@ package org.jetbrains.jet.lang.resolve.java.resolver; import com.google.common.collect.Sets; -import com.intellij.psi.*; +import com.intellij.psi.PsiEnumConstant; +import com.intellij.psi.PsiExpression; +import com.intellij.psi.PsiLiteralExpression; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; -import org.jetbrains.jet.lang.descriptors.impl.*; +import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorImpl; +import org.jetbrains.jet.lang.descriptors.impl.PropertyDescriptorForObjectImpl; +import org.jetbrains.jet.lang.descriptors.impl.PropertyDescriptorImpl; import org.jetbrains.jet.lang.resolve.*; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.java.*; import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeFieldSignatureData; import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers; import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider; -import org.jetbrains.jet.lang.resolve.java.wrapper.PropertyPsiData; -import org.jetbrains.jet.lang.resolve.java.wrapper.PropertyPsiDataElement; import org.jetbrains.jet.lang.resolve.java.wrapper.PsiFieldWrapper; -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; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeUtils; import javax.inject.Inject; -import java.util.*; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; -//TODO: getters and setter are not working public final class JavaPropertyResolver { private JavaSemanticServices semanticServices; - private JavaSignatureResolver javaSignatureResolver; private BindingTrace trace; private JavaAnnotationResolver annotationResolver; @@ -62,11 +63,6 @@ public final class JavaPropertyResolver { this.trace = trace; } - @Inject - public void setJavaSignatureResolver(JavaSignatureResolver javaSignatureResolver) { - this.javaSignatureResolver = javaSignatureResolver; - } - @Inject public void setAnnotationResolver(JavaAnnotationResolver annotationResolver) { this.annotationResolver = annotationResolver; @@ -94,26 +90,15 @@ public final class JavaPropertyResolver { @NotNull Name propertyName, @NotNull String context ) { - Collection psiDataCollection = PropertyPsiData.assemblePropertyPsiDataFromElements( - namedMembers.getPropertyPsiDataElements()); + List fields = namedMembers.getFields(); Set propertiesFromCurrent = new HashSet(1); - - int regularPropertiesCount = getNumberOfNonExtensionProperties(psiDataCollection); - - for (PropertyPsiData propertyPsiData : psiDataCollection) { - - // we cannot have more then one property with given name even if java code - // has several fields, getters and setter of different types - if (!propertyPsiData.isExtension() && regularPropertiesCount > 1) { - continue; + assert fields.size() <= 1; + if (fields.size() == 1) { + PsiFieldWrapper field = fields.iterator().next(); + if (DescriptorResolverUtils.isCorrectOwnerForEnumMember(ownerDescriptor, field.getPsiField())) { + propertiesFromCurrent.add(resolveProperty(ownerDescriptor, propertyName, context, field)); } - - if (!DescriptorResolverUtils.isCorrectOwnerForEnumMember(ownerDescriptor, propertyPsiData.getCharacteristicPsi())) { - continue; - } - - propertiesFromCurrent.add(resolveProperty(ownerDescriptor, propertyName, context, propertyPsiData)); } Set propertiesFromSupertypes = getPropertiesFromSupertypes(propertyName, ownerDescriptor); @@ -162,51 +147,36 @@ public final class JavaPropertyResolver { @NotNull ClassOrNamespaceDescriptor owner, @NotNull Name propertyName, @NotNull String context, - @NotNull PropertyPsiData psiData + @NotNull PsiFieldWrapper field ) { - boolean isVar = psiData.isVar(); + boolean isVar = !field.isFinal(); - PropertyPsiDataElement characteristicMember = psiData.getCharacteristicMember(); - - Visibility visibility = DescriptorResolverUtils.resolveVisibility(psiData.getCharacteristicPsi()); - CallableMemberDescriptor.Kind kind = CallableMemberDescriptor.Kind.DECLARATION; - - PropertyPsiDataElement getter = psiData.getGetter(); - if (getter != null) { - visibility = DescriptorResolverUtils.resolveVisibility(psiData.getCharacteristicPsi()); - } + Visibility visibility = DescriptorResolverUtils.resolveVisibility(field.getPsiField()); PropertyDescriptorImpl propertyDescriptor = - createPropertyDescriptor(owner, propertyName, psiData, true, isVar, visibility, kind); + createPropertyDescriptor(owner, propertyName, field, isVar, visibility); - PropertyGetterDescriptorImpl getterDescriptor = resolveGetter(visibility, kind, getter, propertyDescriptor); - PropertySetterDescriptorImpl setterDescriptor = resolveSetter(psiData, kind, propertyDescriptor); - - propertyDescriptor.initialize(getterDescriptor, setterDescriptor); - - List typeParameters = resolvePropertyTypeParameters(psiData, characteristicMember, propertyDescriptor); + propertyDescriptor.initialize(null, null); TypeVariableResolver typeVariableResolverForPropertyInternals = TypeVariableResolvers.typeVariableResolverFromTypeParameters( - typeParameters, propertyDescriptor, "property " + propertyName + " in " + context); + Collections.emptyList(), propertyDescriptor, "property " + propertyName + " in " + context); - JetType propertyType = getPropertyType(psiData, characteristicMember, typeVariableResolverForPropertyInternals); - JetType receiverType = getReceiverType(characteristicMember, typeVariableResolverForPropertyInternals); + JetType propertyType = getPropertyType(field, typeVariableResolverForPropertyInternals); - propertyType = getAlternativeSignatureData(isVar, characteristicMember, propertyDescriptor, propertyType); + propertyType = getAlternativeSignatureData(isVar, field, propertyDescriptor, propertyType); propertyDescriptor.setType( propertyType, - typeParameters, + Collections.emptyList(), DescriptorUtils.getExpectedThisObjectIfNeeded(owner), - receiverType + (JetType) null ); - initializeSetterAndGetter(propertyDescriptor, getterDescriptor, setterDescriptor, propertyType, psiData); - trace.record(BindingContext.VARIABLE, psiData.getCharacteristicPsi(), propertyDescriptor); + trace.record(BindingContext.VARIABLE, field.getPsiField(), propertyDescriptor); trace.record(JavaBindingContext.IS_DECLARED_IN_JAVA, propertyDescriptor); - if (AnnotationUtils.isPropertyAcceptableAsAnnotationParameter(propertyDescriptor) && psiData.getCharacteristicPsi() instanceof PsiField) { - PsiExpression initializer = ((PsiField) psiData.getCharacteristicPsi()).getInitializer(); + if (AnnotationUtils.isPropertyAcceptableAsAnnotationParameter(propertyDescriptor)) { + PsiExpression initializer = field.getPsiField().getInitializer(); if (initializer instanceof PsiLiteralExpression) { CompileTimeConstant constant = JavaCompileTimeConstResolver .resolveCompileTimeConstantValue(((PsiLiteralExpression) initializer).getValue(), propertyType); @@ -222,15 +192,13 @@ public final class JavaPropertyResolver { private PropertyDescriptorImpl createPropertyDescriptor( @NotNull ClassOrNamespaceDescriptor owner, @NotNull Name propertyName, - @NotNull PropertyPsiData psiData, - boolean isFinal, + @NotNull PsiFieldWrapper field, boolean isVar, - @NotNull Visibility visibility, - @NotNull CallableMemberDescriptor.Kind kind + @NotNull Visibility visibility ) { - boolean isEnumEntry = psiData.getCharacteristicPsi() instanceof PsiEnumConstant; + boolean isEnumEntry = field.getPsiField() instanceof PsiEnumConstant; if (isEnumEntry) { - assert !isVar && isFinal : "Enum entries should be final and immutable."; + assert !isVar : "Enum entries should be immutable."; assert DescriptorUtils.isEnumClassObject(owner) : "Enum entries should be put into class object of enum only: " + owner; //TODO: this is a hack to indicate that this enum entry is an object // class descriptor for enum entries is not used by backends so for now this should be safe to use @@ -244,196 +212,57 @@ public final class JavaPropertyResolver { false); return new PropertyDescriptorForObjectImpl( owner, - annotationResolver.resolveAnnotations(psiData.getCharacteristicPsi()), + annotationResolver.resolveAnnotations(field.getPsiField()), visibility, propertyName, dummyClassDescriptorForEnumEntryObject); } - else if (psiData.isPropertyForNamedObject() && owner instanceof NamespaceDescriptor) { - //TODO: support nested classes and objects - assert !isVar && isFinal : "Objects should be final and immutable."; - ClassDescriptor objectClass = ((NamespaceDescriptor) owner).getMemberScope().getObjectDescriptor(propertyName); - assert objectClass != null; - return new PropertyDescriptorForObjectImpl( - owner, - annotationResolver.resolveAnnotations(psiData.getCharacteristicPsi()), - visibility, - propertyName, - objectClass); - } - else { - return new PropertyDescriptorImpl( - owner, - annotationResolver.resolveAnnotations(psiData.getCharacteristicPsi()), - Modality.convertFromFlags(psiData.getCharacteristicMember().getMember().isAbstract(), - !(isFinal || psiData.isPropertyForNamedObject())), - visibility, - isVar, - propertyName, - kind); - } + return new PropertyDescriptorImpl( + owner, + annotationResolver.resolveAnnotations(field.getPsiField()), + Modality.FINAL, + visibility, + isVar, + propertyName, + CallableMemberDescriptor.Kind.DECLARATION); } @NotNull private JetType getAlternativeSignatureData( boolean isVar, - PropertyPsiDataElement characteristicMember, + PsiFieldWrapper field, PropertyDescriptor propertyDescriptor, JetType propertyType ) { - if (!characteristicMember.isField()) { - return propertyType; - } - AlternativeFieldSignatureData signatureData = - new AlternativeFieldSignatureData((PsiFieldWrapper) characteristicMember.getMember(), propertyType, isVar); - if (!signatureData.hasErrors()) { - if (signatureData.isAnnotated()) { - return signatureData.getReturnType(); - } - } - else { + AlternativeFieldSignatureData signatureData = new AlternativeFieldSignatureData(field, propertyType, isVar); + if (signatureData.hasErrors()) { trace.record(JavaBindingContext.LOAD_FROM_JAVA_SIGNATURE_ERRORS, propertyDescriptor, Collections.singletonList(signatureData.getError())); } + else if (signatureData.isAnnotated()) { + return signatureData.getReturnType(); + } return propertyType; } - //TODO: doesn't work - private static void initializeSetterAndGetter( - @NotNull PropertyDescriptor propertyDescriptor, - @Nullable PropertyGetterDescriptorImpl getterDescriptor, - @Nullable PropertySetterDescriptorImpl setterDescriptor, - @NotNull JetType propertyType, - @NotNull PropertyPsiData data - ) { - if (getterDescriptor != null) { - getterDescriptor.initialize(propertyType); - } - if (setterDescriptor != null) { - PropertyPsiDataElement setter = data.getSetter(); - assert setter != null; - List parameters = ((PsiMethodWrapper) setter.getMember()).getParameters(); - assert parameters.size() != 0; - setterDescriptor.initialize(new ValueParameterDescriptorImpl( - setterDescriptor, - 0, - Collections.emptyList(), - Name.identifierNoValidate(""), - propertyDescriptor.getType(), - false, - null)); - } - } - - @Nullable - private PropertyGetterDescriptorImpl resolveGetter( - Visibility visibility, - CallableMemberDescriptor.Kind kind, - PropertyPsiDataElement getter, - PropertyDescriptor propertyDescriptor - ) { - if (getter == null) { - return null; - } - return new PropertyGetterDescriptorImpl( - propertyDescriptor, - annotationResolver.resolveAnnotations(getter.getMember().getPsiMember()), - propertyDescriptor.getModality(), - visibility, - true, - false, - kind); - } - - @Nullable - private PropertySetterDescriptorImpl resolveSetter( - PropertyPsiData psiData, - CallableMemberDescriptor.Kind kind, - PropertyDescriptor propertyDescriptor - ) { - PropertyPsiDataElement setter = psiData.getSetter(); - if (setter == null) { - return null; - } - Visibility setterVisibility = DescriptorResolverUtils.resolveVisibility(setter.getMember().getPsiMember()); - if (setter.getMember() instanceof PsiMethodWrapper) { - setterVisibility = DescriptorResolverUtils.resolveVisibility( - setter.getMember().getPsiMember() - ); - } - return new PropertySetterDescriptorImpl( - propertyDescriptor, - annotationResolver.resolveAnnotations(setter.getMember().getPsiMember()), - propertyDescriptor.getModality(), - setterVisibility, - true, - false, - kind); - } - - private List resolvePropertyTypeParameters( - @NotNull PropertyPsiData members, - @NotNull PropertyPsiDataElement characteristicMember, - @NotNull PropertyDescriptor propertyDescriptor - ) { - // TODO: Can't get type parameters from field - only from accessors - if (characteristicMember == members.getSetter() || characteristicMember == members.getGetter()) { - PsiMethodWrapper method = (PsiMethodWrapper) characteristicMember.getMember(); - return javaSignatureResolver.resolveMethodTypeParameters(method, propertyDescriptor); - } - - return Collections.emptyList(); - } - @NotNull private JetType getPropertyType( - PropertyPsiData members, - PropertyPsiDataElement characteristicMember, + PsiFieldWrapper field, TypeVariableResolver typeVariableResolverForPropertyInternals ) { - if (!characteristicMember.getType().getTypeString().isEmpty()) { - return semanticServices.getTypeTransformer().transformToType( - characteristicMember.getType().getTypeString(), typeVariableResolverForPropertyInternals); - } JetType propertyType = semanticServices.getTypeTransformer().transformToType( - characteristicMember.getType().getPsiType(), typeVariableResolverForPropertyInternals); + field.getType(), typeVariableResolverForPropertyInternals); boolean hasNotNullAnnotation = JavaAnnotationResolver.findAnnotationWithExternal( - characteristicMember.getType().getPsiNotNullOwner(), + field.getPsiField(), JvmAbi.JETBRAINS_NOT_NULL_ANNOTATION.getFqName().asString()) != null; - if (hasNotNullAnnotation || members.isStaticFinalField()) { + if (hasNotNullAnnotation || isStaticFinalField(field)) { propertyType = TypeUtils.makeNotNullable(propertyType); } return propertyType; } - @Nullable - private JetType getReceiverType( - PropertyPsiDataElement characteristicMember, - TypeVariableResolver typeVariableResolverForPropertyInternals - ) { - if (characteristicMember.getReceiverType() == null) { - return null; - } - if (!characteristicMember.getReceiverType().getTypeString().isEmpty()) { - return semanticServices.getTypeTransformer() - .transformToType(characteristicMember.getReceiverType().getTypeString(), typeVariableResolverForPropertyInternals); - } - return semanticServices.getTypeTransformer() - .transformToType(characteristicMember.getReceiverType().getPsiType(), typeVariableResolverForPropertyInternals); - } - - private static int getNumberOfNonExtensionProperties(@NotNull Collection propertyPsiDataCollection) { - int regularPropertiesCount = 0; - for (PropertyPsiData members : propertyPsiDataCollection) { - if (!members.isExtension()) { - ++regularPropertiesCount; - } - } - return regularPropertiesCount; - } - @NotNull private static Set getPropertiesFromSupertypes( @NotNull Name propertyName, @NotNull ClassOrNamespaceDescriptor ownerDescriptor @@ -446,4 +275,8 @@ public final class JavaPropertyResolver { } return r; } + + private static boolean isStaticFinalField(@NotNull PsiFieldWrapper wrapper) { + return wrapper.isFinal() && wrapper.isStatic(); + } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaSignatureResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaSignatureResolver.java index 25b3ecc404c..d512d39357b 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaSignatureResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaSignatureResolver.java @@ -17,30 +17,26 @@ package org.jetbrains.jet.lang.resolve.java.resolver; import com.google.common.collect.Lists; -import com.intellij.psi.*; -import jet.typeinfo.TypeInfoVariance; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiClassType; +import com.intellij.psi.PsiMethod; +import com.intellij.psi.PsiTypeParameter; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; -import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl; -import org.jetbrains.jet.lang.resolve.DescriptorUtils; -import org.jetbrains.jet.lang.resolve.java.*; +import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices; +import org.jetbrains.jet.lang.resolve.java.TypeUsage; +import org.jetbrains.jet.lang.resolve.java.TypeVariableResolver; +import org.jetbrains.jet.lang.resolve.java.TypeVariableResolvers; import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.Variance; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; -import org.jetbrains.jet.rt.signature.JetSignatureAdapter; -import org.jetbrains.jet.rt.signature.JetSignatureExceptionsAdapter; -import org.jetbrains.jet.rt.signature.JetSignatureReader; -import org.jetbrains.jet.rt.signature.JetSignatureVisitor; import javax.inject.Inject; -import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -54,44 +50,17 @@ public final class JavaSignatureResolver { this.semanticServices = javaSemanticServices; } - private static boolean isJavaLangObject(@NotNull JetType type) { - ClassifierDescriptor classifierDescriptor = type.getConstructor().getDeclarationDescriptor(); - return classifierDescriptor instanceof ClassDescriptor && - DescriptorUtils.getFQName(classifierDescriptor).equalsTo(DescriptorResolverUtils.OBJECT_FQ_NAME); - } - - private enum TypeParameterDescriptorOrigin { - JAVA, - KOTLIN, - } - public static class TypeParameterDescriptorInitialization { - @NotNull - private final TypeParameterDescriptorOrigin origin; @NotNull private final TypeParameterDescriptorImpl descriptor; private final PsiTypeParameter psiTypeParameter; - @Nullable - private final List upperBoundsForKotlin; private TypeParameterDescriptorInitialization( @NotNull TypeParameterDescriptorImpl descriptor, @NotNull PsiTypeParameter psiTypeParameter ) { - this.origin = TypeParameterDescriptorOrigin.JAVA; this.descriptor = descriptor; this.psiTypeParameter = psiTypeParameter; - this.upperBoundsForKotlin = null; - } - - private TypeParameterDescriptorInitialization( - @NotNull TypeParameterDescriptorImpl descriptor, @NotNull PsiTypeParameter psiTypeParameter, - @Nullable List upperBoundsForKotlin - ) { - this.origin = TypeParameterDescriptorOrigin.KOTLIN; - this.descriptor = descriptor; - this.psiTypeParameter = psiTypeParameter; - this.upperBoundsForKotlin = upperBoundsForKotlin; } @NotNull @@ -101,159 +70,6 @@ public final class JavaSignatureResolver { } - @NotNull - private static PsiTypeParameter getPsiTypeParameterByName(PsiTypeParameterListOwner clazz, String name) { - for (PsiTypeParameter typeParameter : clazz.getTypeParameters()) { - if (typeParameter.getName().equals(name)) { - return typeParameter; - } - } - throw new IllegalStateException("PsiTypeParameter '" + name + "' is not found"); - } - - - private abstract class JetSignatureTypeParameterVisitor extends JetSignatureExceptionsAdapter { - - @NotNull - private final PsiTypeParameterListOwner psiOwner; - @NotNull - private final String name; - @NotNull - private final TypeVariableResolver typeVariableResolver; - @NotNull - private final TypeParameterDescriptorImpl typeParameterDescriptor; - - protected JetSignatureTypeParameterVisitor( - @NotNull PsiTypeParameterListOwner psiOwner, - @NotNull String name, - @NotNull TypeVariableResolver typeVariableResolver, - @NotNull TypeParameterDescriptorImpl typeParameterDescriptor - ) { - if (name.isEmpty()) { - throw new IllegalStateException(); - } - - this.psiOwner = psiOwner; - this.name = name; - this.typeVariableResolver = typeVariableResolver; - this.typeParameterDescriptor = typeParameterDescriptor; - } - - List upperBounds = new ArrayList(); - - @Override - public JetSignatureVisitor visitClassBound() { - return new JetTypeJetSignatureReader(semanticServices, KotlinBuiltIns.getInstance(), typeVariableResolver) { - @Override - protected void done(@NotNull JetType jetType) { - if (isJavaLangObject(jetType)) { - return; - } - upperBounds.add(jetType); - } - }; - } - - @Override - public JetSignatureVisitor visitInterfaceBound() { - return new JetTypeJetSignatureReader(semanticServices, KotlinBuiltIns.getInstance(), typeVariableResolver) { - @Override - protected void done(@NotNull JetType jetType) { - upperBounds.add(jetType); - } - }; - } - - @Override - public void visitFormalTypeParameterEnd() { - PsiTypeParameter psiTypeParameter = getPsiTypeParameterByName(psiOwner, name); - TypeParameterDescriptorInitialization typeParameterDescriptorInitialization = - new TypeParameterDescriptorInitialization(typeParameterDescriptor, psiTypeParameter, upperBounds); - done(typeParameterDescriptorInitialization); - } - - protected abstract void done(@NotNull TypeParameterDescriptorInitialization typeParameterDescriptor); - } - - private class JetSignatureTypeParametersVisitor extends JetSignatureExceptionsAdapter { - @NotNull - private final DeclarationDescriptor containingDeclaration; - @NotNull - private final PsiTypeParameterListOwner psiOwner; - - private final List previousTypeParameters = new ArrayList(); - // note changes state in this method - private final TypeVariableResolver typeVariableResolver; - - - private JetSignatureTypeParametersVisitor( - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull PsiTypeParameterListOwner psiOwner, - @NotNull String context - ) { - this.containingDeclaration = containingDeclaration; - this.psiOwner = psiOwner; - - this.typeVariableResolver = TypeVariableResolvers.typeVariableResolverFromTypeParameters( - previousTypeParameters, - containingDeclaration, - context); - } - - private int formalTypeParameterIndex = 0; - - - List r = new ArrayList(); - - @Override - public JetSignatureVisitor visitFormalTypeParameter(final String name, TypeInfoVariance variance, boolean reified) { - TypeParameterDescriptorImpl typeParameter = TypeParameterDescriptorImpl.createForFurtherModification( - containingDeclaration, - Collections.emptyList(), // TODO: wrong - reified, - JetSignatureUtils.translateVariance(variance), - Name.identifier(name), - formalTypeParameterIndex++); - - previousTypeParameters.add(typeParameter); - - return new JetSignatureTypeParameterVisitor(psiOwner, name, typeVariableResolver, typeParameter) { - @Override - protected void done(@NotNull TypeParameterDescriptorInitialization typeParameterDescriptor) { - r.add(typeParameterDescriptor); - previousTypeParameters.add(typeParameterDescriptor.descriptor); - } - }; - } - } - - /** - * @see #resolveMethodTypeParametersFromJetSignature(String, PsiMethod, DeclarationDescriptor) - */ - private List resolveClassTypeParametersFromJetSignature( - String jetSignature, - final PsiClass clazz, final ClassDescriptor classDescriptor - ) { - String context = "class " + clazz.getQualifiedName(); - JetSignatureTypeParametersVisitor jetSignatureTypeParametersVisitor = - new JetSignatureTypeParametersVisitor(classDescriptor, clazz, context) { - @Override - public JetSignatureVisitor visitSuperclass() { - // TODO - return new JetSignatureAdapter(); - } - - @Override - public JetSignatureVisitor visitInterface() { - // TODO - return new JetSignatureAdapter(); - } - }; - new JetSignatureReader(jetSignature).accept(jetSignatureTypeParametersVisitor); - return jetSignatureTypeParametersVisitor.r; - } - - private static List makeUninitializedTypeParameters( @NotNull DeclarationDescriptor containingDeclaration, @NotNull PsiTypeParameter[] typeParameters @@ -288,37 +104,21 @@ public final class JavaSignatureResolver { TypeVariableResolver typeVariableByPsiResolver ) { TypeParameterDescriptorImpl typeParameterDescriptor = typeParameter.descriptor; - if (typeParameter.origin == TypeParameterDescriptorOrigin.KOTLIN) { - List upperBoundsForKotlin = typeParameter.upperBoundsForKotlin; - assert upperBoundsForKotlin != null; - if (upperBoundsForKotlin.size() == 0) { - typeParameterDescriptor.addUpperBound(KotlinBuiltIns.getInstance().getNullableAnyType()); - } - else { - for (JetType upperBound : upperBoundsForKotlin) { - typeParameterDescriptor.addUpperBound(upperBound); - } - } - - // TODO: lower bounds + PsiClassType[] referencedTypes = typeParameter.psiTypeParameter.getExtendsList().getReferencedTypes(); + if (referencedTypes.length == 0) { + typeParameterDescriptor.addUpperBound(KotlinBuiltIns.getInstance().getNullableAnyType()); + } + else if (referencedTypes.length == 1) { + typeParameterDescriptor.addUpperBound(semanticServices.getTypeTransformer() + .transformToType(referencedTypes[0], TypeUsage.UPPER_BOUND, + typeVariableByPsiResolver)); } else { - PsiClassType[] referencedTypes = typeParameter.psiTypeParameter.getExtendsList().getReferencedTypes(); - if (referencedTypes.length == 0) { - typeParameterDescriptor.addUpperBound(KotlinBuiltIns.getInstance().getNullableAnyType()); - } - else if (referencedTypes.length == 1) { + for (PsiClassType referencedType : referencedTypes) { typeParameterDescriptor.addUpperBound(semanticServices.getTypeTransformer() - .transformToType(referencedTypes[0], TypeUsage.UPPER_BOUND, + .transformToType(referencedType, TypeUsage.UPPER_BOUND, typeVariableByPsiResolver)); } - else { - for (PsiClassType referencedType : referencedTypes) { - typeParameterDescriptor.addUpperBound(semanticServices.getTypeTransformer() - .transformToType(referencedType, TypeUsage.UPPER_BOUND, - typeVariableByPsiResolver)); - } - } } typeParameterDescriptor.setInitialized(); } @@ -379,20 +179,4 @@ public final class JavaSignatureResolver { return typeParameters; } - - /** - * @see #resolveClassTypeParametersFromJetSignature(String, PsiClass, ClassDescriptor) - */ - private List resolveMethodTypeParametersFromJetSignature( - String jetSignature, - PsiMethod method, DeclarationDescriptor functionDescriptor - ) { - PsiClass methodContainingClass = method.getContainingClass(); - assert methodContainingClass != null; - String context = "method " + method.getName() + " in class " + methodContainingClass.getQualifiedName(); - JetSignatureTypeParametersVisitor jetSignatureTypeParametersVisitor = - new JetSignatureTypeParametersVisitor(functionDescriptor, method, context); - new JetSignatureReader(jetSignature).acceptFormalTypeParametersOnly(jetSignatureTypeParametersVisitor); - return jetSignatureTypeParametersVisitor.r; - } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/wrapper/PropertyPsiData.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/wrapper/PropertyPsiData.java deleted file mode 100644 index 798340e176b..00000000000 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/wrapper/PropertyPsiData.java +++ /dev/null @@ -1,200 +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.wrapper; - -import com.google.common.collect.Lists; -import com.intellij.openapi.util.Pair; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiMember; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; -import org.jetbrains.jet.lang.resolve.java.TypeSource; - -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - -/* -* Data from PSI related to one property used to resolve this property. -*/ -public final class PropertyPsiData { - - @NotNull - public static Collection assemblePropertyPsiDataFromElements(@NotNull List elements) { - Map map = new HashMap(); - for (PropertyPsiDataElement element : elements) { - String key = propertyKeyForGrouping(element); - - PropertyPsiData value = map.get(key); - if (value == null) { - value = new PropertyPsiData(); - map.put(key, value); - } - - if (element.isGetter()) { - checkDuplicatePropertyComponent(element, "getter", value.getter); - value.getter = element; - } - else if (element.isSetter()) { - checkDuplicatePropertyComponent(element, "setter", value.setter); - value.setter = element; - } - else if (element.isField()) { - checkDuplicatePropertyComponent(element, "field", value.field); - value.field = element; - } - else { - throw new IllegalStateException(); - } - } - - return map.values(); - } - - private static void checkDuplicatePropertyComponent( - @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() : "", - existent.getMember().getPsiMember(), - existentElementClass != null ? existentElementClass.getQualifiedName() : "", - componentTypeName)); - } - } - - @NotNull - private static String propertyKeyForGrouping(@NotNull PropertyPsiDataElement propertyAccessor) { - String type = key(propertyAccessor.getType()); - String receiverType = key(propertyAccessor.getReceiverType()); - return Pair.create(type, receiverType).toString(); - } - - @NotNull - private static String key(@Nullable TypeSource typeSource) { - if (typeSource == null) { - return ""; - } - else if (typeSource.getTypeString().length() > 0) { - return typeSource.getTypeString(); - } - else { - return typeSource.getPsiType().getPresentableText(); - } - } - - @Nullable - private PropertyPsiDataElement getter = null; - @Nullable - private PropertyPsiDataElement setter = null; - @Nullable - private PropertyPsiDataElement field = null; - @Nullable - private Collection elements = null; - - @Nullable - public PropertyPsiDataElement getGetter() { - return getter; - } - - @Nullable - public PropertyPsiDataElement getSetter() { - return setter; - } - - @SuppressWarnings("ConstantConditions") - @NotNull - private Collection getElements() { - if (elements == null) { - elements = Lists.newArrayList(); - if (getter != null) { - elements.add(getter); - } - if (setter != null) { - elements.add(setter); - } - if (field != null) { - elements.add(field); - } - assert !elements.isEmpty(); - } - return elements; - } - - public boolean isExtension() { - boolean isExtension = getCharacteristicMember().isExtension(); - for (PropertyPsiDataElement element : getElements()) { - assert (element.isExtension() == isExtension); - } - return isExtension; - } - - public boolean isStatic() { - boolean isStatic = getCharacteristicMember().getMember().isStatic(); - for (PropertyPsiDataElement element : getElements()) { - assert (element.getMember().isStatic() == isStatic); - } - return isStatic; - } - - @NotNull - public PropertyPsiDataElement getCharacteristicMember() { - if (getter != null) { - return getter; - } - if (field != null) { - return field; - } - if (setter != null) { - return setter; - } - throw new IllegalStateException(); - } - - @NotNull - public PsiMember getCharacteristicPsi() { - return getCharacteristicMember().getMember().getPsiMember(); - } - - public boolean isVar() { - if (getter == null && setter == null) { - assert field != null; - return !field.getMember().isFinal(); - } - return setter != null; - } - - public boolean isStaticFinalField() { - if (getter != null || setter != null) { - return false; - } - assert field != null; - return field.getMember().isFinal() && field.getMember().isStatic(); - } - - public boolean isPropertyForNamedObject() { - return field != null && JvmAbi.INSTANCE_FIELD.equals(field.getMember().getName()); - } -} diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/wrapper/PropertyPsiDataElement.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/wrapper/PropertyPsiDataElement.java deleted file mode 100644 index e40f97dac95..00000000000 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/wrapper/PropertyPsiDataElement.java +++ /dev/null @@ -1,76 +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.wrapper; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.resolve.java.TypeSource; - -/** - * Some PSI corresponding to a property: getter, setter or field. - */ -public final class PropertyPsiDataElement { - - @NotNull - private final PsiMemberWrapper member; - - // for methods - private final boolean getter; - - @NotNull - private final TypeSource type; - @Nullable - private final TypeSource receiverType; - - public PropertyPsiDataElement(@NotNull PsiFieldWrapper field, @NotNull TypeSource type, @Nullable TypeSource receiverType) { - this.member = field; - this.type = type; - this.receiverType = receiverType; - this.getter = false; - } - - @NotNull - public PsiMemberWrapper getMember() { - return member; - } - - @NotNull - public TypeSource getType() { - return type; - } - - @Nullable - public TypeSource getReceiverType() { - return receiverType; - } - - boolean isExtension() { - return getReceiverType() != null; - } - - public boolean isGetter() { - return member instanceof PsiMethodWrapper && getter; - } - - public boolean isSetter() { - return member instanceof PsiMethodWrapper && !getter; - } - - public boolean isField() { - return member instanceof PsiFieldWrapper; - } -}