Skip to content
This repository has been archived by the owner on Aug 28, 2024. It is now read-only.

Commit

Permalink
Merge pull request #21 from BaseMC/develop
Browse files Browse the repository at this point in the history
Some updates from upstream
  • Loading branch information
litetex authored Mar 3, 2020
2 parents 4ec8fc7 + ea600bc commit 2c0435a
Show file tree
Hide file tree
Showing 10 changed files with 143 additions and 26 deletions.
2 changes: 1 addition & 1 deletion .github/pull.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
version: "1"
rules:
- base: master
- base: develop
upstream: fesh0r:master
label: ":arrow_heading_down: pull"
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
name: Master PR CI
name: Develop PR CI

on:
pull_request:
branches:
- 'master'
- 'develop'

jobs:
test:
Expand Down
27 changes: 27 additions & 0 deletions .github/workflows/develop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Develop CI

on:
push:
branches:
- 'develop'

jobs:
test:
name: Test - Build & Unit
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v1
- name: Setup - Java
uses: actions/setup-java@v1
with:
java-version: 11.0.x
- name: Setup - Restore Cache
uses: actions/cache@v1
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build - Gradle
run: ./gradlew build
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
[![Build](https://img.shields.io/github/workflow/status/BaseMC/avesflower/Master%20CI)](https://github.com/BaseMC/avesflower/actions)
[![Latest Version](https://img.shields.io/github/v/release/BaseMC/avesflower)](https://github.com/BaseMC/avesflower/releases)
[![Build Develop](https://img.shields.io/github/workflow/status/BaseMC/avesflower/Develop%20CI?label=build%20develop)](https://github.com/BaseMC/avesflower/actions)

# AvesFlower
Modificated version (fork) of [fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine) for the Aves project
Modificated version of [fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine) (forked from [here](https://github.com/fesh0r/fernflower)) for the Aves project

[license for modifications](LICENSE)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@ public TextBuffer toJava(int indent, BytecodeMappingTracer tracer) {
if (anonymous) {
ClassNode child = DecompilerContext.getClassProcessor().getMapRootClasses().get(newType.value);

boolean selfReference = DecompilerContext.getProperty(DecompilerContext.CURRENT_CLASS_NODE) == child;

// IDEA-204310 - avoid backtracking later on for lambdas (causes spurious imports)
if (!enumConst && (!lambda || DecompilerContext.getOption(IFernflowerPreferences.LAMBDA_TO_ANONYMOUS_CLASS))) {
String enclosing = null;
Expand All @@ -156,33 +158,37 @@ public TextBuffer toJava(int indent, BytecodeMappingTracer tracer) {

buf.append("new ");

String typename = ExprProcessor.getCastTypeName(child.anonymousClassType);
if (enclosing != null) {
ClassNode anonymousNode = DecompilerContext.getClassProcessor().getMapRootClasses().get(child.anonymousClassType.value);
if (anonymousNode != null) {
typename = anonymousNode.simpleName;
}
else {
typename = typename.substring(typename.lastIndexOf('.') + 1);
if (selfReference) {
buf.append("<anonymous constructor>");
} else {
String typename = ExprProcessor.getCastTypeName(child.anonymousClassType);
if (enclosing != null) {
ClassNode anonymousNode = DecompilerContext.getClassProcessor().getMapRootClasses().get(child.anonymousClassType.value);
if (anonymousNode != null) {
typename = anonymousNode.simpleName;
}
else {
typename = typename.substring(typename.lastIndexOf('.') + 1);
}
}
}

GenericClassDescriptor descriptor = ClassWriter.getGenericClassDescriptor(child.classStruct);
if (descriptor != null) {
if (descriptor.superinterfaces.isEmpty()) {
buf.append(GenericMain.getGenericCastTypeName(descriptor.superclass));
GenericClassDescriptor descriptor = ClassWriter.getGenericClassDescriptor(child.classStruct);
if (descriptor != null) {
if (descriptor.superinterfaces.isEmpty()) {
buf.append(GenericMain.getGenericCastTypeName(descriptor.superclass));
}
else {
if (descriptor.superinterfaces.size() > 1 && !lambda) {
DecompilerContext.getLogger().writeMessage("Inconsistent anonymous class signature: " + child.classStruct.qualifiedName,
IFernflowerLogger.Severity.WARN);
}
buf.append(GenericMain.getGenericCastTypeName(descriptor.superinterfaces.get(0)));
}
}
else {
if (descriptor.superinterfaces.size() > 1 && !lambda) {
DecompilerContext.getLogger().writeMessage("Inconsistent anonymous class signature: " + child.classStruct.qualifiedName,
IFernflowerLogger.Severity.WARN);
}
buf.append(GenericMain.getGenericCastTypeName(descriptor.superinterfaces.get(0)));
buf.append(typename);
}
}
else {
buf.append(typename);
}
}

buf.append('(');
Expand Down Expand Up @@ -226,7 +232,7 @@ public TextBuffer toJava(int indent, BytecodeMappingTracer tracer) {
buf.append(clsBuf);
tracer.incrementCurrentSourceLine(clsBuf.countLines());
}
else {
else if (!selfReference) {
TextBuffer clsBuf = new TextBuffer();
new ClassWriter().classToJava(child, clsBuf, indent, tracer);
buf.append(clsBuf);
Expand Down
5 changes: 5 additions & 0 deletions test/org/jetbrains/java/decompiler/BulkDecompilationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ public void testJar() {
doTestJar("bulk");
}

@Test
public void testKtJar() {
doTestJar("kt25937");
}

@Test
public void testObfuscated() {
doTestJar("obfuscated");
Expand Down
Binary file added testData/kt25937.jar
Binary file not shown.
3 changes: 3 additions & 0 deletions testData/kt25937/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Manifest-Version: 1.0
Created-By: 1.8.0_171 (Oracle Corporation)

26 changes: 26 additions & 0 deletions testData/kt25937/kt/Kt25937Kt.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package kt;

import kotlin.Metadata;
import kotlin.Unit;
import kotlin.coroutines.Continuation;
import kotlin.jvm.functions.Function1;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.NotNull;

@Metadata(
mv = {1, 1, 16},
bv = {1, 0, 3},
k = 2,
d1 = {"\u0000\u001c\n\u0000\n\u0002\u0010\b\n\u0000\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0010\u0002\n\u0002\u0010\u0000\n\u0002\b\u0003\u001a,\u0010\u0000\u001a\u00020\u00012\u001c\u0010\u0002\u001a\u0018\b\u0001\u0012\n\u0012\b\u0012\u0004\u0012\u00020\u00050\u0004\u0012\u0006\u0012\u0004\u0018\u00010\u00060\u0003ø\u0001\u0000¢\u0006\u0002\u0010\u0007\u001a\u0006\u0010\b\u001a\u00020\u0001\u0082\u0002\u0004\n\u0002\b\u0019¨\u0006\t"},
d2 = {"callSuspendBlock", "", "block", "Lkotlin/Function1;", "Lkotlin/coroutines/Continuation;", "", "", "(Lkotlin/jvm/functions/Function1;)I", "callSuspendBlockGood", "kotlinx-test"}
)
public final class Kt25937Kt {
public static final int callSuspendBlock(@NotNull Function1<? super Continuation<? super Unit>, ? extends Object> block) {
Intrinsics.checkParameterIsNotNull(block, "block");
return 1;
}

public static final int callSuspendBlockGood() {
return 1;
}
}
49 changes: 49 additions & 0 deletions testData/kt25937/kt/Kt25937_1Kt.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package kt;

import kotlin.Metadata;
import kotlin.ResultKt;
import kotlin.Unit;
import kotlin.coroutines.Continuation;
import kotlin.coroutines.intrinsics.IntrinsicsKt;
import kotlin.jvm.functions.Function1;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

@Metadata(
mv = {1, 1, 17},
bv = {1, 0, 3},
k = 2,
d1 = {"\u0000\b\n\u0000\n\u0002\u0010\b\n\u0000\u001a\u0006\u0010\u0000\u001a\u00020\u0001¨\u0006\u0002"},
d2 = {"some1", "", "ide-kotlin-test.kotlinx-test.main"}
)
public final class Kt25937_1Kt {
public static final int some1() {
return Kt25937Kt.callSuspendBlock((Function1)(new Function1<Continuation<? super Unit>, Object>((Continuation)null) {
int label;

@Nullable
public final Object invokeSuspend(@NotNull Object $result) {
Object var2 = IntrinsicsKt.getCOROUTINE_SUSPENDED();
switch(this.label) {
case 0:
ResultKt.throwOnFailure($result);
return Unit.INSTANCE;
default:
throw new IllegalStateException("call to 'resume' before 'invoke' with coroutine");
}
}

@NotNull
public final Continuation<Unit> create(@NotNull Continuation<?> completion) {
Intrinsics.checkParameterIsNotNull(completion, "completion");
Function1 var2 = new <anonymous constructor>(completion);
return var2;
}

public final Object invoke(Object var1) {
return ((<undefinedtype>)this.create((Continuation)var1)).invokeSuspend(Unit.INSTANCE);
}
}));
}
}

0 comments on commit 2c0435a

Please sign in to comment.