Package cuchaz.enigma

Source Code of cuchaz.enigma.TokenChecker

/*******************************************************************************
* Copyright (c) 2014 Jeff Martin.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
*     Jeff Martin - initial API and implementation
******************************************************************************/
package cuchaz.enigma;

import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.List;

import com.google.common.collect.Lists;
import com.strobel.decompiler.languages.java.ast.CompilationUnit;

import cuchaz.enigma.analysis.EntryReference;
import cuchaz.enigma.analysis.SourceIndex;
import cuchaz.enigma.analysis.Token;
import cuchaz.enigma.mapping.Entry;

public class TokenChecker
{
  private Deobfuscator m_deobfuscator;
   
  protected TokenChecker( File jarFile )
  throws IOException
  {
    m_deobfuscator = new Deobfuscator( jarFile );
  }
 
  protected String getDeclarationToken( Entry entry )
  {
    // decompile the class
    CompilationUnit tree = m_deobfuscator.getSourceTree( entry.getClassName() );
    // DEBUG
    //tree.acceptVisitor( new TreeDumpVisitor( new File( "tree." + entry.getClassName().replace( '/', '.' ) + ".txt" ) ), null );
    String source = m_deobfuscator.getSource( tree );
    SourceIndex index = m_deobfuscator.getSourceIndex( tree, source );
   
    // get the token value
    Token token = index.getDeclarationToken( entry );
    if( token == null )
    {
      return null;
    }
    return source.substring( token.start, token.end );
  }
 
  @SuppressWarnings( "unchecked" )
  protected Collection<String> getReferenceTokens( EntryReference<? extends Entry,? extends Entry> reference )
  {
    // decompile the class
    CompilationUnit tree = m_deobfuscator.getSourceTree( reference.context.getClassName() );
    String source = m_deobfuscator.getSource( tree );
    SourceIndex index = m_deobfuscator.getSourceIndex( tree, source );
   
    // get the token values
    List<String> values = Lists.newArrayList();
    for( Token token : index.getReferenceTokens( (EntryReference<Entry,Entry>)reference ) )
    {
      values.add( source.substring( token.start, token.end ) );
    }
    return values;
  }
}
TOP

Related Classes of cuchaz.enigma.TokenChecker

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.