| /******************************************************************************* |
| * Copyright (c) 2011, 2013 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * Andy Clement (GoPivotal, Inc) aclement@gopivotal.com - Contributions for |
| * Bug 383624 - [1.8][compiler] Revive code generation support for type annotations (from Olivier's work) |
| * Bug 409246 - [1.8][compiler] Type annotations on catch parameters not handled properly |
| *******************************************************************************/ |
| package org.eclipse.jdt.internal.compiler.codegen; |
| |
| import org.eclipse.jdt.internal.compiler.ast.Annotation; |
| import org.eclipse.jdt.internal.compiler.ast.UnionTypeReference; |
| import org.eclipse.jdt.internal.compiler.ast.TypeReference; |
| import org.eclipse.jdt.internal.compiler.lookup.TypeBinding; |
| |
| public class MultiCatchExceptionLabel extends ExceptionLabel { |
| |
| ExceptionLabel[] exceptionLabels; |
| |
| public MultiCatchExceptionLabel(CodeStream codeStream, TypeBinding exceptionType) { |
| super(codeStream, exceptionType); |
| } |
| |
| public void initialize(UnionTypeReference typeReference, Annotation [] annotations) { |
| TypeReference[] typeReferences = typeReference.typeReferences; |
| int length = typeReferences.length; |
| this.exceptionLabels = new ExceptionLabel[length]; |
| for (int i = 0; i < length; i++) { |
| this.exceptionLabels[i] = new ExceptionLabel(this.codeStream, typeReferences[i].resolvedType, typeReferences[i], i == 0 ? annotations : null); |
| } |
| } |
| public void place() { |
| for (int i = 0, max = this.exceptionLabels.length; i < max; i++) { |
| this.exceptionLabels[i].place(); |
| } |
| } |
| public void placeEnd() { |
| for (int i = 0, max = this.exceptionLabels.length; i < max; i++) { |
| this.exceptionLabels[i].placeEnd(); |
| } |
| } |
| public void placeStart() { |
| for (int i = 0, max = this.exceptionLabels.length; i < max; i++) { |
| this.exceptionLabels[i].placeStart(); |
| } |
| } |
| public int getCount() { |
| int temp = 0; |
| for (int i = 0, max = this.exceptionLabels.length; i < max; i++) { |
| temp += this.exceptionLabels[i].getCount(); |
| } |
| return temp; |
| } |
| } |