diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/error/MissingDependencyErrorClass.kt b/core/descriptors/src/org/jetbrains/jet/lang/types/error/MissingDependencyErrorClass.kt new file mode 100644 index 00000000000..4e459f7362e --- /dev/null +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/error/MissingDependencyErrorClass.kt @@ -0,0 +1,66 @@ +/* + * Copyright 2010-2014 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.types.error + +import org.jetbrains.jet.lang.resolve.name.FqName +import org.jetbrains.jet.lang.types.TypeConstructorImpl +import org.jetbrains.jet.lang.descriptors.annotations.Annotations +import java.util.ArrayList +import org.jetbrains.jet.lang.types.TypeConstructor +import org.jetbrains.jet.lang.descriptors.ClassDescriptor +import org.jetbrains.jet.lang.types.TypeSubstitutor +import org.jetbrains.jet.lang.resolve.scopes.JetScope +import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorImpl +import org.jetbrains.jet.lang.descriptors.impl.ConstructorDescriptorImpl +import java.util.Collections +import org.jetbrains.jet.lang.descriptors.Visibilities +import org.jetbrains.jet.lang.descriptors.Modality +import org.jetbrains.jet.lang.types.JetType +import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor +import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor +import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor +import org.jetbrains.jet.lang.types.ErrorUtils.* +import org.jetbrains.jet.lang.resolve.name.Name +import org.jetbrains.jet.lang.types.TypeProjection + +// marker for DescriptorRenderer to treat specially in decompiler mode +public trait MissingDependencyErrorClass { + val fullFqName: FqName +} + +public class MissingDependencyErrorClassDescriptor(override val fullFqName: FqName) +: MissingDependencyErrorClass, ClassDescriptorImpl(getErrorModule(), fullFqName.shortName(), Modality.OPEN, Collections.emptyList()) { + + override fun substitute(substitutor: TypeSubstitutor): ClassDescriptor { + return this + } + + override fun toString(): String { + return getName().asString() + } + + override fun getMemberScope(typeArguments: List): JetScope { + return createErrorScope("Error scope for class " + getName() + " with arguments: " + typeArguments) + } + + { + val emptyConstructor = ConstructorDescriptorImpl(this, Annotations.EMPTY, true) + emptyConstructor.initialize(Collections.emptyList(), Collections.emptyList(), Visibilities.INTERNAL) + emptyConstructor.setReturnType(createErrorType("")) + initialize(JetScope.EMPTY, Collections.singleton(emptyConstructor), emptyConstructor) + } +} diff --git a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java index 5e49a8eaae9..464fe5c0fab 100644 --- a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java +++ b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java @@ -102,7 +102,7 @@ public class DescriptorRendererBuilder { return this; } - public DescriptorRendererBuilder setOverrideRenderingPolicy(DescriptorRenderer.OverrideRenderingPolicy overrideRenderingPolicy) { + public DescriptorRendererBuilder setOverrideRenderingPolicy(@NotNull DescriptorRenderer.OverrideRenderingPolicy overrideRenderingPolicy) { this.overrideRenderingPolicy = overrideRenderingPolicy; return this; } diff --git a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index c12258dfef5..0bf3b5d0a14 100644 --- a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -36,6 +36,7 @@ import org.jetbrains.jet.lang.resolve.name.FqNameBase; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.*; +import org.jetbrains.jet.lang.types.error.MissingDependencyErrorClass; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import java.util.*; @@ -54,6 +55,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { private final boolean normalizedVisibilities; private final boolean showInternalKeyword; private final boolean prettyFunctionTypes; + @NotNull private final OverrideRenderingPolicy overrideRenderingPolicy; @NotNull @@ -66,7 +68,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { /* package */ DescriptorRendererImpl( boolean shortNames, boolean withDefinedIn, - Set modifiers, + Set modifiers, boolean startFromName, boolean debugMode, boolean classWithPrimaryConstructor, @@ -179,6 +181,9 @@ public class DescriptorRendererImpl implements DescriptorRenderer { @NotNull private String renderClassName(@NotNull ClassDescriptor klass) { + if (klass instanceof MissingDependencyErrorClass) { + return ((MissingDependencyErrorClass) klass).getFullFqName().asString(); + } if (ErrorUtils.isError(klass)) { return klass.getTypeConstructor().toString(); }