Refactory: smarty.ui plugin.
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / ast / ThrowStatement.java
index 6aa082a..f7b7dd8 100644 (file)
@@ -1,25 +1,24 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2001, 2002 International Business Machines Corp. and others.
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v0.5 
+ * are made available under the terms of the Common Public License v1.0
  * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
+ * http://www.eclipse.org/legal/cpl-v10.html
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
- ******************************************************************************/
+ *******************************************************************************/
 package net.sourceforge.phpdt.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
-import net.sourceforge.phpdt.internal.compiler.codegen.CodeStream;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
-import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
 
 public class ThrowStatement extends Statement {
        public Expression exception;
+
        public TypeBinding exceptionType;
 
        public ThrowStatement(Expression exception, int startPosition) {
@@ -28,42 +27,55 @@ public class ThrowStatement extends Statement {
                this.sourceEnd = exception.sourceEnd;
        }
 
-       public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
+       public FlowInfo analyseCode(BlockScope currentScope,
+                       FlowContext flowContext, FlowInfo flowInfo) {
 
                exception.analyseCode(currentScope, flowContext, flowInfo);
                // need to check that exception thrown is actually caught somewhere
-               flowContext.checkExceptionHandlers(exceptionType, this, flowInfo, currentScope);
-               return FlowInfo.DeadEnd;
+               flowContext.checkExceptionHandlers(exceptionType, this, flowInfo,
+                               currentScope);
+               return FlowInfo.DEAD_END;
        }
 
        /**
         * Throw code generation
-        *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * 
+        * @param currentScope
+        *            net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream
+        *            net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         */
-       public void generateCode(BlockScope currentScope, CodeStream codeStream) {
+       // public void generateCode(BlockScope currentScope, CodeStream codeStream)
+       // {
+       //
+       // if ((bits & IsReachableMASK) == 0)
+       // return;
+       // int pc = codeStream.position;
+       // exception.generateCode(currentScope, codeStream, true);
+       // codeStream.athrow();
+       // codeStream.recordPositionsFrom(pc, this.sourceStart);
+       // }
+       public void resolve(BlockScope scope) {
 
-               if ((bits & IsReachableMASK) == 0)
-                       return;
-               int pc = codeStream.position;
-               exception.generateCode(currentScope, codeStream, true);
-               codeStream.athrow();
-               codeStream.recordPositionsFrom(pc, this.sourceStart);
-       }
+               exceptionType = exception.resolveTypeExpecting(scope, scope
+                               .getJavaLangThrowable());
 
-       public void resolve(BlockScope scope) {
-               
-               exceptionType = exception.resolveTypeExpecting(scope, scope.getJavaLangThrowable());
-               
-               if (exceptionType == NullBinding
-                               && scope.environment().options.complianceLevel <= CompilerOptions.JDK1_3){
-                       // if compliant with 1.4, this problem will not be reported
-                       scope.problemReporter().cannotThrowNull(this);
-               }
+               // if (exceptionType == NullBinding
+               // && scope.environment().options.complianceLevel <=
+               // CompilerOptions.JDK1_3){
+               // // if compliant with 1.4, this problem will not be reported
+               // scope.problemReporter().cannotThrowNull(this);
+               // }
                exception.implicitWidening(exceptionType, exceptionType);
        }
 
+       public StringBuffer printStatement(int indent, StringBuffer output) {
+
+               printIndent(indent, output).append("throw "); //$NON-NLS-1$
+               exception.printExpression(0, output);
+               return output.append(';');
+       }
+
        public String toString(int tab) {
                String s = tabString(tab);
                s = s + "throw "; //$NON-NLS-1$
@@ -71,9 +83,9 @@ public class ThrowStatement extends Statement {
                return s;
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope blockScope) {
+       public void traverse(ASTVisitor visitor, BlockScope blockScope) {
                if (visitor.visit(this, blockScope))
                        exception.traverse(visitor, blockScope);
                visitor.endVisit(this, blockScope);
        }
-}
\ No newline at end of file
+}