001 /*
002 * Copyright 2010-2013 JetBrains s.r.o.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 package org.jetbrains.jet.lang.resolve.java.resolver;
018
019 import org.jetbrains.annotations.NotNull;
020 import org.jetbrains.annotations.Nullable;
021 import org.jetbrains.jet.lang.descriptors.*;
022 import org.jetbrains.jet.lang.resolve.java.structure.JavaField;
023 import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod;
024 import org.jetbrains.jet.lang.types.JetType;
025
026 import java.util.Collections;
027 import java.util.List;
028
029 public interface ExternalSignatureResolver {
030 abstract class MemberSignature {
031 private final List<String> signatureErrors;
032
033 protected MemberSignature(@NotNull List<String> signatureErrors) {
034 this.signatureErrors = signatureErrors;
035 }
036
037 @NotNull
038 public List<String> getErrors() {
039 return signatureErrors;
040 }
041 }
042
043 class AlternativeMethodSignature extends MemberSignature {
044 private final JetType returnType;
045 private final JetType receiverType;
046 private final List<ValueParameterDescriptor> valueParameters;
047 private final List<TypeParameterDescriptor> typeParameters;
048
049 public AlternativeMethodSignature(
050 @Nullable JetType returnType,
051 @Nullable JetType receiverType,
052 @NotNull List<ValueParameterDescriptor> valueParameters,
053 @NotNull List<TypeParameterDescriptor> typeParameters,
054 @NotNull List<String> signatureErrors
055 ) {
056 super(signatureErrors);
057 this.returnType = returnType;
058 this.receiverType = receiverType;
059 this.valueParameters = valueParameters;
060 this.typeParameters = typeParameters;
061 }
062
063 @Nullable
064 public JetType getReturnType() {
065 return returnType;
066 }
067
068 @Nullable
069 public JetType getReceiverType() {
070 return receiverType;
071 }
072
073 @NotNull
074 public List<ValueParameterDescriptor> getValueParameters() {
075 return valueParameters;
076 }
077
078 @NotNull
079 public List<TypeParameterDescriptor> getTypeParameters() {
080 return typeParameters;
081 }
082 }
083
084 class AlternativeFieldSignature extends MemberSignature {
085 private final JetType returnType;
086
087 public AlternativeFieldSignature(@NotNull JetType returnType, @Nullable String signatureError) {
088 super(signatureError == null ? Collections.<String>emptyList() : Collections.singletonList(signatureError));
089 this.returnType = returnType;
090 }
091
092 @NotNull
093 public JetType getReturnType() {
094 return returnType;
095 }
096 }
097
098 class PropagatedMethodSignature extends AlternativeMethodSignature {
099 private final List<FunctionDescriptor> superMethods;
100
101 public PropagatedMethodSignature(
102 @Nullable JetType returnType,
103 @Nullable JetType receiverType,
104 @NotNull List<ValueParameterDescriptor> valueParameters,
105 @NotNull List<TypeParameterDescriptor> typeParameters,
106 @NotNull List<String> signatureErrors,
107 @NotNull List<FunctionDescriptor> superMethods
108 ) {
109 super(returnType, receiverType, valueParameters, typeParameters, signatureErrors);
110 this.superMethods = superMethods;
111 }
112
113 @NotNull
114 public List<FunctionDescriptor> getSuperMethods() {
115 return superMethods;
116 }
117 }
118
119 @NotNull
120 PropagatedMethodSignature resolvePropagatedSignature(
121 @NotNull JavaMethod method,
122 @NotNull ClassDescriptor owner,
123 @NotNull JetType returnType,
124 @Nullable JetType receiverType,
125 @NotNull List<ValueParameterDescriptor> valueParameters,
126 @NotNull List<TypeParameterDescriptor> typeParameters
127 );
128
129 @NotNull
130 AlternativeMethodSignature resolveAlternativeMethodSignature(
131 @NotNull JavaMethod method,
132 boolean hasSuperMethods,
133 @Nullable JetType returnType,
134 @Nullable JetType receiverType,
135 @NotNull List<ValueParameterDescriptor> valueParameters,
136 @NotNull List<TypeParameterDescriptor> typeParameters
137 );
138
139 @NotNull
140 AlternativeFieldSignature resolveAlternativeFieldSignature(
141 @NotNull JavaField field,
142 @NotNull JetType returnType,
143 boolean isVar
144 );
145
146 void reportSignatureErrors(@NotNull CallableMemberDescriptor descriptor, @NotNull List<String> signatureErrors);
147 }