List of usage examples for org.eclipse.jdt.core.compiler CharOperation deepCopy
public static final char[][] deepCopy(char[][] toCopy)
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$ }