Example usage for org.eclipse.jdt.core.compiler CharOperation deepCopy

List of usage examples for org.eclipse.jdt.core.compiler CharOperation deepCopy

Introduction

In this page you can find the example usage for org.eclipse.jdt.core.compiler CharOperation deepCopy.

Prototype


public static final char[][] deepCopy(char[][] toCopy) 

Source Link

Document

Answers a deep copy of the toCopy array.

Usage

From source file:org.eclipse.objectteams.otdt.internal.core.compiler.util.AstClone.java

License:Open Source License

/**
 * This method will duplicate a Type Reference
 * @param typeReference the TypeReference to duplicate
 * @return the duplicated TypeReference/*w w  w.  jav  a2s .  co m*/
 */
public static TypeReference copyTypeReference(TypeReference typeReference, AstGenerator gen) {
    if (typeReference == null)
        return null;
    if (gen == null)
        return copyTypeReference(typeReference);

    TypeReference result = null;
    int dims = typeReference.dimensions();
    if (typeReference instanceof Wildcard) {
        Wildcard wildcard = (Wildcard) typeReference;
        Wildcard newWildcard = gen.wildcard(wildcard.kind);
        newWildcard.bound = copyTypeReference(wildcard.bound);
        result = newWildcard;
    } else if (typeReference instanceof SingleTypeReference) {
        char[] name = ((SingleTypeReference) typeReference).token;
        if (typeReference instanceof ParameterizedSingleTypeReference) {
            ParameterizedSingleTypeReference pTypeReference = (ParameterizedSingleTypeReference) typeReference;
            TypeReference[] newArgs = copyTypeArguments(typeReference, gen.pos, pTypeReference.typeArguments);
            result = gen.parameterizedSingleTypeReference(name, newArgs, dims);
        } else {
            if (dims > 0)
                result = gen.arrayTypeReference(name, dims);
            else
                result = gen.singleTypeReference(name);
        }
    } else if (typeReference instanceof QualifiedTypeReference) {
        QualifiedTypeReference qualifiedTypeReference = (QualifiedTypeReference) typeReference;

        char[][] typeName = CharOperation.deepCopy(qualifiedTypeReference.tokens);
        if (typeReference instanceof ParameterizedQualifiedTypeReference) {
            ParameterizedQualifiedTypeReference pqTypeReference = (ParameterizedQualifiedTypeReference) typeReference;
            int len = pqTypeReference.typeArguments.length;
            TypeReference[][] newArgs = new TypeReference[len][];
            for (int i = 0; i < len; i++)
                newArgs[i] = copyTypeArray(pqTypeReference.typeArguments[i]); // sufficient; qualified types are not dependent.
            result = gen.parameterizedQualifiedTypeReference(typeName, newArgs, dims);
        } else {
            QualifiedTypeReference qualifiedResult;
            if (dims > 0)
                qualifiedResult = gen.qualifiedArrayTypeReference(typeName, dims);
            else
                qualifiedResult = gen.qualifiedTypeReference(typeName);
            qualifiedResult.isGenerated = qualifiedTypeReference.isGenerated;
            result = qualifiedResult;
        }
    }

    else if (typeReference instanceof LiftingTypeReference) {
        LiftingTypeReference liftingRef = (LiftingTypeReference) typeReference;
        result = gen.liftingTypeReference(AstClone.copyTypeReference(liftingRef.baseReference),
                AstClone.copyTypeReference(liftingRef.roleReference), liftingRef.roleToken,
                liftingRef.baseTokens);
    } else if (typeReference instanceof TypeAnchorReference) {
        TypeAnchorReference anchorRef = (TypeAnchorReference) typeReference;
        result = new TypeAnchorReference(copyReference(anchorRef.anchor), gen.sourceStart);
        // TODO(SH): need to set any further fields??
    }
    if (result != null) {
        result.setBaseclassDecapsulation(typeReference.getBaseclassDecapsulation());
        result.bits = typeReference.bits;
        return result;
    }
    throw new InternalCompilerError("Unexpected kind of type reference: " + typeReference.getClass().getName()); //$NON-NLS-1$
}

