package org.eclipse.jdt.internal.compiler.flow; | |
/* | |
* (c) Copyright IBM Corp. 2000, 2001. | |
* All Rights Reserved. | |
*/ | |
import org.eclipse.jdt.internal.compiler.*; | |
import org.eclipse.jdt.internal.compiler.ast.*; | |
import org.eclipse.jdt.internal.compiler.codegen.*; | |
import org.eclipse.jdt.internal.compiler.lookup.*; | |
import org.eclipse.jdt.internal.compiler.problem.*; | |
import org.eclipse.jdt.internal.compiler.util.*; | |
/** | |
* Reflects the context of code analysis, keeping track of enclosing | |
* try statements, exception handlers, etc... | |
*/ | |
public class LabelFlowContext extends SwitchFlowContext { | |
public char[] labelName; | |
public LabelFlowContext(FlowContext parent, AstNode associatedNode, char[] labelName, Label breakLabel, BlockScope scope){ | |
super(parent, associatedNode, breakLabel); | |
this.labelName = labelName; | |
checkLabelValidity(scope); | |
} | |
void checkLabelValidity(BlockScope scope) { | |
// check if label was already defined above | |
FlowContext current = parent; | |
while (current != null) { | |
char[] currentLabelName; | |
if (((currentLabelName = current.labelName()) != null) | |
&& CharOperation.equals(currentLabelName, labelName)) { | |
scope.problemReporter().alreadyDefinedLabel(labelName, associatedNode); | |
} | |
current = current.parent; | |
} | |
} | |
public String individualToString(){ | |
return "Label flow context [label:"+String.valueOf(labelName)+"]"; //$NON-NLS-2$ //$NON-NLS-1$ | |
} | |
public char[] labelName() { | |
return labelName; | |
} | |
} |