|
|
|
/*
|
|
|
|
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
|
|
|
*/
|
|
|
|
package org.jetbrains.java.decompiler.modules.decompiler.exps;
|
|
|
|
|
|
|
|
import org.jetbrains.java.decompiler.code.CodeConstants;
|
|
|
|
import org.jetbrains.java.decompiler.main.ClassesProcessor.ClassNode;
|
|
|
|
import org.jetbrains.java.decompiler.main.DecompilerContext;
|
|
|
|
import org.jetbrains.java.decompiler.main.rels.ClassWrapper;
|
|
|
|
import org.jetbrains.java.decompiler.modules.decompiler.vars.VarVersionPair;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
public class ExprUtil {
|
|
|
|
public static List<VarVersionPair> getSyntheticParametersMask(String className, String descriptor, int parameters) {
|
|
|
|
ClassNode node = DecompilerContext.getClassProcessor().getMapRootClasses().get(className);
|
|
|
|
return node != null ? getSyntheticParametersMask(node, descriptor, parameters) : null;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static List<VarVersionPair> getSyntheticParametersMask(ClassNode node, String descriptor, int parameters) {
|
|
|
|
List<VarVersionPair> mask = null;
|
|
|
|
|
|
|
|
ClassWrapper wrapper = node.getWrapper();
|
|
|
|
if (wrapper != null) {
|
|
|
|
// own class
|
|
|
|
mask = wrapper.getMethodWrapper(CodeConstants.INIT_NAME, descriptor).synthParameters;
|
|
|
|
}
|
|
|
|
else if (parameters > 0 && node.type == ClassNode.CLASS_MEMBER && (node.access & CodeConstants.ACC_STATIC) == 0) {
|
|
|
|
// non-static member class
|
|
|
|
mask = new ArrayList<>(Collections.nCopies(parameters, null));
|
|
|
|
mask.set(0, new VarVersionPair(-1, 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
return mask;
|
|
|
|
}
|
|
|
|
}
|