Remove JetTypeJetSignatureReader
This commit is contained in:
@@ -115,7 +115,6 @@ public class InjectorForJavaDescriptorResolver {
|
||||
|
||||
this.psiClassFinder.setProject(project);
|
||||
|
||||
javaTypeTransformer.setJavaSemanticServices(javaSemanticServices);
|
||||
javaTypeTransformer.setResolver(javaDescriptorResolver);
|
||||
|
||||
javaClassResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
|
||||
@@ -115,7 +115,6 @@ public class InjectorForJavaSemanticServices {
|
||||
|
||||
moduleDescriptor.setModuleConfiguration(javaBridgeConfiguration);
|
||||
|
||||
javaTypeTransformer.setJavaSemanticServices(javaSemanticServices);
|
||||
javaTypeTransformer.setResolver(javaDescriptorResolver);
|
||||
|
||||
javaClassResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
|
||||
@@ -293,7 +293,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
javaSemanticServices.setTrace(bindingTrace);
|
||||
javaSemanticServices.setTypeTransformer(javaTypeTransformer);
|
||||
|
||||
javaTypeTransformer.setJavaSemanticServices(javaSemanticServices);
|
||||
javaTypeTransformer.setResolver(javaDescriptorResolver);
|
||||
|
||||
javaClassResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
|
||||
-18
@@ -44,12 +44,7 @@ public class JavaTypeTransformer {
|
||||
|
||||
private static final Logger LOG = Logger.getInstance(JavaTypeTransformer.class);
|
||||
|
||||
private JavaSemanticServices javaSemanticServices;
|
||||
private JavaDescriptorResolver resolver;
|
||||
@Inject
|
||||
public void setJavaSemanticServices(JavaSemanticServices javaSemanticServices) {
|
||||
this.javaSemanticServices = javaSemanticServices;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setResolver(JavaDescriptorResolver resolver) {
|
||||
@@ -89,19 +84,6 @@ public class JavaTypeTransformer {
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JetType transformToType(@NotNull String kotlinSignature, TypeVariableResolver typeVariableResolver) {
|
||||
final JetType[] r = new JetType[1];
|
||||
JetTypeJetSignatureReader reader = new JetTypeJetSignatureReader(javaSemanticServices, KotlinBuiltIns.getInstance(), typeVariableResolver) {
|
||||
@Override
|
||||
protected void done(@NotNull JetType jetType) {
|
||||
r[0] = jetType;
|
||||
}
|
||||
};
|
||||
new JetSignatureReader(kotlinSignature).acceptType(reader);
|
||||
return r[0];
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JetType transformToType(@NotNull PsiType javaType,
|
||||
@NotNull TypeVariableResolver typeVariableResolver) {
|
||||
|
||||
-198
@@ -1,198 +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 org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.types.*;
|
||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||
import org.jetbrains.jet.rt.signature.JetSignatureExceptionsAdapter;
|
||||
import org.jetbrains.jet.rt.signature.JetSignatureVariance;
|
||||
import org.jetbrains.jet.rt.signature.JetSignatureVisitor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class JetTypeJetSignatureReader extends JetSignatureExceptionsAdapter {
|
||||
|
||||
private final JavaSemanticServices javaSemanticServices;
|
||||
private final JavaDescriptorResolver javaDescriptorResolver;
|
||||
private final KotlinBuiltIns kotlinBuiltIns;
|
||||
private final TypeVariableResolver typeVariableResolver;
|
||||
|
||||
public JetTypeJetSignatureReader(JavaSemanticServices javaSemanticServices, KotlinBuiltIns kotlinBuiltIns, TypeVariableResolver typeVariableResolver) {
|
||||
this.javaSemanticServices = javaSemanticServices;
|
||||
this.javaDescriptorResolver = javaSemanticServices.getDescriptorResolver();
|
||||
this.kotlinBuiltIns = kotlinBuiltIns;
|
||||
this.typeVariableResolver = typeVariableResolver;
|
||||
}
|
||||
|
||||
|
||||
private JetType getPrimitiveType(char descriptor, boolean nullable) {
|
||||
if (!nullable) {
|
||||
for (JvmPrimitiveType jvmPrimitiveType : JvmPrimitiveType.values()) {
|
||||
if (jvmPrimitiveType.getJvmLetter() == descriptor) {
|
||||
return KotlinBuiltIns.getInstance().getPrimitiveJetType(jvmPrimitiveType.getPrimitiveType());
|
||||
}
|
||||
}
|
||||
if (descriptor == 'V') {
|
||||
return KotlinBuiltIns.getInstance().getUnitType();
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (JvmPrimitiveType jvmPrimitiveType : JvmPrimitiveType.values()) {
|
||||
if (jvmPrimitiveType.getJvmLetter() == descriptor) {
|
||||
return KotlinBuiltIns.getInstance().getNullablePrimitiveJetType(jvmPrimitiveType.getPrimitiveType());
|
||||
}
|
||||
}
|
||||
if (descriptor == 'V') {
|
||||
throw new IllegalStateException("incorrect signature: nullable void");
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException("incorrect signature");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitBaseType(char descriptor, boolean nullable) {
|
||||
done(getPrimitiveType(descriptor, nullable));
|
||||
}
|
||||
|
||||
|
||||
private ClassDescriptor classDescriptor;
|
||||
private JetType errorType;
|
||||
private boolean nullable;
|
||||
private List<TypeProjection> typeArguments;
|
||||
|
||||
@Override
|
||||
public void visitClassType(String signatureName, boolean nullable, boolean forceReal) {
|
||||
FqName fqName = JvmClassName.bySignatureName(signatureName).getFqName();
|
||||
|
||||
enterClass(resolveClassDescriptorByFqName(fqName, forceReal), fqName.asString(), nullable);
|
||||
}
|
||||
|
||||
private void enterClass(@Nullable ClassDescriptor classDescriptor, @NotNull String className, boolean nullable) {
|
||||
this.classDescriptor = classDescriptor;
|
||||
|
||||
if (this.classDescriptor == null) {
|
||||
// TODO: report in to trace
|
||||
this.errorType = ErrorUtils.createErrorType("class not found by name: " + className);
|
||||
}
|
||||
this.nullable = nullable;
|
||||
this.typeArguments = new ArrayList<TypeProjection>();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private ClassDescriptor resolveClassDescriptorByFqName(FqName ourName, boolean forceReal) {
|
||||
if (!forceReal) {
|
||||
ClassDescriptor mappedDescriptor = JavaToKotlinClassMap.getInstance().
|
||||
mapKotlinClass(ourName, TypeUsage.MEMBER_SIGNATURE_INVARIANT);
|
||||
if (mappedDescriptor != null) {
|
||||
return mappedDescriptor;
|
||||
}
|
||||
}
|
||||
|
||||
return javaDescriptorResolver.resolveClass(ourName, DescriptorSearchRule.INCLUDE_KOTLIN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitInnerClassType(String signatureName, boolean nullable, boolean forceReal) {
|
||||
JvmClassName jvmClassName = JvmClassName.bySignatureName(signatureName);
|
||||
ClassDescriptor descriptor = resolveClassDescriptorByFqName(jvmClassName.getOuterClassFqName(), forceReal);
|
||||
for (String innerClassName : jvmClassName.getInnerClassNameList()) {
|
||||
descriptor = descriptor != null ? DescriptorUtils.getInnerClassByName(descriptor, innerClassName) : null;
|
||||
}
|
||||
enterClass(descriptor, signatureName, nullable);
|
||||
}
|
||||
|
||||
private static Variance parseVariance(JetSignatureVariance variance) {
|
||||
switch (variance) {
|
||||
case INVARIANT: return Variance.INVARIANT;
|
||||
case OUT: return Variance.OUT_VARIANCE;
|
||||
case IN: return Variance.IN_VARIANCE;
|
||||
default: throw new IllegalStateException();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public JetSignatureVisitor visitTypeArgument(final JetSignatureVariance variance) {
|
||||
return new JetTypeJetSignatureReader(javaSemanticServices, kotlinBuiltIns, typeVariableResolver) {
|
||||
|
||||
@Override
|
||||
protected void done(@NotNull JetType jetType) {
|
||||
typeArguments.add(new TypeProjection(parseVariance(variance), jetType));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public JetSignatureVisitor visitArrayType(final boolean nullable, final JetSignatureVariance wildcard) {
|
||||
return new JetTypeJetSignatureReader(javaSemanticServices, kotlinBuiltIns, typeVariableResolver) {
|
||||
@Override
|
||||
public void visitBaseType(char descriptor, boolean nullable) {
|
||||
JetType primitiveType = getPrimitiveType(descriptor, nullable);
|
||||
JetType arrayType;
|
||||
if (!nullable) {
|
||||
arrayType = KotlinBuiltIns.getInstance().getPrimitiveArrayJetTypeByPrimitiveJetType(primitiveType);
|
||||
}
|
||||
else {
|
||||
arrayType = TypeUtils.makeNullableAsSpecified(KotlinBuiltIns.getInstance().getArrayType(primitiveType), nullable);
|
||||
}
|
||||
JetTypeJetSignatureReader.this.done(arrayType);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void done(@NotNull JetType jetType) {
|
||||
JetType arrayType = TypeUtils.makeNullableAsSpecified(KotlinBuiltIns.getInstance().getArrayType(
|
||||
parseVariance(wildcard), jetType), nullable);
|
||||
JetTypeJetSignatureReader.this.done(arrayType);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitTypeVariable(String name, boolean nullable) {
|
||||
JetType r = TypeUtils.makeNullableAsSpecified(typeVariableResolver.getTypeVariable(name).getDefaultType(), nullable);
|
||||
done(r);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitEnd() {
|
||||
if ((errorType != null) == (classDescriptor != null)) {
|
||||
throw new IllegalStateException("must initialize either errorType or classDescriptor");
|
||||
}
|
||||
JetType jetType;
|
||||
if (errorType != null) {
|
||||
jetType = errorType;
|
||||
}
|
||||
else {
|
||||
jetType = new JetTypeImpl(
|
||||
Collections.<AnnotationDescriptor>emptyList(),
|
||||
classDescriptor.getTypeConstructor(),
|
||||
nullable,
|
||||
typeArguments,
|
||||
classDescriptor.getMemberScope(typeArguments));
|
||||
}
|
||||
done(jetType);
|
||||
}
|
||||
|
||||
protected abstract void done(@NotNull JetType jetType);
|
||||
}
|
||||
Reference in New Issue
Block a user