Merge branch 'decompiler'
Conflicts: compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaPackageScope.java compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java
This commit is contained in:
@@ -23,6 +23,7 @@ import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
import org.objectweb.asm.Type;
|
||||
@@ -144,8 +145,8 @@ public class NamespaceCodegen {
|
||||
}
|
||||
|
||||
String name = fqName.getFqName().replace('.', '/');
|
||||
if(name.startsWith("<java_root>")) {
|
||||
name = name.substring("<java_root>".length() + 1, name.length());
|
||||
if (name.startsWith(JavaDescriptorResolver.JAVA_ROOT)) {
|
||||
name = name.substring(JavaDescriptorResolver.JAVA_ROOT.length() + 1, name.length());
|
||||
}
|
||||
if (namespace) {
|
||||
name += "/" + JvmAbi.PACKAGE_CLASS;
|
||||
|
||||
+1
-1
@@ -87,7 +87,7 @@ public class JavaClassMembersScope extends JavaClassOrPackageScope {
|
||||
@Override
|
||||
public Collection<DeclarationDescriptor> getAllDescriptors() {
|
||||
if (allDescriptors == null) {
|
||||
allDescriptors = Sets.newHashSet();
|
||||
allDescriptors = Sets.newLinkedHashSet();
|
||||
|
||||
allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveMethods(psiClass, descriptor));
|
||||
|
||||
|
||||
+2
-2
@@ -1021,7 +1021,7 @@ public class JavaDescriptorResolver {
|
||||
|
||||
ResolverScopeData scopeData = getResolverScopeData(owner, new PsiClassWrapper(psiClass));
|
||||
|
||||
Set<VariableDescriptor> descriptors = Sets.newHashSet();
|
||||
Set<VariableDescriptor> descriptors = Sets.newLinkedHashSet();
|
||||
Map<String, NamedMembers> membersForProperties = scopeData.namedMembersMap;
|
||||
for (Map.Entry<String, NamedMembers> entry : membersForProperties.entrySet()) {
|
||||
NamedMembers namedMembers = entry.getValue();
|
||||
@@ -1281,7 +1281,7 @@ public class JavaDescriptorResolver {
|
||||
|
||||
final Set<FunctionDescriptor> functions = new HashSet<FunctionDescriptor>();
|
||||
|
||||
Set<SimpleFunctionDescriptor> functionsFromCurrent = Sets.newHashSet();
|
||||
Set<SimpleFunctionDescriptor> functionsFromCurrent = Sets.newLinkedHashSet();
|
||||
for (PsiMethodWrapper method : namedMembers.methods) {
|
||||
FunctionDescriptorImpl function = resolveMethodToFunctionDescriptor(owner, psiClass,
|
||||
method);
|
||||
|
||||
+2
-5
@@ -18,14 +18,11 @@ package org.jetbrains.jet.lang.resolve.java;
|
||||
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiField;
|
||||
import com.intellij.psi.PsiMember;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
import com.intellij.psi.PsiParameter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -40,7 +37,7 @@ class JavaDescriptorResolverHelper {
|
||||
private final boolean staticMembers;
|
||||
private final boolean kotlin;
|
||||
|
||||
private Map<String, NamedMembers> namedMembersMap = new HashMap<String, NamedMembers>();
|
||||
private Map<String, NamedMembers> namedMembersMap = new LinkedHashMap<String, NamedMembers>();
|
||||
|
||||
private Builder(PsiClassWrapper psiClass, boolean staticMembers, boolean kotlin) {
|
||||
this.psiClass = psiClass;
|
||||
|
||||
+1
-1
@@ -99,7 +99,7 @@ public class JavaPackageScope extends JavaClassOrPackageScope {
|
||||
@Override
|
||||
public Collection<DeclarationDescriptor> getAllDescriptors() {
|
||||
if (allDescriptors == null) {
|
||||
allDescriptors = Sets.newHashSet();
|
||||
allDescriptors = Sets.newLinkedHashSet();
|
||||
|
||||
if (psiClass != null) {
|
||||
allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveMethods(psiClass, descriptor));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2012 JetBrains s.r.o.
|
||||
* Copyright 2010-2012 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.
|
||||
|
||||
@@ -20,11 +20,12 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.diagnostics.Renderer;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor;
|
||||
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.lang.types.TypeProjection;
|
||||
import org.jetbrains.jet.lang.types.Variance;
|
||||
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
|
||||
import org.jetbrains.jet.lexer.JetTokens;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -37,6 +38,13 @@ import java.util.List;
|
||||
*/
|
||||
public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
||||
|
||||
public static final DescriptorRenderer COMPACT = new DescriptorRenderer() {
|
||||
@Override
|
||||
protected boolean shouldRenderDefinedIn() {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
public static final DescriptorRenderer TEXT = new DescriptorRenderer();
|
||||
|
||||
public static final DescriptorRenderer HTML = new DescriptorRenderer() {
|
||||
@@ -102,7 +110,9 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
||||
|
||||
private String renderDefaultType(JetType type) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(type.getConstructor());
|
||||
ClassifierDescriptor cd = type.getConstructor().getDeclarationDescriptor();
|
||||
sb.append(cd == null || cd instanceof TypeParameterDescriptor
|
||||
? type.getConstructor() : DescriptorUtils.getFQName(cd));
|
||||
if (!type.getArguments().isEmpty()) {
|
||||
sb.append("<");
|
||||
appendTypeProjections(sb, type.getArguments());
|
||||
@@ -182,10 +192,16 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
||||
if (declarationDescriptor == null) return lt() + "null>";
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
declarationDescriptor.accept(rootVisitor, stringBuilder);
|
||||
appendDefinedIn(declarationDescriptor, stringBuilder);
|
||||
if (shouldRenderDefinedIn()) {
|
||||
appendDefinedIn(declarationDescriptor, stringBuilder);
|
||||
}
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
||||
protected boolean shouldRenderDefinedIn() {
|
||||
return true;
|
||||
}
|
||||
|
||||
private void appendDefinedIn(DeclarationDescriptor declarationDescriptor, StringBuilder stringBuilder) {
|
||||
stringBuilder.append(" ").append(renderMessage("defined in")).append(" ");
|
||||
|
||||
@@ -198,7 +214,9 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
||||
public String renderAsObject(@NotNull ClassDescriptor classDescriptor) {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
rootVisitor.renderClassDescriptor(classDescriptor, stringBuilder, "object");
|
||||
appendDefinedIn(classDescriptor, stringBuilder);
|
||||
if (shouldRenderDefinedIn()) {
|
||||
appendDefinedIn(classDescriptor, stringBuilder);
|
||||
}
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
||||
@@ -277,16 +295,15 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
||||
private void renderModality(Modality modality, StringBuilder builder) {
|
||||
switch (modality) {
|
||||
case FINAL:
|
||||
builder.append("final");
|
||||
// do not need: final by default
|
||||
break;
|
||||
case OPEN:
|
||||
builder.append("open");
|
||||
builder.append("open ");
|
||||
break;
|
||||
case ABSTRACT:
|
||||
builder.append("abstract");
|
||||
builder.append("abstract ");
|
||||
break;
|
||||
}
|
||||
builder.append(" ");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -342,8 +359,7 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
||||
builder.append(", ");
|
||||
}
|
||||
}
|
||||
builder.append("> ");
|
||||
return true;
|
||||
builder.append(">");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -365,19 +381,38 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
||||
|
||||
@Override
|
||||
public Void visitClassDescriptor(ClassDescriptor descriptor, StringBuilder builder) {
|
||||
String keyword = descriptor.getKind() == ClassKind.TRAIT ? "trait" : "class";
|
||||
String keyword;
|
||||
switch (descriptor.getKind()) {
|
||||
case TRAIT:
|
||||
keyword = "trait";
|
||||
break;
|
||||
case ENUM_CLASS:
|
||||
keyword = "enum class";
|
||||
break;
|
||||
case OBJECT:
|
||||
keyword = "object";
|
||||
break;
|
||||
default:
|
||||
keyword = "class";
|
||||
}
|
||||
renderClassDescriptor(descriptor, builder, keyword);
|
||||
return super.visitClassDescriptor(descriptor, builder);
|
||||
}
|
||||
|
||||
public void renderClassDescriptor(ClassDescriptor descriptor, StringBuilder builder, String keyword) {
|
||||
renderModality(descriptor.getModality(), builder);
|
||||
builder.append(renderKeyword(keyword)).append(" ");
|
||||
renderName(descriptor, builder);
|
||||
renderTypeParameters(descriptor.getTypeConstructor().getParameters(), builder);
|
||||
if (descriptor.getKind() != ClassKind.TRAIT) {
|
||||
renderModality(descriptor.getModality(), builder);
|
||||
}
|
||||
builder.append(renderKeyword(keyword));
|
||||
if (descriptor.getKind() != ClassKind.OBJECT) {
|
||||
builder.append(" ");
|
||||
renderName(descriptor, builder);
|
||||
renderTypeParameters(descriptor.getTypeConstructor().getParameters(), builder);
|
||||
}
|
||||
if (!descriptor.equals(JetStandardClasses.getNothing())) {
|
||||
Collection<? extends JetType> supertypes = descriptor.getTypeConstructor().getSupertypes();
|
||||
if (!supertypes.isEmpty()) {
|
||||
if (supertypes.isEmpty() || supertypes.size() == 1 && JetStandardClasses.isAny(supertypes.iterator().next())) {
|
||||
} else {
|
||||
builder.append(" : ");
|
||||
for (Iterator<? extends JetType> iterator = supertypes.iterator(); iterator.hasNext(); ) {
|
||||
JetType supertype = iterator.next();
|
||||
|
||||
Reference in New Issue
Block a user