Remove JetTypeJetSignatureReader

This commit is contained in:
Pavel V. Talanov
2013-07-16 20:03:44 +04:00
parent a9b57a5535
commit f77dd0bad6
5 changed files with 0 additions and 219 deletions
@@ -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);
@@ -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) {
@@ -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);
}