Add MissingDependencyErrorClass which is treated specially during rendering
This commit is contained in:
+66
@@ -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<JetType>()) {
|
||||||
|
|
||||||
|
override fun substitute(substitutor: TypeSubstitutor): ClassDescriptor {
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return getName().asString()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getMemberScope(typeArguments: List<TypeProjection?>): JetScope {
|
||||||
|
return createErrorScope("Error scope for class " + getName() + " with arguments: " + typeArguments)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
val emptyConstructor = ConstructorDescriptorImpl(this, Annotations.EMPTY, true)
|
||||||
|
emptyConstructor.initialize(Collections.emptyList<TypeParameterDescriptor>(), Collections.emptyList<ValueParameterDescriptor>(), Visibilities.INTERNAL)
|
||||||
|
emptyConstructor.setReturnType(createErrorType("<ERROR RETURN TYPE>"))
|
||||||
|
initialize(JetScope.EMPTY, Collections.singleton<ConstructorDescriptor>(emptyConstructor), emptyConstructor)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -102,7 +102,7 @@ public class DescriptorRendererBuilder {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DescriptorRendererBuilder setOverrideRenderingPolicy(DescriptorRenderer.OverrideRenderingPolicy overrideRenderingPolicy) {
|
public DescriptorRendererBuilder setOverrideRenderingPolicy(@NotNull DescriptorRenderer.OverrideRenderingPolicy overrideRenderingPolicy) {
|
||||||
this.overrideRenderingPolicy = overrideRenderingPolicy;
|
this.overrideRenderingPolicy = overrideRenderingPolicy;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.FqNameUnsafe;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.lang.types.*;
|
import org.jetbrains.jet.lang.types.*;
|
||||||
|
import org.jetbrains.jet.lang.types.error.MissingDependencyErrorClass;
|
||||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -54,6 +55,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
|||||||
private final boolean normalizedVisibilities;
|
private final boolean normalizedVisibilities;
|
||||||
private final boolean showInternalKeyword;
|
private final boolean showInternalKeyword;
|
||||||
private final boolean prettyFunctionTypes;
|
private final boolean prettyFunctionTypes;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private final OverrideRenderingPolicy overrideRenderingPolicy;
|
private final OverrideRenderingPolicy overrideRenderingPolicy;
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -66,7 +68,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
|||||||
/* package */ DescriptorRendererImpl(
|
/* package */ DescriptorRendererImpl(
|
||||||
boolean shortNames,
|
boolean shortNames,
|
||||||
boolean withDefinedIn,
|
boolean withDefinedIn,
|
||||||
Set<DescriptorRenderer.Modifier> modifiers,
|
Set<Modifier> modifiers,
|
||||||
boolean startFromName,
|
boolean startFromName,
|
||||||
boolean debugMode,
|
boolean debugMode,
|
||||||
boolean classWithPrimaryConstructor,
|
boolean classWithPrimaryConstructor,
|
||||||
@@ -179,6 +181,9 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private String renderClassName(@NotNull ClassDescriptor klass) {
|
private String renderClassName(@NotNull ClassDescriptor klass) {
|
||||||
|
if (klass instanceof MissingDependencyErrorClass) {
|
||||||
|
return ((MissingDependencyErrorClass) klass).getFullFqName().asString();
|
||||||
|
}
|
||||||
if (ErrorUtils.isError(klass)) {
|
if (ErrorUtils.isError(klass)) {
|
||||||
return klass.getTypeConstructor().toString();
|
return klass.getTypeConstructor().toString();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user