From source file:org.eclipse.objectteams.otdt.internal.core.compiler.util.AstClone.java

License:Open Source License

public static TypeReference copyTypeReference(TypeReference typeReference) {
    if (typeReference == null)
        return null;

    TypeReference result = null;/*from w ww.  j av a2  s .  c om*/
    int dims = typeReference.dimensions();
    if (typeReference instanceof Wildcard) {
        Wildcard wildcard = (Wildcard) typeReference;
        Wildcard newWildcard = new Wildcard(wildcard.kind);
        newWildcard.sourceStart = wildcard.sourceStart;
        newWildcard.sourceEnd = wildcard.sourceEnd;
        newWildcard.bound = copyTypeReference(wildcard.bound);
        result = newWildcard;
    } else if (typeReference instanceof SingleTypeReference) {
        char[] name = ((SingleTypeReference) typeReference).token;
        long pos = (((long) typeReference.sourceStart) << 32) + typeReference.sourceEnd;
        if (typeReference instanceof ParameterizedSingleTypeReference) {
            ParameterizedSingleTypeReference pTypeReference = (ParameterizedSingleTypeReference) typeReference;
            TypeReference[] newArgs = copyTypeArguments(typeReference, pos, pTypeReference.typeArguments);
            result = new ParameterizedSingleTypeReference(name, newArgs, dims, pos);
        } else {
            if (dims > 0)
                result = new ArrayTypeReference(name, dims, pos);
            else
                result = new SingleTypeReference(name, pos);
        }
    } else if (typeReference instanceof QualifiedTypeReference) {
        QualifiedTypeReference qualifiedTypeReference = (QualifiedTypeReference) typeReference;

        char[][] typeName = CharOperation.deepCopy(qualifiedTypeReference.tokens);
        long[] poss = qualifiedTypeReference.sourcePositions;
        if (typeReference instanceof ParameterizedQualifiedTypeReference) {
            ParameterizedQualifiedTypeReference pqTypeReference = (ParameterizedQualifiedTypeReference) typeReference;
            int len = pqTypeReference.typeArguments.length;
            TypeReference[][] newArgs = new TypeReference[len][];
            for (int i = 0; i < len; i++)
                newArgs[i] = copyTypeArray(pqTypeReference.typeArguments[i]); // sufficient; qualified types are not dependent.
            result = new ParameterizedQualifiedTypeReference(typeName, newArgs, dims, poss);
        } else {
            if (dims > 0)
                result = new ArrayQualifiedTypeReference(typeName, dims, poss);
            else
                result = new QualifiedTypeReference(typeName, poss);
        }
    }

    else if (typeReference instanceof LiftingTypeReference) {
        LiftingTypeReference liftingRef = (LiftingTypeReference) typeReference;
        LiftingTypeReference newLiftingRef = new LiftingTypeReference();
        newLiftingRef.baseReference = AstClone.copyTypeReference(liftingRef.baseReference);
        newLiftingRef.roleReference = AstClone.copyTypeReference(liftingRef.roleReference);
        newLiftingRef.sourceStart = liftingRef.sourceStart;
        newLiftingRef.sourceEnd = liftingRef.sourceEnd;

        newLiftingRef.roleToken = liftingRef.roleToken;
        newLiftingRef.baseTokens = new char[liftingRef.baseTokens.length][];
        System.arraycopy(liftingRef.baseTokens, 0, newLiftingRef.baseTokens, 0, liftingRef.baseTokens.length);

        result = newLiftingRef;
    } else if (typeReference instanceof TypeAnchorReference) {
        TypeAnchorReference anchorRef = (TypeAnchorReference) typeReference;
        result = new TypeAnchorReference(copyReference(anchorRef.anchor), anchorRef.sourceStart);
        // TODO(SH): need to set any further fields??
    }
    if (result != null) {
        result.setBaseclassDecapsulation(typeReference.getBaseclassDecapsulation());
        result.bits = typeReference.bits;
        result.isGenerated = true;
        return result;
    }
    throw new InternalCompilerError("Unexpected kind of type reference: " + typeReference.getClass().getName()); //$NON-NLS-1$
}