All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.myfaces.trinidadbuild.plugin.javascript.obfuscator.filters.obfuscation.state.StatementBlockState Maven / Gradle / Ivy

The newest version!
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.myfaces.trinidadbuild.plugin.javascript.obfuscator.filters.obfuscation.state;

import org.apache.myfaces.trinidadbuild.plugin.javascript.obfuscator.javascript15parser.AnnotatedToken;
import org.apache.myfaces.trinidadbuild.plugin.javascript.obfuscator.javascript15parser.NameGen;
import org.apache.myfaces.trinidadbuild.plugin.javascript.obfuscator.javascript15parser.ProgramContext;
import org.apache.myfaces.trinidadbuild.plugin.javascript.obfuscator.javascript15parser.ProgramContextStack;


public class StatementBlockState extends ObfuscationState
{
  static private StatementBlockState _instance;

  private StatementBlockState()
  {
  }

  static public StatementBlockState getInstance()
  {
    if (_instance == null)
    {
      synchronized (StatementBlockState.class)
      {
        if (_instance == null)
        {
          _instance = new StatementBlockState();
        }
      }
    }

    return _instance;
  }

  public AnnotatedToken enterState(ProgramContextStack contextStack,
    AnnotatedToken startToken, NameGen nameGen)
  {
    // do not create a new context in a statement block. JavaScript does not use a new scope in a
    // statement block
    AnnotatedToken token = startToken.getNext();

    return processCodeBlock(contextStack, token);
  }

  public void exitState(ProgramContextStack contextStack)
  {
    // do not pop context
  }

  protected void processVarIdentifier(ProgramContextStack contextStack,
    AnnotatedToken token)
  {
    ProgramContext blockContext = (ProgramContext) contextStack.peek();

    // normal processing for functions that do not use eval() calls
    if (!(blockContext instanceof FunctionContext) ||
        (blockContext instanceof FunctionContext &&
        ((FunctionContext) blockContext).canObfuscateLocalVars()))
    {
      super.processVarIdentifier(contextStack, token);
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy