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 private final boolean hasStableParameterNames;
049
050 public AlternativeMethodSignature(
051 @Nullable JetType returnType,
052 @Nullable JetType receiverType,
053 @NotNull List<ValueParameterDescriptor> valueParameters,
054 @NotNull List<TypeParameterDescriptor> typeParameters,
055 @NotNull List<String> signatureErrors,
056 boolean hasStableParameterNames
057 ) {
058 super(signatureErrors);
059 this.returnType = returnType;
060 this.receiverType = receiverType;
061 this.valueParameters = valueParameters;
062 this.typeParameters = typeParameters;
063 this.hasStableParameterNames = hasStableParameterNames;
064 }
065
066 @Nullable
067 public JetType getReturnType() {
068 return returnType;
069 }
070
071 @Nullable
072 public JetType getReceiverType() {
073 return receiverType;
074 }
075
076 @NotNull
077 public List<ValueParameterDescriptor> getValueParameters() {
078 return valueParameters;
079 }
080
081 @NotNull
082 public List<TypeParameterDescriptor> getTypeParameters() {
083 return typeParameters;
084 }
085
086 public boolean hasStableParameterNames() {
087 return hasStableParameterNames;
088 }
089 }
090
091 class AlternativeFieldSignature extends MemberSignature {
092 private final JetType returnType;
093
094 public AlternativeFieldSignature(@NotNull JetType returnType, @Nullable String signatureError) {
095 super(signatureError == null ? Collections.<String>emptyList() : Collections.singletonList(signatureError));
096 this.returnType = returnType;
097 }
098
099 @NotNull
100 public JetType getReturnType() {
101 return returnType;
102 }
103 }
104
105 class PropagatedMethodSignature extends AlternativeMethodSignature {
106 private final List<FunctionDescriptor> superMethods;
107
108 public PropagatedMethodSignature(
109 @Nullable JetType returnType,
110 @Nullable JetType receiverType,
111 @NotNull List<ValueParameterDescriptor> valueParameters,
112 @NotNull List<TypeParameterDescriptor> typeParameters,
113 @NotNull List<String> signatureErrors,
114 boolean hasStableParameterNames,
115 @NotNull List<FunctionDescriptor> superMethods
116 ) {
117 super(returnType, receiverType, valueParameters, typeParameters, signatureErrors, hasStableParameterNames);
118 this.superMethods = superMethods;
119 }
120
121 @NotNull
122 public List<FunctionDescriptor> getSuperMethods() {
123 return superMethods;
124 }
125 }
126
127 @NotNull
128 PropagatedMethodSignature resolvePropagatedSignature(
129 @NotNull JavaMethod method,
130 @NotNull ClassDescriptor owner,
131 @NotNull JetType returnType,
132 @Nullable JetType receiverType,
133 @NotNull List<ValueParameterDescriptor> valueParameters,
134 @NotNull List<TypeParameterDescriptor> typeParameters
135 );
136
137 @NotNull
138 AlternativeMethodSignature resolveAlternativeMethodSignature(
139 @NotNull JavaMethod method,
140 boolean hasSuperMethods,
141 @Nullable JetType returnType,
142 @Nullable JetType receiverType,
143 @NotNull List<ValueParameterDescriptor> valueParameters,
144 @NotNull List<TypeParameterDescriptor> typeParameters,
145 boolean hasStableParameterNames
146 );
147
148 @NotNull
149 AlternativeFieldSignature resolveAlternativeFieldSignature(
150 @NotNull JavaField field,
151 @NotNull JetType returnType,
152 boolean isVar
153 );
154
155 void reportSignatureErrors(@NotNull CallableMemberDescriptor descriptor, @NotNull List<String> signatureErrors);
156 }