103a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta/*
203a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * Copyright (C) 2013 The Android Open Source Project
303a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta *
403a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * Licensed under the Apache License, Version 2.0 (the "License");
503a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * you may not use this file except in compliance with the License.
603a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * You may obtain a copy of the License at
703a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta *
803a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta *      http://www.apache.org/licenses/LICENSE-2.0
903a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta *
1003a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * Unless required by applicable law or agreed to in writing, software
1103a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * distributed under the License is distributed on an "AS IS" BASIS,
1203a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1303a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * See the License for the specific language governing permissions and
1403a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * limitations under the License.
1503a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta */
1603a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
1703a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Guptapackage com.android.tools.layoutlib.create;
1803a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
1903a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Guptaimport java.util.HashMap;
2003a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
2103a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Guptaimport org.objectweb.asm.ClassVisitor;
2203a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
2303a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Guptapublic class RefactorClassAdapter extends AbstractClassAdapter {
2403a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
2503a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    private final HashMap<String, String> mRefactorClasses;
2603a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
2703a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    RefactorClassAdapter(ClassVisitor cv, HashMap<String, String> refactorClasses) {
2803a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        super(cv);
2903a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        mRefactorClasses = refactorClasses;
3003a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    }
3103a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
3203a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    @Override
3303a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    protected String renameInternalType(String oldClassName) {
3403a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        if (oldClassName != null) {
3503a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta            String newName = mRefactorClasses.get(oldClassName);
3603a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta            if (newName != null) {
3703a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta                return newName;
3803a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta            }
3903a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta            int pos = oldClassName.indexOf('$');
4003a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta            if (pos > 0) {
4103a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta                newName = mRefactorClasses.get(oldClassName.substring(0, pos));
4203a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta                if (newName != null) {
4303a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta                    return newName + oldClassName.substring(pos);
4403a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta                }
4503a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta            }
4603a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        }
4703a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        return oldClassName;
4803a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    }
4903a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta}
50