From: khartlage Date: Fri, 21 May 2004 20:32:40 +0000 (+0000) Subject: Added "Task Tags" functionality (TODO,...) X-Git-Url: http://secure.phpeclipse.com Added "Task Tags" functionality (TODO,...) Note: Task Tags are case sensitive --- diff --git a/net.sourceforge.phpeclipse/plugin.properties b/net.sourceforge.phpeclipse/plugin.properties index a8abba9..3e89981 100644 --- a/net.sourceforge.phpeclipse/plugin.properties +++ b/net.sourceforge.phpeclipse/plugin.properties @@ -6,7 +6,7 @@ providerName=phpeclipse.de naturePHP.name=PHP Project phpProblemName=PHP Problem transientPHPProblemName=Transient PHP Problem -phpTaskName=Java Task +phpTaskName=PHP Task viewCategoryName=PHP phpEditorTextHoversName=PHP Editor Text Hovers @@ -26,6 +26,11 @@ ExportWizards.ObfuscatorDescription = Obfuscate PHP resources to the local file propertyPagePHPProject.name=PHP Project Properties +todoPageName=PHP Task Tags + +todoTaskPrefName=Task Tags +templatePageName=Templates + # # Extension point names # diff --git a/net.sourceforge.phpeclipse/plugin.xml b/net.sourceforge.phpeclipse/plugin.xml index 113bcbc..d3f4fb9 100644 --- a/net.sourceforge.phpeclipse/plugin.xml +++ b/net.sourceforge.phpeclipse/plugin.xml @@ -82,7 +82,7 @@ - + @@ -260,6 +260,26 @@ + + + + + + + + + + diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IJavaProject.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IJavaProject.java index 8bf235a..31ef9a2 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IJavaProject.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IJavaProject.java @@ -237,7 +237,7 @@ public interface IJavaProject extends IParent, IJavaElement, IOpenable { * @see JavaCore#getDefaultOptions * @since 2.1 */ -// Map getOptions(boolean inheritJavaCoreOptions); + Map getOptions(boolean inheritJavaCoreOptions); /** * Returns the default output location for this project as a workspace- diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/JavaCore.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/JavaCore.java index 440e421..83b18b6 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/JavaCore.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/JavaCore.java @@ -42,7 +42,7 @@ public class JavaCore { // public static HashSet OptionNames = new HashSet(20); /** * The plug-in identifier of the Java core support - * (value "org.phpeclipse.phpdt.core"). + * (value "net.sourceforge.phpeclipse") */ // public static final String PLUGIN_ID = "net.sourceforge.phpeclipse.core"; //$NON-NLS-1$ public static final String PLUGIN_ID = PHPeclipsePlugin.PLUGIN_ID; diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/Compiler.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/Compiler.java index a8f006c..922ef27 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/Compiler.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/Compiler.java @@ -17,6 +17,7 @@ import net.sourceforge.phpdt.internal.compiler.env.IBinaryType; import net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit; import net.sourceforge.phpdt.internal.compiler.env.INameEnvironment; import net.sourceforge.phpdt.internal.compiler.env.ISourceType; +import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions; import net.sourceforge.phpdt.internal.compiler.impl.ITypeRequestor; import net.sourceforge.phpdt.internal.compiler.lookup.LookupEnvironment; import net.sourceforge.phpdt.internal.compiler.lookup.PackageBinding; @@ -31,7 +32,7 @@ import net.sourceforge.phpeclipse.internal.compiler.ast.TypeDeclaration; public class Compiler implements ITypeRequestor, ProblemSeverities { public UnitParser parser; public ICompilerRequestor requestor; - // public CompilerOptions options; + public CompilerOptions options; public ProblemReporter problemReporter; // management of unit to be processed //public CompilationUnitResult currentCompilationUnitResult; @@ -40,7 +41,7 @@ public class Compiler implements ITypeRequestor, ProblemSeverities { // name lookup public LookupEnvironment lookupEnvironment; // ONCE STABILIZED, THESE SHOULD RETURN TO A FINAL FIELD - public static boolean DEBUG = false; + public static boolean DEBUG = true; public int parseThreshold = -1; // number of initial units parsed at once (-1: none) /* @@ -92,11 +93,11 @@ public class Compiler implements ITypeRequestor, ProblemSeverities { * problems, the compiler will gather them all and hand them back * as part of the compilation unit result. */ - public Compiler(INameEnvironment environment, IErrorHandlingPolicy policy, - // Map settings, - final ICompilerRequestor requestor, IProblemFactory problemFactory) { + public Compiler(INameEnvironment environment, IErrorHandlingPolicy policy, + Map settings, final ICompilerRequestor requestor, + IProblemFactory problemFactory) { // create a problem handler given a handling policy - // this.options = new CompilerOptions(settings); + this.options = new CompilerOptions(settings); // wrap requestor in DebugRequestor if one is specified // if(DebugRequestor == null) { this.requestor = requestor; @@ -110,8 +111,8 @@ public class Compiler implements ITypeRequestor, ProblemSeverities { // } // }; // } - this.problemReporter = new ProblemReporter(policy, problemFactory);//this.options, - // problemFactory); + this.problemReporter = new ProblemReporter(policy, this.options, + problemFactory); this.lookupEnvironment = new LookupEnvironment(this, problemReporter, environment); //options, problemReporter, environment); this.parser = new UnitParser(problemReporter); @@ -164,12 +165,11 @@ public class Compiler implements ITypeRequestor, ProblemSeverities { * literals or leave them as they are in the source. If you put * true, "Hello" + " world" will be converted to "Hello world". */ - public Compiler(INameEnvironment environment, IErrorHandlingPolicy policy, - // Map settings, - final ICompilerRequestor requestor, IProblemFactory problemFactory, - boolean parseLiteralExpressionsAsConstants) { + public Compiler(INameEnvironment environment, IErrorHandlingPolicy policy, + Map settings, final ICompilerRequestor requestor, + IProblemFactory problemFactory, boolean parseLiteralExpressionsAsConstants) { // create a problem handler given a handling policy - // this.options = new CompilerOptions(settings); + this.options = new CompilerOptions(settings); // wrap requestor in DebugRequestor if one is specified // if(DebugRequestor == null) { this.requestor = requestor; @@ -183,9 +183,8 @@ public class Compiler implements ITypeRequestor, ProblemSeverities { // } // }; // } - this.problemReporter = new ProblemReporter(policy, problemFactory);//, - // this.options, - // problemFactory); + this.problemReporter = new ProblemReporter(policy, this.options, + problemFactory); this.lookupEnvironment = new LookupEnvironment(this, problemReporter, environment);//options, problemReporter, environment); this.parser = new UnitParser(problemReporter); @@ -206,7 +205,7 @@ public class Compiler implements ITypeRequestor, ProblemSeverities { // Switch the current policy and compilation result for this unit to the // requested one. CompilationResult unitResult = new CompilationResult(sourceUnit, - totalUnits, totalUnits, 10); //this.options.maxProblemsPerUnit); + totalUnits, totalUnits, this.options.maxProblemsPerUnit); try { // diet parsing for large collection of unit CompilationUnitDeclaration parsedUnit; @@ -215,16 +214,11 @@ public class Compiler implements ITypeRequestor, ProblemSeverities { } else { parsedUnit = parser.dietParse(sourceUnit, unitResult); } - // if (options.verbose) { - // String count = String.valueOf(totalUnits + 1); - // System.out.println( - // Util.bind( - // "compilation.request" , //$NON-NLS-1$ - // new String[] { - // count, - // count, - // new String(sourceUnit.getFileName())})); - // } + if (options.verbose) { + String count = String.valueOf(totalUnits + 1); + System.out.println(Util.bind("compilation.request", //$NON-NLS-1$ + new String[]{count, count, new String(sourceUnit.getFileName())})); + } // initial type binding creation lookupEnvironment.buildTypeBindings(parsedUnit); this.addCompilationUnit(sourceUnit, parsedUnit); @@ -274,7 +268,7 @@ public class Compiler implements ITypeRequestor, ProblemSeverities { for (int i = 0; i < maxUnits; i++) { CompilationUnitDeclaration parsedUnit; CompilationResult unitResult = new CompilationResult(sourceUnits[i], i, - maxUnits, 10);//, this.options.maxProblemsPerUnit); + maxUnits, this.options.maxProblemsPerUnit); try { // diet parsing for large collection of units if (totalUnits < parseThreshold) { @@ -282,17 +276,13 @@ public class Compiler implements ITypeRequestor, ProblemSeverities { } else { parsedUnit = parser.dietParse(sourceUnits[i], unitResult); } - // if (options.verbose) { - // System.out.println( - // Util.bind( - // "compilation.request" , //$NON-NLS-1$ - // new String[] { - // String.valueOf(i + 1), - // String.valueOf(maxUnits), - // new String(sourceUnits[i].getFileName())})); - // } + if (options.verbose) { + System.out.println(Util.bind("compilation.request", //$NON-NLS-1$ + new String[]{String.valueOf(i + 1), String.valueOf(maxUnits), + new String(sourceUnits[i].getFileName())})); + } // initial type binding creation -// lookupEnvironment.buildTypeBindings(parsedUnit); + // lookupEnvironment.buildTypeBindings(parsedUnit); this.addCompilationUnit(sourceUnits[i], parsedUnit); //} catch (AbortCompilationUnit e) { //requestor.acceptResult(unitResult.tagAsAccepted()); @@ -318,30 +308,24 @@ public class Compiler implements ITypeRequestor, ProblemSeverities { for (; i < totalUnits; i++) { unit = unitsToProcess[i]; try { - // if (options.verbose) - // System.out.println( - // Util.bind( - // "compilation.process" , //$NON-NLS-1$ - // new String[] { - // String.valueOf(i + 1), - // String.valueOf(totalUnits), - // new String(unitsToProcess[i].getFileName())})); + if (options.verbose) + System.out.println(Util.bind("compilation.process", //$NON-NLS-1$ + new String[]{String.valueOf(i + 1), String.valueOf(totalUnits), + new String(unitsToProcess[i].getFileName())})); process(unit, i); } finally { // cleanup compilation unit result unit.cleanUp(); - // if (options.verbose) - // System.out.println(Util.bind("compilation.done", //$NON-NLS-1$ - // new String[] { - // String.valueOf(i + 1), - // String.valueOf(totalUnits), - // new String(unitsToProcess[i].getFileName())})); + if (options.verbose) + System.out.println(Util.bind("compilation.done", //$NON-NLS-1$ + new String[]{String.valueOf(i + 1), String.valueOf(totalUnits), + new String(unitsToProcess[i].getFileName())})); } unitsToProcess[i] = null; // release reference to processed unit - // declaration + // declaration requestor.acceptResult(unit.compilationResult.tagAsAccepted()); } - } catch (AbortCompilation e) { + } catch (AbortCompilation e) { this.handleInternalException(e, unit); } catch (Error e) { this.handleInternalException(e, unit, null); @@ -482,12 +466,12 @@ public class Compiler implements ITypeRequestor, ProblemSeverities { */ public void process(CompilationUnitDeclaration unit, int i) { getMethodBodies(unit, i); - // fault in fields & methods - if (unit.scope != null) + // fault in fields & methods + if (unit.scope != null) unit.scope.faultInTypes(); // verify inherited methods -// if (unit.scope != null) -// unit.scope.verifyMethods(lookupEnvironment.methodVerifier()); + // if (unit.scope != null) + // unit.scope.verifyMethods(lookupEnvironment.methodVerifier()); // type checking unit.resolve(); // flow analysis @@ -538,7 +522,7 @@ public class Compiler implements ITypeRequestor, ProblemSeverities { // if (generateCode) unit.generateCode(); } unitsToProcess[0] = null; // release reference to processed unit - // declaration + // declaration requestor.acceptResult(unit.compilationResult.tagAsAccepted()); return unit; } catch (AbortCompilation e) { diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/DocumentElementParser.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/DocumentElementParser.java index 2d6c723..4bf670f 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/DocumentElementParser.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/DocumentElementParser.java @@ -12,6 +12,7 @@ package net.sourceforge.phpdt.internal.compiler; import net.sourceforge.phpdt.core.compiler.IProblem; import net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit; +import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions; import net.sourceforge.phpdt.internal.compiler.parser.UnitParser; import net.sourceforge.phpdt.internal.compiler.problem.AbortCompilation; import net.sourceforge.phpdt.internal.compiler.problem.ProblemReporter; @@ -52,11 +53,11 @@ public class DocumentElementParser extends UnitParser { public DocumentElementParser( final IDocumentElementRequestor requestor, - IProblemFactory problemFactory) { -// CompilerOptions options) { + IProblemFactory problemFactory, + CompilerOptions options) { super(new ProblemReporter( DefaultErrorHandlingPolicies.exitAfterAllProblems(), -// options, + options, problemFactory) { public void record(IProblem problem, CompilationResult unitResult) { requestor.acceptProblem(problem); @@ -66,7 +67,7 @@ public DocumentElementParser( // options.sourceLevel >= CompilerOptions.JDK1_4); this.requestor = requestor; intArrayStack = new int[30][]; -// this.options = options; + this.options = options; } /** diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/SourceElementParser.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/SourceElementParser.java index b689763..413626b 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/SourceElementParser.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/SourceElementParser.java @@ -16,6 +16,7 @@ import net.sourceforge.phpdt.core.compiler.CharOperation; import net.sourceforge.phpdt.core.compiler.IProblem; import net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit; import net.sourceforge.phpdt.internal.compiler.env.ISourceType; +import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions; import net.sourceforge.phpdt.internal.compiler.impl.ReferenceContext; import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope; import net.sourceforge.phpdt.internal.compiler.lookup.ClassScope; @@ -99,14 +100,14 @@ public class LocalDeclarationVisitor extends AbstractSyntaxTreeVisitorAdapter { public SourceElementParser( final ISourceElementRequestor requestor, - IProblemFactory problemFactory) { -// CompilerOptions options) { + IProblemFactory problemFactory, + CompilerOptions options) { // we want to notify all syntax error with the acceptProblem API // To do so, we define the record method of the ProblemReporter super( new ProblemReporter( DefaultErrorHandlingPolicies.exitAfterAllProblems(), -// options, + options, problemFactory) { public void record(IProblem problem, CompilationResult unitResult, ReferenceContext referenceContext) { unitResult.record(problem, referenceContext); @@ -119,7 +120,7 @@ public SourceElementParser( typeNames = new char[4][]; superTypeNames = new char[4][]; nestedTypeIndex = 0; -// this.options = options; + this.options = options; } /** @deprecated use SourceElementParser(ISourceElementRequestor, IProblemFactory, CompilerOptions) */ diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/impl/CompilerOptions.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/impl/CompilerOptions.java new file mode 100644 index 0000000..5baf599 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/impl/CompilerOptions.java @@ -0,0 +1,663 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * 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-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.internal.compiler.impl; + +import java.io.ByteArrayInputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.util.HashMap; +import java.util.Map; + +import net.sourceforge.phpdt.core.compiler.CharOperation; +import net.sourceforge.phpdt.internal.compiler.Compiler; +import net.sourceforge.phpdt.internal.compiler.env.IConstants; +import net.sourceforge.phpdt.internal.compiler.lookup.ProblemReasons; +import net.sourceforge.phpdt.internal.compiler.problem.ProblemSeverities; + +public class CompilerOptions implements ProblemReasons, ProblemSeverities, IConstants { + + /** + * Option IDs + */ + public static final String OPTION_LocalVariableAttribute = "net.sourceforge.phpeclipse.compiler.debug.localVariable"; //$NON-NLS-1$ + public static final String OPTION_LineNumberAttribute = "net.sourceforge.phpeclipse.compiler.debug.lineNumber"; //$NON-NLS-1$ + public static final String OPTION_SourceFileAttribute = "net.sourceforge.phpeclipse.compiler.debug.sourceFile"; //$NON-NLS-1$ +// public static final String OPTION_PreserveUnusedLocal = "net.sourceforge.phpeclipse.compiler.codegen.unusedLocal"; //$NON-NLS-1$ + public static final String OPTION_ReportMethodWithConstructorName = "net.sourceforge.phpeclipse.compiler.problem.methodWithConstructorName"; //$NON-NLS-1$ + public static final String OPTION_ReportOverridingPackageDefaultMethod = "net.sourceforge.phpeclipse.compiler.problem.overridingPackageDefaultMethod"; //$NON-NLS-1$ + public static final String OPTION_ReportDeprecation = "net.sourceforge.phpeclipse.compiler.problem.deprecation"; //$NON-NLS-1$ + public static final String OPTION_ReportDeprecationInDeprecatedCode = "net.sourceforge.phpeclipse.compiler.problem.deprecationInDeprecatedCode"; //$NON-NLS-1$ + public static final String OPTION_ReportDeprecationWhenOverridingDeprecatedMethod = "net.sourceforge.phpeclipse.compiler.problem.deprecationWhenOverridingDeprecatedMethod"; //$NON-NLS-1$ + public static final String OPTION_ReportHiddenCatchBlock = "net.sourceforge.phpeclipse.compiler.problem.hiddenCatchBlock"; //$NON-NLS-1$ + public static final String OPTION_ReportUnusedLocal = "net.sourceforge.phpeclipse.compiler.problem.unusedLocal"; //$NON-NLS-1$ + public static final String OPTION_ReportUnusedParameter = "net.sourceforge.phpeclipse.compiler.problem.unusedParameter"; //$NON-NLS-1$ + public static final String OPTION_ReportUnusedParameterWhenImplementingAbstract = "net.sourceforge.phpeclipse.compiler.problem.unusedParameterWhenImplementingAbstract"; //$NON-NLS-1$ + public static final String OPTION_ReportUnusedParameterWhenOverridingConcrete = "net.sourceforge.phpeclipse.compiler.problem.unusedParameterWhenOverridingConcrete"; //$NON-NLS-1$ + public static final String OPTION_ReportUnusedImport = "net.sourceforge.phpeclipse.compiler.problem.unusedImport"; //$NON-NLS-1$ + public static final String OPTION_ReportSyntheticAccessEmulation = "net.sourceforge.phpeclipse.compiler.problem.syntheticAccessEmulation"; //$NON-NLS-1$ + public static final String OPTION_ReportNoEffectAssignment = "net.sourceforge.phpeclipse.compiler.problem.noEffectAssignment"; //$NON-NLS-1$ + public static final String OPTION_ReportLocalVariableHiding = "net.sourceforge.phpeclipse.compiler.problem.localVariableHiding"; //$NON-NLS-1$ + public static final String OPTION_ReportSpecialParameterHidingField = "net.sourceforge.phpeclipse.compiler.problem.specialParameterHidingField"; //$NON-NLS-1$ + public static final String OPTION_ReportFieldHiding = "net.sourceforge.phpeclipse.compiler.problem.fieldHiding"; //$NON-NLS-1$ + public static final String OPTION_ReportPossibleAccidentalBooleanAssignment = "net.sourceforge.phpeclipse.compiler.problem.possibleAccidentalBooleanAssignment"; //$NON-NLS-1$ + public static final String OPTION_ReportNonExternalizedStringLiteral = "net.sourceforge.phpeclipse.compiler.problem.nonExternalizedStringLiteral"; //$NON-NLS-1$ + public static final String OPTION_ReportIncompatibleNonInheritedInterfaceMethod = "net.sourceforge.phpeclipse.compiler.problem.incompatibleNonInheritedInterfaceMethod"; //$NON-NLS-1$ + public static final String OPTION_ReportUnusedPrivateMember = "net.sourceforge.phpeclipse.compiler.problem.unusedPrivateMember"; //$NON-NLS-1$ + public static final String OPTION_ReportNoImplicitStringConversion = "net.sourceforge.phpeclipse.compiler.problem.noImplicitStringConversion"; //$NON-NLS-1$ + public static final String OPTION_ReportAssertIdentifier = "net.sourceforge.phpeclipse.compiler.problem.assertIdentifier"; //$NON-NLS-1$ + public static final String OPTION_ReportNonStaticAccessToStatic = "net.sourceforge.phpeclipse.compiler.problem.staticAccessReceiver"; //$NON-NLS-1$ + public static final String OPTION_ReportIndirectStaticAccess = "net.sourceforge.phpeclipse.compiler.problem.indirectStaticAccess"; //$NON-NLS-1$ + public static final String OPTION_ReportSuperfluousSemicolon = "net.sourceforge.phpeclipse.compiler.problem.superfluousSemicolon"; //$NON-NLS-1$ + public static final String OPTION_ReportUnnecessaryTypeCheck = "net.sourceforge.phpeclipse.compiler.problem.unnecessaryTypeCheck"; //$NON-NLS-1$ + public static final String OPTION_ReportUndocumentedEmptyBlock = "net.sourceforge.phpeclipse.compiler.problem.undocumentedEmptyBlock"; //$NON-NLS-1$ + public static final String OPTION_ReportInvalidJavadoc = "net.sourceforge.phpeclipse.compiler.problem.invalidJavadoc"; //$NON-NLS-1$ + public static final String OPTION_ReportInvalidJavadocTags = "net.sourceforge.phpeclipse.compiler.problem.invalidJavadocTags"; //$NON-NLS-1$ + public static final String OPTION_ReportInvalidJavadocTagsVisibility = "net.sourceforge.phpeclipse.compiler.problem.invalidJavadocTagsVisibility"; //$NON-NLS-1$ + public static final String OPTION_ReportMissingJavadocTags = "net.sourceforge.phpeclipse.compiler.problem.missingJavadocTags"; //$NON-NLS-1$ + public static final String OPTION_ReportMissingJavadocTagsVisibility = "net.sourceforge.phpeclipse.compiler.problem.missingJavadocTagsVisibility"; //$NON-NLS-1$ + public static final String OPTION_ReportMissingJavadocTagsOverriding = "net.sourceforge.phpeclipse.compiler.problem.missingJavadocTagsOverriding"; //$NON-NLS-1$ + public static final String OPTION_ReportMissingJavadocComments = "net.sourceforge.phpeclipse.compiler.problem.missingJavadocComments"; //$NON-NLS-1$ + public static final String OPTION_ReportMissingJavadocCommentsVisibility = "net.sourceforge.phpeclipse.compiler.problem.missingJavadocCommentsVisibility"; //$NON-NLS-1$ + public static final String OPTION_ReportMissingJavadocCommentsOverriding = "net.sourceforge.phpeclipse.compiler.problem.missingJavadocCommentsOverriding"; //$NON-NLS-1$ + public static final String OPTION_ReportFinallyBlockNotCompletingNormally = "net.sourceforge.phpeclipse.compiler.problem.finallyBlockNotCompletingNormally"; //$NON-NLS-1$ + public static final String OPTION_ReportUnusedDeclaredThrownException = "net.sourceforge.phpeclipse.compiler.problem.unusedDeclaredThrownException"; //$NON-NLS-1$ + public static final String OPTION_ReportUnusedDeclaredThrownExceptionWhenOverriding = "net.sourceforge.phpeclipse.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding"; //$NON-NLS-1$ + public static final String OPTION_ReportUnqualifiedFieldAccess = "net.sourceforge.phpeclipse.compiler.problem.unqualifiedFieldAccess"; //$NON-NLS-1$ +// public static final String OPTION_Source = "net.sourceforge.phpeclipse.compiler.source"; //$NON-NLS-1$ +// public static final String OPTION_TargetPlatform = "net.sourceforge.phpeclipse.compiler.codegen.targetPlatform"; //$NON-NLS-1$ +// public static final String OPTION_Compliance = "net.sourceforge.phpeclipse.compiler.compliance"; //$NON-NLS-1$ + public static final String OPTION_Encoding = "net.sourceforge.phpeclipse.encoding"; //$NON-NLS-1$ + public static final String OPTION_MaxProblemPerUnit = "net.sourceforge.phpeclipse.compiler.maxProblemPerUnit"; //$NON-NLS-1$ + public static final String OPTION_TaskTags = "net.sourceforge.phpeclipse.compiler.taskTags"; //$NON-NLS-1$ + public static final String OPTION_TaskPriorities = "net.sourceforge.phpeclipse.compiler.taskPriorities"; //$NON-NLS-1$ + + // Backward compatibility + public static final String OPTION_ReportInvalidAnnotation = "net.sourceforge.phpeclipse.compiler.problem.invalidAnnotation"; //$NON-NLS-1$ + public static final String OPTION_ReportMissingAnnotation = "net.sourceforge.phpeclipse.compiler.problem.missingAnnotation"; //$NON-NLS-1$ + public static final String OPTION_ReportMissingJavadoc = "net.sourceforge.phpeclipse.compiler.problem.missingJavadoc"; //$NON-NLS-1$ + + /* should surface ??? */ +// public static final String OPTION_PrivateConstructorAccess = "net.sourceforge.phpeclipse.compiler.codegen.constructorAccessEmulation"; //$NON-NLS-1$ + + /** + * Possible values for configurable options + */ + public static final String GENERATE = "generate";//$NON-NLS-1$ + public static final String DO_NOT_GENERATE = "do not generate"; //$NON-NLS-1$ + public static final String PRESERVE = "preserve"; //$NON-NLS-1$ +// public static final String OPTIMIZE_OUT = "optimize out"; //$NON-NLS-1$ +// public static final String VERSION_1_1 = "1.1"; //$NON-NLS-1$ +// public static final String VERSION_1_2 = "1.2"; //$NON-NLS-1$ +// public static final String VERSION_1_3 = "1.3"; //$NON-NLS-1$ +// public static final String VERSION_1_4 = "1.4"; //$NON-NLS-1$ +// public static final String VERSION_1_5 = "1.5"; //$NON-NLS-1$ + public static final String ERROR = "error"; //$NON-NLS-1$ + public static final String WARNING = "warning"; //$NON-NLS-1$ + public static final String IGNORE = "ignore"; //$NON-NLS-1$ + public static final String ENABLED = "enabled"; //$NON-NLS-1$ + public static final String DISABLED = "disabled"; //$NON-NLS-1$ + public static final String PUBLIC = "public"; //$NON-NLS-1$ + public static final String PROTECTED = "protected"; //$NON-NLS-1$ + public static final String DEFAULT = "default"; //$NON-NLS-1$ + public static final String PRIVATE = "private"; //$NON-NLS-1$ + + /** + * Bit mask for configurable problems (error/warning threshold) + */ + // 0x100L unused + // 0x200L unused + // 0x400L unused + // 0x800L unused + public static final long MethodWithConstructorName = 0x1000L; + public static final long OverriddenPackageDefaultMethod = 0x2000L; + public static final long UsingDeprecatedAPI = 0x4000L; + public static final long MaskedCatchBlock = 0x8000L; + public static final long UnusedLocalVariable = 0x10000L; + public static final long UnusedArgument = 0x20000L; + public static final long NoImplicitStringConversion = 0x40000L; + public static final long AccessEmulation = 0x80000L; + public static final long NonExternalizedString = 0x100000L; + public static final long AssertUsedAsAnIdentifier = 0x200000L; + public static final long UnusedImport = 0x400000L; + public static final long NonStaticAccessToStatic = 0x800000L; + public static final long Task = 0x1000000L; + public static final long NoEffectAssignment = 0x2000000L; + public static final long IncompatibleNonInheritedInterfaceMethod = 0x4000000L; + public static final long UnusedPrivateMember = 0x8000000L; + public static final long LocalVariableHiding = 0x10000000L; + public static final long FieldHiding = 0x20000000L; + public static final long AccidentalBooleanAssign = 0x40000000L; + public static final long SuperfluousSemicolon = 0x80000000L; + public static final long IndirectStaticAccess = 0x100000000L; + public static final long UndocumentedEmptyBlock = 0x200000000L; + public static final long UnnecessaryTypeCheck = 0x400000000L; + public static final long InvalidJavadoc = 0x800000000L; + public static final long FinallyBlockNotCompleting = 0x1000000000L; + public static final long UnusedDeclaredThrownException = 0x2000000000L; + public static final long UnqualifiedFieldAccess = 0x4000000000L; + public static final long MissingJavadocTags = 0x8000000000L; + public static final long MissingJavadocComments = 0x10000000000L; + + // Default severity level for handlers + public long errorThreshold = 0; + + public long warningThreshold = + MethodWithConstructorName + | UsingDeprecatedAPI + | MaskedCatchBlock + | OverriddenPackageDefaultMethod + | UnusedImport + | NonStaticAccessToStatic + | NoEffectAssignment + | IncompatibleNonInheritedInterfaceMethod + | NoImplicitStringConversion + | FinallyBlockNotCompleting + | AssertUsedAsAnIdentifier; + + // Debug attributes + public static final int Source = 1; // SourceFileAttribute + public static final int Lines = 2; // LineNumberAttribute + public static final int Vars = 4; // LocalVariableTableAttribute + + // By default only lines and source attributes are generated. + public int produceDebugAttributes = Lines | Source; + +// public long complianceLevel = JDK1_4; // by default be compliant with 1.4 +// public long sourceLevel = JDK1_3; //1.3 source behavior by default +// public long targetJDK = JDK1_2; // default generates for JVM1.2 + + // toggle private access emulation for 1.2 (constr. accessor has extra arg on constructor) or 1.3 (make private constructor default access when access needed) + public boolean isPrivateConstructorAccessChangingVisibility = false; // by default, follows 1.2 + + // source encoding format + public String defaultEncoding = null; // will use the platform default encoding + + // print what unit is being processed + public boolean verbose = Compiler.DEBUG; + + // indicates if reference info is desired + public boolean produceReferenceInfo = false; + + // indicates if unused/optimizable local variables need to be preserved (debugging purpose) + public boolean preserveAllLocalVariables = false; + + // indicates whether literal expressions are inlined at parse-time or not + public boolean parseLiteralExpressionsAsConstants = true; + + // max problems per compilation unit + public int maxProblemsPerUnit = 100; // no more than 100 problems per default + + // tags used to recognize tasks in comments + public char[][] taskTags = null; + + // priorities of tasks in comments + public char[][] taskPriorites = null; + + // deprecation report + public boolean reportDeprecationInsideDeprecatedCode = false; + public boolean reportDeprecationWhenOverridingDeprecatedMethod = false; + + // unused parameters report + public boolean reportUnusedParameterWhenImplementingAbstract = false; + public boolean reportUnusedParameterWhenOverridingConcrete = false; + + // unused declaration of thrown exception + public boolean reportUnusedDeclaredThrownExceptionWhenOverriding = false; + + // constructor/setter parameter hiding + public boolean reportSpecialParameterHidingField = false; + + // check javadoc comments + public int reportInvalidJavadocTagsVisibility = AccPrivate; + public boolean reportInvalidJavadocTags = true; + + // check missing javadoc tags + public int reportMissingJavadocTagsVisibility = AccPrivate; + public boolean reportMissingJavadocTagsOverriding = true; + + // check missing javadoc comments + public int reportMissingJavadocCommentsVisibility = AccPublic; + public boolean reportMissingJavadocCommentsOverriding = true; + + /** + * Initializing the compiler options with defaults + */ + public CompilerOptions(){ + // use default options + } + + /** + * Initializing the compiler options with external settings + * @param settings + */ + public CompilerOptions(Map settings){ + + if (settings == null) return; + set(settings); + } + + public Map getMap() { + Map optionsMap = new HashMap(30); + optionsMap.put(OPTION_LocalVariableAttribute, (this.produceDebugAttributes & Vars) != 0 ? GENERATE : DO_NOT_GENERATE); + optionsMap.put(OPTION_LineNumberAttribute, (this.produceDebugAttributes & Lines) != 0 ? GENERATE : DO_NOT_GENERATE); + optionsMap.put(OPTION_SourceFileAttribute, (this.produceDebugAttributes & Source) != 0 ? GENERATE : DO_NOT_GENERATE); +// optionsMap.put(OPTION_PreserveUnusedLocal, this.preserveAllLocalVariables ? PRESERVE : OPTIMIZE_OUT); + optionsMap.put(OPTION_ReportMethodWithConstructorName, getSeverityString(MethodWithConstructorName)); + optionsMap.put(OPTION_ReportOverridingPackageDefaultMethod, getSeverityString(OverriddenPackageDefaultMethod)); + optionsMap.put(OPTION_ReportDeprecation, getSeverityString(UsingDeprecatedAPI)); + optionsMap.put(OPTION_ReportDeprecationInDeprecatedCode, this.reportDeprecationInsideDeprecatedCode ? ENABLED : DISABLED); + optionsMap.put(OPTION_ReportDeprecationWhenOverridingDeprecatedMethod, this.reportDeprecationWhenOverridingDeprecatedMethod ? ENABLED : DISABLED); + optionsMap.put(OPTION_ReportHiddenCatchBlock, getSeverityString(MaskedCatchBlock)); + optionsMap.put(OPTION_ReportUnusedLocal, getSeverityString(UnusedLocalVariable)); + optionsMap.put(OPTION_ReportUnusedParameter, getSeverityString(UnusedArgument)); + optionsMap.put(OPTION_ReportUnusedImport, getSeverityString(UnusedImport)); + optionsMap.put(OPTION_ReportSyntheticAccessEmulation, getSeverityString(AccessEmulation)); + optionsMap.put(OPTION_ReportNoEffectAssignment, getSeverityString(NoEffectAssignment)); + optionsMap.put(OPTION_ReportNonExternalizedStringLiteral, getSeverityString(NonExternalizedString)); + optionsMap.put(OPTION_ReportNoImplicitStringConversion, getSeverityString(NoImplicitStringConversion)); + optionsMap.put(OPTION_ReportNonStaticAccessToStatic, getSeverityString(NonStaticAccessToStatic)); + optionsMap.put(OPTION_ReportIndirectStaticAccess, getSeverityString(IndirectStaticAccess)); + optionsMap.put(OPTION_ReportIncompatibleNonInheritedInterfaceMethod, getSeverityString(IncompatibleNonInheritedInterfaceMethod)); + optionsMap.put(OPTION_ReportUnusedPrivateMember, getSeverityString(UnusedPrivateMember)); + optionsMap.put(OPTION_ReportLocalVariableHiding, getSeverityString(LocalVariableHiding)); + optionsMap.put(OPTION_ReportFieldHiding, getSeverityString(FieldHiding)); + optionsMap.put(OPTION_ReportPossibleAccidentalBooleanAssignment, getSeverityString(AccidentalBooleanAssign)); + optionsMap.put(OPTION_ReportSuperfluousSemicolon, getSeverityString(SuperfluousSemicolon)); + optionsMap.put(OPTION_ReportAssertIdentifier, getSeverityString(AssertUsedAsAnIdentifier)); + optionsMap.put(OPTION_ReportUndocumentedEmptyBlock, getSeverityString(UndocumentedEmptyBlock)); + optionsMap.put(OPTION_ReportUnnecessaryTypeCheck, getSeverityString(UnnecessaryTypeCheck)); + optionsMap.put(OPTION_ReportInvalidJavadoc, getSeverityString(InvalidJavadoc)); + optionsMap.put(OPTION_ReportInvalidJavadocTagsVisibility, getVisibilityString(this.reportInvalidJavadocTagsVisibility)); + optionsMap.put(OPTION_ReportInvalidJavadocTags, this.reportInvalidJavadocTags? ENABLED : DISABLED); + optionsMap.put(OPTION_ReportMissingJavadocTags, getSeverityString(MissingJavadocTags)); + optionsMap.put(OPTION_ReportMissingJavadocTagsVisibility, getVisibilityString(this.reportMissingJavadocTagsVisibility)); + optionsMap.put(OPTION_ReportMissingJavadocTagsOverriding, this.reportMissingJavadocTagsOverriding ? ENABLED : DISABLED); + optionsMap.put(OPTION_ReportMissingJavadocComments, getSeverityString(MissingJavadocComments)); + optionsMap.put(OPTION_ReportMissingJavadocCommentsVisibility, getVisibilityString(this.reportMissingJavadocCommentsVisibility)); + optionsMap.put(OPTION_ReportMissingJavadocCommentsOverriding, this.reportMissingJavadocCommentsOverriding ? ENABLED : DISABLED); + optionsMap.put(OPTION_ReportFinallyBlockNotCompletingNormally, getSeverityString(FinallyBlockNotCompleting)); + optionsMap.put(OPTION_ReportUnusedDeclaredThrownException, getSeverityString(UnusedDeclaredThrownException)); + optionsMap.put(OPTION_ReportUnusedDeclaredThrownExceptionWhenOverriding, this.reportUnusedDeclaredThrownExceptionWhenOverriding ? ENABLED : DISABLED); + optionsMap.put(OPTION_ReportUnqualifiedFieldAccess, getSeverityString(UnqualifiedFieldAccess)); +// optionsMap.put(OPTION_Compliance, versionFromJdkLevel(this.complianceLevel)); +// optionsMap.put(OPTION_Source, versionFromJdkLevel(this.sourceLevel)); +// optionsMap.put(OPTION_TargetPlatform, versionFromJdkLevel(this.targetJDK)); + if (this.defaultEncoding != null) { + optionsMap.put(OPTION_Encoding, this.defaultEncoding); + } + optionsMap.put(OPTION_TaskTags, this.taskTags == null ? "" : new String(CharOperation.concatWith(this.taskTags,','))); //$NON-NLS-1$ + optionsMap.put(OPTION_TaskPriorities, this.taskPriorites == null ? "" : new String(CharOperation.concatWith(this.taskPriorites,','))); //$NON-NLS-1$ + optionsMap.put(OPTION_ReportUnusedParameterWhenImplementingAbstract, this.reportUnusedParameterWhenImplementingAbstract ? ENABLED : DISABLED); + optionsMap.put(OPTION_ReportUnusedParameterWhenOverridingConcrete, this.reportUnusedParameterWhenOverridingConcrete ? ENABLED : DISABLED); + optionsMap.put(OPTION_ReportSpecialParameterHidingField, this.reportSpecialParameterHidingField ? ENABLED : DISABLED); + optionsMap.put(OPTION_MaxProblemPerUnit, String.valueOf(this.maxProblemsPerUnit)); + + return optionsMap; + } + + public int getSeverity(long irritant) { + if((this.warningThreshold & irritant) != 0) + return Warning; + if((this.errorThreshold & irritant) != 0) + return Error; + return Ignore; + } + + public String getSeverityString(long irritant) { + if((this.warningThreshold & irritant) != 0) + return WARNING; + if((this.errorThreshold & irritant) != 0) + return ERROR; + return IGNORE; + } + + public String getVisibilityString(int level) { + switch (level) { + case AccPublic: + return PUBLIC; + case AccProtected: + return PROTECTED; + case AccPrivate: + return PRIVATE; + default: + return DEFAULT; + } + } + + public void set(Map optionsMap) { + + Object optionValue; + if ((optionValue = optionsMap.get(OPTION_LocalVariableAttribute)) != null) { + if (GENERATE.equals(optionValue)) { + this.produceDebugAttributes |= Vars; + } else if (DO_NOT_GENERATE.equals(optionValue)) { + this.produceDebugAttributes &= ~Vars; + } + } + if ((optionValue = optionsMap.get(OPTION_LineNumberAttribute)) != null) { + if (GENERATE.equals(optionValue)) { + this.produceDebugAttributes |= Lines; + } else if (DO_NOT_GENERATE.equals(optionValue)) { + this.produceDebugAttributes &= ~Lines; + } + } + if ((optionValue = optionsMap.get(OPTION_SourceFileAttribute)) != null) { + if (GENERATE.equals(optionValue)) { + this.produceDebugAttributes |= Source; + } else if (DO_NOT_GENERATE.equals(optionValue)) { + this.produceDebugAttributes &= ~Source; + } + } +// if ((optionValue = optionsMap.get(OPTION_PreserveUnusedLocal)) != null) { +// if (PRESERVE.equals(optionValue)) { +// this.preserveAllLocalVariables = true; +// } else if (OPTIMIZE_OUT.equals(optionValue)) { +// this.preserveAllLocalVariables = false; +// } +// } + if ((optionValue = optionsMap.get(OPTION_ReportDeprecationInDeprecatedCode)) != null) { + if (ENABLED.equals(optionValue)) { + this.reportDeprecationInsideDeprecatedCode = true; + } else if (DISABLED.equals(optionValue)) { + this.reportDeprecationInsideDeprecatedCode = false; + } + } + if ((optionValue = optionsMap.get(OPTION_ReportDeprecationWhenOverridingDeprecatedMethod)) != null) { + if (ENABLED.equals(optionValue)) { + this.reportDeprecationWhenOverridingDeprecatedMethod = true; + } else if (DISABLED.equals(optionValue)) { + this.reportDeprecationWhenOverridingDeprecatedMethod = false; + } + } + if ((optionValue = optionsMap.get(OPTION_ReportUnusedDeclaredThrownExceptionWhenOverriding)) != null) { + if (ENABLED.equals(optionValue)) { + this.reportUnusedDeclaredThrownExceptionWhenOverriding = true; + } else if (DISABLED.equals(optionValue)) { + this.reportUnusedDeclaredThrownExceptionWhenOverriding = false; + } + } +// if ((optionValue = optionsMap.get(OPTION_Compliance)) != null) { +// long level = versionToJdkLevel(optionValue); +// if (level != 0) this.complianceLevel = level; +// } +// if ((optionValue = optionsMap.get(OPTION_Source)) != null) { +// long level = versionToJdkLevel(optionValue); +// if (level != 0) this.sourceLevel = level; +// } +// if ((optionValue = optionsMap.get(OPTION_TargetPlatform)) != null) { +// long level = versionToJdkLevel(optionValue); +// if (level != 0) this.targetJDK = level; +// } + if ((optionValue = optionsMap.get(OPTION_Encoding)) != null) { + if (optionValue instanceof String) { + this.defaultEncoding = null; + String stringValue = (String) optionValue; + if (stringValue.length() > 0){ + try { + new InputStreamReader(new ByteArrayInputStream(new byte[0]), stringValue); + this.defaultEncoding = stringValue; + } catch(UnsupportedEncodingException e){ + // ignore unsupported encoding + } + } + } + } +// if ((optionValue = optionsMap.get(OPTION_PrivateConstructorAccess)) != null) { +// long level = versionToJdkLevel(optionValue); +// if (level >= JDK1_3) this.isPrivateConstructorAccessChangingVisibility = true; +// } + if ((optionValue = optionsMap.get(OPTION_ReportUnusedParameterWhenImplementingAbstract)) != null) { + if (ENABLED.equals(optionValue)) { + this.reportUnusedParameterWhenImplementingAbstract = true; + } else if (DISABLED.equals(optionValue)) { + this.reportUnusedParameterWhenImplementingAbstract = false; + } + } + if ((optionValue = optionsMap.get(OPTION_ReportUnusedParameterWhenOverridingConcrete)) != null) { + if (ENABLED.equals(optionValue)) { + this.reportUnusedParameterWhenOverridingConcrete = true; + } else if (DISABLED.equals(optionValue)) { + this.reportUnusedParameterWhenOverridingConcrete = false; + } + } + if ((optionValue = optionsMap.get(OPTION_ReportSpecialParameterHidingField)) != null) { + if (ENABLED.equals(optionValue)) { + this.reportSpecialParameterHidingField = true; + } else if (DISABLED.equals(optionValue)) { + this.reportSpecialParameterHidingField = false; + } + } + if ((optionValue = optionsMap.get(OPTION_MaxProblemPerUnit)) != null) { + if (optionValue instanceof String) { + String stringValue = (String) optionValue; + try { + int val = Integer.parseInt(stringValue); + if (val >= 0) this.maxProblemsPerUnit = val; + } catch(NumberFormatException e){ + // ignore ill-formatted limit + } + } + } + if ((optionValue = optionsMap.get(OPTION_TaskTags)) != null) { + if (optionValue instanceof String) { + String stringValue = (String) optionValue; + if (stringValue.length() == 0) { + this.taskTags = null; + } else { + this.taskTags = CharOperation.splitAndTrimOn(',', stringValue.toCharArray()); + } + } + } + if ((optionValue = optionsMap.get(OPTION_TaskPriorities)) != null) { + if (optionValue instanceof String) { + String stringValue = (String) optionValue; + if (stringValue.length() == 0) { + this.taskPriorites = null; + } else { + this.taskPriorites = CharOperation.splitAndTrimOn(',', stringValue.toCharArray()); + } + } + } + if ((optionValue = optionsMap.get(OPTION_ReportMethodWithConstructorName)) != null) updateSeverity(MethodWithConstructorName, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportOverridingPackageDefaultMethod)) != null) updateSeverity(OverriddenPackageDefaultMethod, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportDeprecation)) != null) updateSeverity(UsingDeprecatedAPI, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportHiddenCatchBlock)) != null) updateSeverity(MaskedCatchBlock, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportUnusedLocal)) != null) updateSeverity(UnusedLocalVariable, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportUnusedParameter)) != null) updateSeverity(UnusedArgument, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportUnusedImport)) != null) updateSeverity(UnusedImport, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportUnusedPrivateMember)) != null) updateSeverity(UnusedPrivateMember, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportUnusedDeclaredThrownException)) != null) updateSeverity(UnusedDeclaredThrownException, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportNoImplicitStringConversion)) != null) updateSeverity(NoImplicitStringConversion, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportSyntheticAccessEmulation)) != null) updateSeverity(AccessEmulation, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportLocalVariableHiding)) != null) updateSeverity(LocalVariableHiding, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportFieldHiding)) != null) updateSeverity(FieldHiding, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportPossibleAccidentalBooleanAssignment)) != null) updateSeverity(AccidentalBooleanAssign, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportSuperfluousSemicolon)) != null) updateSeverity(SuperfluousSemicolon, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportNonExternalizedStringLiteral)) != null) updateSeverity(NonExternalizedString, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportAssertIdentifier)) != null) updateSeverity(AssertUsedAsAnIdentifier, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportNonStaticAccessToStatic)) != null) updateSeverity(NonStaticAccessToStatic, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportIndirectStaticAccess)) != null) updateSeverity(IndirectStaticAccess, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportIncompatibleNonInheritedInterfaceMethod)) != null) updateSeverity(IncompatibleNonInheritedInterfaceMethod, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportUndocumentedEmptyBlock)) != null) updateSeverity(UndocumentedEmptyBlock, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportUnnecessaryTypeCheck)) != null) updateSeverity(UnnecessaryTypeCheck, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportFinallyBlockNotCompletingNormally)) != null) updateSeverity(FinallyBlockNotCompleting, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportUnqualifiedFieldAccess)) != null) updateSeverity(UnqualifiedFieldAccess, optionValue); + if ((optionValue = optionsMap.get(OPTION_ReportNoEffectAssignment)) != null) updateSeverity(NoEffectAssignment, optionValue); + + // Javadoc options + if ((optionValue = optionsMap.get(OPTION_ReportInvalidJavadoc)) != null) { + updateSeverity(InvalidJavadoc, optionValue); + } + if ((optionValue = optionsMap.get(OPTION_ReportInvalidJavadocTagsVisibility)) != null) { + if (PUBLIC.equals(optionValue)) { + this.reportInvalidJavadocTagsVisibility = AccPublic; + } else if (PROTECTED.equals(optionValue)) { + this.reportInvalidJavadocTagsVisibility = AccProtected; +// } else if (DEFAULT.equals(optionValue)) { +// this.reportInvalidJavadocTagsVisibility = AccDefault; + } else if (PRIVATE.equals(optionValue)) { + this.reportInvalidJavadocTagsVisibility = AccPrivate; + } + } + if ((optionValue = optionsMap.get(OPTION_ReportInvalidJavadocTags)) != null) { + if (ENABLED.equals(optionValue)) { + this.reportInvalidJavadocTags= true; + } else if (DISABLED.equals(optionValue)) { + this.reportInvalidJavadocTags = false; + } + } + if ((optionValue = optionsMap.get(OPTION_ReportMissingJavadocTags)) != null) { + updateSeverity(MissingJavadocTags, optionValue); + } + if ((optionValue = optionsMap.get(OPTION_ReportMissingJavadocTagsVisibility)) != null) { + if (PUBLIC.equals(optionValue)) { + this.reportMissingJavadocTagsVisibility = AccPublic; + } else if (PROTECTED.equals(optionValue)) { + this.reportMissingJavadocTagsVisibility = AccProtected; +// } else if (DEFAULT.equals(optionValue)) { +// this.reportMissingJavadocTagsVisibility = AccDefault; + } else if (PRIVATE.equals(optionValue)) { + this.reportMissingJavadocTagsVisibility = AccPrivate; + } + } + if ((optionValue = optionsMap.get(OPTION_ReportMissingJavadocTagsOverriding)) != null) { + if (ENABLED.equals(optionValue)) { + this.reportMissingJavadocTagsOverriding = true; + } else if (DISABLED.equals(optionValue)) { + this.reportMissingJavadocTagsOverriding = false; + } + } + if ((optionValue = optionsMap.get(OPTION_ReportMissingJavadocComments)) != null) { + updateSeverity(MissingJavadocComments, optionValue); + } + if ((optionValue = optionsMap.get(OPTION_ReportMissingJavadocCommentsVisibility)) != null) { + if (PUBLIC.equals(optionValue)) { + this.reportMissingJavadocCommentsVisibility = AccPublic; + } else if (PROTECTED.equals(optionValue)) { + this.reportMissingJavadocCommentsVisibility = AccProtected; +// } else if (DEFAULT.equals(optionValue)) { +// this.reportMissingJavadocCommentsVisibility = AccDefault; + } else if (PRIVATE.equals(optionValue)) { + this.reportMissingJavadocCommentsVisibility = AccPrivate; + } + } + if ((optionValue = optionsMap.get(OPTION_ReportMissingJavadocCommentsOverriding)) != null) { + if (ENABLED.equals(optionValue)) { + this.reportMissingJavadocCommentsOverriding = true; + } else if (DISABLED.equals(optionValue)) { + this.reportMissingJavadocCommentsOverriding = false; + } + } + } + + public void setVerboseMode(boolean flag) { + this.verbose = flag; + } + + public String toString() { + + StringBuffer buf = new StringBuffer("CompilerOptions:"); //$NON-NLS-1$ + buf.append("\n\t- local variables debug attributes: ").append((this.produceDebugAttributes & Vars) != 0 ? "ON" : " OFF"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + buf.append("\n\t- line number debug attributes: ").append((this.produceDebugAttributes & Lines) != 0 ? "ON" : " OFF"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + buf.append("\n\t- source debug attributes: ").append((this.produceDebugAttributes & Source) != 0 ? "ON" : " OFF"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + buf.append("\n\t- preserve all local variables: ").append(this.preserveAllLocalVariables ? "ON" : " OFF"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + buf.append("\n\t- method with constructor name: ").append(getSeverityString(MethodWithConstructorName)); //$NON-NLS-1$ + buf.append("\n\t- overridden package default method: ").append(getSeverityString(OverriddenPackageDefaultMethod)); //$NON-NLS-1$ + buf.append("\n\t- deprecation: ").append(getSeverityString(UsingDeprecatedAPI)); //$NON-NLS-1$ + buf.append("\n\t- masked catch block: ").append(getSeverityString(MaskedCatchBlock)); //$NON-NLS-1$ + buf.append("\n\t- unused local variable: ").append(getSeverityString(UnusedLocalVariable)); //$NON-NLS-1$ + buf.append("\n\t- unused parameter: ").append(getSeverityString(UnusedArgument)); //$NON-NLS-1$ + buf.append("\n\t- unused import: ").append(getSeverityString(UnusedImport)); //$NON-NLS-1$ + buf.append("\n\t- synthetic access emulation: ").append(getSeverityString(AccessEmulation)); //$NON-NLS-1$ + buf.append("\n\t- assignment with no effect: ").append(getSeverityString(NoEffectAssignment)); //$NON-NLS-1$ + buf.append("\n\t- non externalized string: ").append(getSeverityString(NonExternalizedString)); //$NON-NLS-1$ + buf.append("\n\t- static access receiver: ").append(getSeverityString(NonStaticAccessToStatic)); //$NON-NLS-1$ + buf.append("\n\t- indirect static access: ").append(getSeverityString(IndirectStaticAccess)); //$NON-NLS-1$ + buf.append("\n\t- incompatible non inherited interface method: ").append(getSeverityString(IncompatibleNonInheritedInterfaceMethod)); //$NON-NLS-1$ + buf.append("\n\t- unused private member: ").append(getSeverityString(UnusedPrivateMember)); //$NON-NLS-1$ + buf.append("\n\t- local variable hiding another variable: ").append(getSeverityString(LocalVariableHiding)); //$NON-NLS-1$ + buf.append("\n\t- field hiding another variable: ").append(getSeverityString(FieldHiding)); //$NON-NLS-1$ + buf.append("\n\t- possible accidental boolean assignment: ").append(getSeverityString(AccidentalBooleanAssign)); //$NON-NLS-1$ + buf.append("\n\t- superfluous semicolon: ").append(getSeverityString(SuperfluousSemicolon)); //$NON-NLS-1$ + buf.append("\n\t- uncommented empty block: ").append(getSeverityString(UndocumentedEmptyBlock)); //$NON-NLS-1$ + buf.append("\n\t- unnecessary type check: ").append(getSeverityString(UnnecessaryTypeCheck)); //$NON-NLS-1$ + buf.append("\n\t- invalid javadoc: ").append(getSeverityString(InvalidJavadoc)); //$NON-NLS-1$ + buf.append("\n\t- report invalid javadoc tags: ").append(this.reportInvalidJavadocTags ? ENABLED : DISABLED); //$NON-NLS-1$ + buf.append("\n\t- visibility level to report invalid javadoc tags: ").append(getVisibilityString(this.reportInvalidJavadocTagsVisibility)); //$NON-NLS-1$ + buf.append("\n\t- missing javadoc tags: ").append(getSeverityString(MissingJavadocTags)); //$NON-NLS-1$ + buf.append("\n\t- visibility level to report missing javadoc tags: ").append(getVisibilityString(this.reportMissingJavadocTagsVisibility)); //$NON-NLS-1$ + buf.append("\n\t- report missing javadoc tags in overriding methods: ").append(this.reportMissingJavadocTagsOverriding ? ENABLED : DISABLED); //$NON-NLS-1$ + buf.append("\n\t- missing javadoc comments: ").append(getSeverityString(MissingJavadocComments)); //$NON-NLS-1$ + buf.append("\n\t- visibility level to report missing javadoc comments: ").append(getVisibilityString(this.reportMissingJavadocCommentsVisibility)); //$NON-NLS-1$ + buf.append("\n\t- report missing javadoc comments in overriding methods: ").append(this.reportMissingJavadocCommentsOverriding ? ENABLED : DISABLED); //$NON-NLS-1$ + buf.append("\n\t- finally block not completing normally: ").append(getSeverityString(FinallyBlockNotCompleting)); //$NON-NLS-1$ + buf.append("\n\t- unused declared thrown exception: ").append(getSeverityString(UnusedDeclaredThrownException)); //$NON-NLS-1$ + buf.append("\n\t- unused declared thrown exception when overriding ").append(this.reportUnusedDeclaredThrownExceptionWhenOverriding ? ENABLED : DISABLED); //$NON-NLS-1$ +// buf.append("\n\t- JDK compliance level: "+ versionFromJdkLevel(this.complianceLevel)); //$NON-NLS-1$ +// buf.append("\n\t- JDK source level: "+ versionFromJdkLevel(this.sourceLevel)); //$NON-NLS-1$ +// buf.append("\n\t- JDK target level: "+ versionFromJdkLevel(this.targetJDK)); //$NON-NLS-1$ + buf.append("\n\t- private constructor access: ").append(this.isPrivateConstructorAccessChangingVisibility ? "extra argument" : "make default access"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + buf.append("\n\t- verbose : ").append(this.verbose ? "ON" : "OFF"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + buf.append("\n\t- produce reference info : ").append(this.produceReferenceInfo ? "ON" : "OFF"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + buf.append("\n\t- parse literal expressions as constants : ").append(this.parseLiteralExpressionsAsConstants ? "ON" : "OFF"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + buf.append("\n\t- encoding : ").append(this.defaultEncoding == null ? "" : this.defaultEncoding); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n\t- task tags: ").append(this.taskTags == null ? "" : new String(CharOperation.concatWith(this.taskTags,','))); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n\t- task priorities : ").append(this.taskPriorites == null ? "" : new String(CharOperation.concatWith(this.taskPriorites,','))); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("\n\t- report deprecation inside deprecated code : ").append(this.reportDeprecationInsideDeprecatedCode ? "ENABLED" : "DISABLED"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + buf.append("\n\t- report deprecation when overriding deprecated method : ").append(this.reportDeprecationWhenOverridingDeprecatedMethod ? "ENABLED" : "DISABLED"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + buf.append("\n\t- report unused parameter when implementing abstract method : ").append(this.reportUnusedParameterWhenImplementingAbstract ? "ENABLED" : "DISABLED"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + buf.append("\n\t- report unused parameter when overriding concrete method : ").append(this.reportUnusedParameterWhenOverridingConcrete ? "ENABLED" : "DISABLED"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + buf.append("\n\t- report constructor/setter parameter hiding existing field : ").append(this.reportSpecialParameterHidingField ? "ENABLED" : "DISABLED"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + return buf.toString(); + } + + void updateSeverity(long irritant, Object severityString) { + if (ERROR.equals(severityString)) { + this.errorThreshold |= irritant; + this.warningThreshold &= ~irritant; + } else if (WARNING.equals(severityString)) { + this.errorThreshold &= ~irritant; + this.warningThreshold |= irritant; + } else if (IGNORE.equals(severityString)) { + this.errorThreshold &= ~irritant; + this.warningThreshold &= ~irritant; + } + } +// public static long versionToJdkLevel(Object versionID) { +// if (VERSION_1_1.equals(versionID)) { +// return JDK1_1; +// } else if (VERSION_1_2.equals(versionID)) { +// return JDK1_2; +// } else if (VERSION_1_3.equals(versionID)) { +// return JDK1_3; +// } else if (VERSION_1_4.equals(versionID)) { +// return JDK1_4; +// } else if (VERSION_1_5.equals(versionID)) { +// return JDK1_5; +// } +// return 0; // unknown +// } + +// public static String versionFromJdkLevel(long jdkLevel) { +// if (jdkLevel == JDK1_1) { +// return VERSION_1_1; +// } else if (jdkLevel == JDK1_2) { +// return VERSION_1_2; +// } else if (jdkLevel == JDK1_3) { +// return VERSION_1_3; +// } else if (jdkLevel == JDK1_4) { +// return VERSION_1_4; +// } else if (jdkLevel == JDK1_5) { +// return VERSION_1_5; +// } +// return ""; // unknown version //$NON-NLS-1$ +// } +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java index 8cf9f7e..238bdbe 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java @@ -10,13 +10,16 @@ **********************************************************************/ package net.sourceforge.phpdt.internal.compiler.parser; import java.util.ArrayList; + import net.sourceforge.phpdt.core.compiler.CharOperation; import net.sourceforge.phpdt.core.compiler.ITerminalSymbols; import net.sourceforge.phpdt.core.compiler.InvalidInputException; +import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions; import net.sourceforge.phpdt.internal.compiler.impl.ReferenceContext; import net.sourceforge.phpdt.internal.compiler.lookup.CompilerModifiers; import net.sourceforge.phpdt.internal.compiler.lookup.TypeConstants; import net.sourceforge.phpdt.internal.compiler.problem.ProblemReporter; +import net.sourceforge.phpdt.internal.compiler.problem.ProblemSeverities; import net.sourceforge.phpeclipse.internal.compiler.ast.AbstractMethodDeclaration; import net.sourceforge.phpeclipse.internal.compiler.ast.AstNode; import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration; @@ -24,6 +27,8 @@ import net.sourceforge.phpeclipse.internal.compiler.ast.FieldDeclaration; import net.sourceforge.phpeclipse.internal.compiler.ast.MethodDeclaration; import net.sourceforge.phpeclipse.internal.compiler.ast.SingleTypeReference; import net.sourceforge.phpeclipse.internal.compiler.ast.TypeDeclaration; +import net.sourceforge.phpdt.internal.compiler.util.Util; + import org.eclipse.core.resources.IFile; public class Parser //extends PHPParserSuperclass implements ITerminalSymbols, CompilerModifiers, ParserBasicInformation { @@ -65,7 +70,9 @@ public class Parser //extends PHPParserSuperclass //private boolean phpMode; protected int modifiers; protected int modifiersSourceStart; - protected Parser() { + protected Parser(ProblemReporter problemReporter) { + this.problemReporter = problemReporter; + this.options = problemReporter.options; this.currentPHPString = 0; // PHPParserSuperclass.fileToParse = fileToParse; this.phpList = null; @@ -115,7 +122,14 @@ public class Parser //extends PHPParserSuperclass this.initializeScanner(); } public void initializeScanner() { - this.scanner = new Scanner(false, false, false, false); + this.scanner = new Scanner( + false /*comment*/, + false /*whitespace*/, + this.options.getSeverity(CompilerOptions.NonExternalizedString) != ProblemSeverities.Ignore /*nls*/, + false, + false, + this.options.taskTags/*taskTags*/, + this.options.taskPriorites/*taskPriorities*/); } /** * Create marker for the parse error @@ -274,7 +288,7 @@ public class Parser //extends PHPParserSuperclass } throwSyntaxError("End-of-file not reached."); } - return; + break; } catch (SyntaxError sytaxErr1) { // setMarker(sytaxErr1.getMessage(), sytaxErr1.getLine(), // ERROR); @@ -293,7 +307,7 @@ public class Parser //extends PHPParserSuperclass getNextToken(); } if (token == TokenNameEOF || token == TokenNameERROR) { - return; + break; } } catch (SyntaxError sytaxErr2) { // setMarker(sytaxErr2.getMessage(), sytaxErr2.getLine(), @@ -301,10 +315,48 @@ public class Parser //extends PHPParserSuperclass // setMarker(sytaxErr2.getMessage(), // scanner.getCurrentTokenStartPosition(), // scanner.getCurrentTokenEndPosition(), ERROR); - return; + break; } } } while (true); + + endParse(0); + } + + protected CompilationUnitDeclaration endParse(int act) { + + this.lastAct = act; + + if (currentElement != null) { + currentElement.topElement().updateParseTree(); + if (VERBOSE_RECOVERY) { + System.out.print(Util.bind("parser.syntaxRecovery")); //$NON-NLS-1$ + System.out.println("--------------------------"); //$NON-NLS-1$ + System.out.println(compilationUnit); + System.out.println("----------------------------------"); //$NON-NLS-1$ + } + } else { + if (diet & VERBOSE_RECOVERY) { + System.out.print(Util.bind("parser.regularParse")); //$NON-NLS-1$ + System.out.println("--------------------------"); //$NON-NLS-1$ + System.out.println(compilationUnit); + System.out.println("----------------------------------"); //$NON-NLS-1$ + } + } + if (scanner.recordLineSeparator) { + compilationUnit.compilationResult.lineSeparatorPositions = scanner.getLineEnds(); + } + if (scanner.taskTags != null) { + for (int i = 0; i < scanner.foundTaskCount; i++) { + problemReporter().task( + new String(scanner.foundTaskTags[i]), + new String(scanner.foundTaskMessages[i]), + scanner.foundTaskPriorities[i] == null ? null : new String(scanner.foundTaskPriorities[i]), + scanner.foundTaskPositions[i][0], + scanner.foundTaskPositions[i][1]); + } + } + return compilationUnit; } // public PHPOutlineInfo parseInfo(Object parent, String s) { // PHPOutlineInfo outlineInfo = new PHPOutlineInfo(parent); @@ -3418,6 +3470,7 @@ public class Parser //extends PHPParserSuperclass */ protected ReferenceContext referenceContext; protected ProblemReporter problemReporter; + protected CompilerOptions options; // protected CompilationResult compilationResult; /** * Returns this parser's problem reporter initialized with its reference diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Scanner.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Scanner.java index 10a8ea8..ea1f9c0 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Scanner.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Scanner.java @@ -135,12 +135,7 @@ public class Scanner implements IScanner, ITerminalSymbols { public char[][] taskPriorities = null; public static final boolean DEBUG = false; public static final boolean TRACE = false; - public Scanner() { - this(false, false); - } - public Scanner(boolean tokenizeComments, boolean tokenizeWhiteSpace) { - this(tokenizeComments, tokenizeWhiteSpace, false); - } + /** * Determines if the specified character is permissible as the first * character in a PHP identifier @@ -1587,7 +1582,8 @@ public class Scanner implements IScanner, ITerminalSymbols { endPositionForLineComment = currentPosition - 1; } recordComment(false); - if ((currentCharacter == '\r') + if (this.taskTags != null) checkTaskTag(this.startPosition, this.currentPosition); + if ((currentCharacter == '\r') || (currentCharacter == '\n')) { checkNonExternalizeString(); if (recordLineSeparator) { @@ -3824,6 +3820,13 @@ public class Scanner implements IScanner, ITerminalSymbols { + new String(getCurrentTokenSource()); //$NON-NLS-1$ } } + + public Scanner() { + this(false, false); + } + public Scanner(boolean tokenizeComments, boolean tokenizeWhiteSpace) { + this(tokenizeComments, tokenizeWhiteSpace, false); + } public Scanner(boolean tokenizeComments, boolean tokenizeWhiteSpace, boolean checkNonExternalizedStringLiterals) { this(tokenizeComments, tokenizeWhiteSpace, @@ -3832,11 +3835,13 @@ public class Scanner implements IScanner, ITerminalSymbols { public Scanner(boolean tokenizeComments, boolean tokenizeWhiteSpace, boolean checkNonExternalizedStringLiterals, boolean assertMode) { this(tokenizeComments, tokenizeWhiteSpace, - checkNonExternalizedStringLiterals, assertMode, false); + checkNonExternalizedStringLiterals, assertMode, false, null, null); } public Scanner(boolean tokenizeComments, boolean tokenizeWhiteSpace, boolean checkNonExternalizedStringLiterals, boolean assertMode, - boolean tokenizeStrings) { + boolean tokenizeStrings, + char[][] taskTags, + char[][] taskPriorities) { this.eofPosition = Integer.MAX_VALUE; this.tokenizeComments = tokenizeComments; this.tokenizeWhiteSpace = tokenizeWhiteSpace; @@ -3844,6 +3849,8 @@ public class Scanner implements IScanner, ITerminalSymbols { this.checkNonExternalizedStringLiterals = checkNonExternalizedStringLiterals; this.assertMode = assertMode; this.encapsedStringStack = null; + this.taskTags = taskTags; + this.taskPriorities = taskPriorities; } private void checkNonExternalizeString() throws InvalidInputException { if (currentLine == null) diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/UnitParser.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/UnitParser.java index d8a0199..3a40512 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/UnitParser.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/UnitParser.java @@ -1,6 +1,5 @@ package net.sourceforge.phpdt.internal.compiler.parser; -import java.util.Stack; import net.sourceforge.phpdt.core.IJavaModelMarker; import net.sourceforge.phpdt.core.compiler.IProblem; @@ -8,7 +7,6 @@ import net.sourceforge.phpdt.internal.compiler.CompilationResult; import net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit; import net.sourceforge.phpdt.internal.compiler.problem.AbortCompilation; import net.sourceforge.phpdt.internal.compiler.problem.ProblemReporter; -import net.sourceforge.phpdt.internal.compiler.util.Util; import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration; import net.sourceforge.phpeclipse.internal.compiler.ast.ConstructorDeclaration; import net.sourceforge.phpeclipse.internal.compiler.ast.FieldDeclaration; @@ -28,9 +26,9 @@ import org.eclipse.core.runtime.CoreException; public class UnitParser extends Parser { public UnitParser(ProblemReporter problemReporter) { //, boolean optimizeStringLiterals, boolean assertMode) { - super(); + super(problemReporter); nestedMethod = new int[30]; - this.problemReporter = problemReporter; + // this.optimizeStringLiterals = optimizeStringLiterals; // this.assertMode = assertMode; // this.initializeScanner(); @@ -209,41 +207,7 @@ public class UnitParser extends Parser { } } - protected CompilationUnitDeclaration endParse(int act) { - - this.lastAct = act; - if (currentElement != null) { - currentElement.topElement().updateParseTree(); - if (VERBOSE_RECOVERY) { - System.out.print(Util.bind("parser.syntaxRecovery")); //$NON-NLS-1$ - System.out.println("--------------------------"); //$NON-NLS-1$ - System.out.println(compilationUnit); - System.out.println("----------------------------------"); //$NON-NLS-1$ - } - } else { - if (diet & VERBOSE_RECOVERY) { - System.out.print(Util.bind("parser.regularParse")); //$NON-NLS-1$ - System.out.println("--------------------------"); //$NON-NLS-1$ - System.out.println(compilationUnit); - System.out.println("----------------------------------"); //$NON-NLS-1$ - } - } - if (scanner.recordLineSeparator) { - compilationUnit.compilationResult.lineSeparatorPositions = scanner.getLineEnds(); - } - if (scanner.taskTags != null) { - for (int i = 0; i < scanner.foundTaskCount; i++) { - problemReporter().task( - new String(scanner.foundTaskTags[i]), - new String(scanner.foundTaskMessages[i]), - scanner.foundTaskPriorities[i] == null ? null : new String(scanner.foundTaskPriorities[i]), - scanner.foundTaskPositions[i][0], - scanner.foundTaskPositions[i][1]); - } - } - return compilationUnit; - } // A P I diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/ProblemHandler.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/ProblemHandler.java index 6e52747..5e90834 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/ProblemHandler.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/ProblemHandler.java @@ -14,6 +14,7 @@ import net.sourceforge.phpdt.core.compiler.IProblem; import net.sourceforge.phpdt.internal.compiler.CompilationResult; import net.sourceforge.phpdt.internal.compiler.IErrorHandlingPolicy; import net.sourceforge.phpdt.internal.compiler.IProblemFactory; +import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions; import net.sourceforge.phpdt.internal.compiler.impl.ReferenceContext; @@ -32,18 +33,17 @@ public class ProblemHandler implements ProblemSeverities { final public IErrorHandlingPolicy policy; public final IProblemFactory problemFactory; -// public final CompilerOptions options; + public final CompilerOptions options; /* * Problem handler can be supplied with a policy to specify * its behavior in error handling. Also see static methods for * built-in policies. * */ -public ProblemHandler(IErrorHandlingPolicy policy, IProblemFactory problemFactory) { -//CompilerOptions options, IProblemFactory problemFactory) { +public ProblemHandler(IErrorHandlingPolicy policy, CompilerOptions options, IProblemFactory problemFactory) { this.policy = policy; this.problemFactory = problemFactory; -// this.options = options; + this.options = options; } /* * Given the current configuration, answers which category the problem diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/ProblemReporter.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/ProblemReporter.java index 3b07fa2..23f61e3 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/ProblemReporter.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/ProblemReporter.java @@ -15,10 +15,10 @@ import net.sourceforge.phpdt.core.compiler.InvalidInputException; import net.sourceforge.phpdt.internal.compiler.CompilationResult; import net.sourceforge.phpdt.internal.compiler.IErrorHandlingPolicy; import net.sourceforge.phpdt.internal.compiler.IProblemFactory; +import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions; import net.sourceforge.phpdt.internal.compiler.impl.Constant; import net.sourceforge.phpdt.internal.compiler.impl.ReferenceContext; import net.sourceforge.phpdt.internal.compiler.lookup.Binding; -import net.sourceforge.phpdt.internal.compiler.lookup.CompilerModifiers; import net.sourceforge.phpdt.internal.compiler.lookup.FieldBinding; import net.sourceforge.phpdt.internal.compiler.lookup.LocalVariableBinding; import net.sourceforge.phpdt.internal.compiler.lookup.MethodBinding; @@ -78,9 +78,11 @@ import net.sourceforge.phpeclipse.internal.compiler.ast.UnaryExpression; public class ProblemReporter extends ProblemHandler implements ProblemReasons { public ReferenceContext referenceContext; public ProblemReporter(IErrorHandlingPolicy policy, + CompilerOptions options, IProblemFactory problemFactory) { - //CompilerOptions options, IProblemFactory problemFactory) { - super(policy, problemFactory);//options, problemFactory); + + // IProblemFactory problemFactory) { + super(policy, options, problemFactory); //), problemFactory); } public void abortDueToInternalError(String errorMessage) { String[] arguments = new String[]{errorMessage}; @@ -361,219 +363,186 @@ public class ProblemReporter extends ProblemHandler implements ProblemReasons { | Abort, start, end); } /* - * Given the current configuration, answers which category the problem falls - * into: Error | Warning | Ignore + * Given the current configuration, answers which category the problem + * falls into: + * Error | Warning | Ignore */ - //public int computeSeverity(int problemId){ - // - // // severity can have been preset on the problem - //// if ((problem.severity & Fatal) != 0){ - //// return Error; - //// } - // - // // if not then check whether it is a configurable problem - // int errorThreshold = options.errorThreshold; - // int warningThreshold = options.warningThreshold; - // - // switch(problemId){ - // - // case IProblem.UnreachableCatch : - // case IProblem.CodeCannotBeReached : - // if ((errorThreshold & CompilerOptions.UnreachableCode) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.UnreachableCode) != 0){ - // return Warning; - // } - // return Ignore; - // - // case IProblem.MaskedCatch : - // if ((errorThreshold & CompilerOptions.MaskedCatchBlock) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.MaskedCatchBlock) != 0){ - // return Warning; - // } - // return Ignore; - // - ///* - // case Never Used : - // if ((errorThreshold & ParsingOptionalError) != 0){ - // return Error; - // } - // if ((warningThreshold & ParsingOptionalError) != 0){ - // return Warning; - // } - // return Ignore; - //*/ - // case IProblem.ImportNotFound : - // case IProblem.ImportNotVisible : - // case IProblem.ImportAmbiguous : - // case IProblem.ImportInternalNameProvided : - // case IProblem.ImportInheritedNameHidesEnclosingName : - // case IProblem.DuplicateImport : - // case IProblem.ConflictingImport : - // case IProblem.CannotImportPackage : - // if ((errorThreshold & CompilerOptions.ImportProblem) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.ImportProblem) != 0){ - // return Warning; - // } - // return Ignore; - // - // case IProblem.UnusedImport : - // // if import problem are disabled, then ignore - // if ((errorThreshold & CompilerOptions.ImportProblem) == 0 - // && (warningThreshold & CompilerOptions.ImportProblem) == 0){ - // return Ignore; - // } - // if ((errorThreshold & CompilerOptions.UnusedImport) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.UnusedImport) != 0){ - // return Warning; - // } - // return Ignore; - // - // case IProblem.MethodButWithConstructorName : - // if ((errorThreshold & CompilerOptions.MethodWithConstructorName) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.MethodWithConstructorName) != - // 0){ - // return Warning; - // } - // return Ignore; - // - // case IProblem.OverridingNonVisibleMethod : - // if ((errorThreshold & CompilerOptions.OverriddenPackageDefaultMethod) != - // 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.OverriddenPackageDefaultMethod) - // != 0){ - // return Warning; - // } - // return Ignore; - // - // case IProblem.IncompatibleReturnTypeForNonInheritedInterfaceMethod : - // case - // IProblem.IncompatibleExceptionInThrowsClauseForNonInheritedInterfaceMethod - // : - // if ((errorThreshold & - // CompilerOptions.IncompatibleNonInheritedInterfaceMethod) != 0){ - // return Error; - // } - // if ((warningThreshold & - // CompilerOptions.IncompatibleNonInheritedInterfaceMethod) != 0){ - // return Warning; - // } - // return Ignore; - // - // case IProblem.OverridingDeprecatedMethod : - // case IProblem.UsingDeprecatedType : - // case IProblem.UsingDeprecatedMethod : - // case IProblem.UsingDeprecatedConstructor : - // case IProblem.UsingDeprecatedField : - // if ((errorThreshold & CompilerOptions.UsingDeprecatedAPI) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.UsingDeprecatedAPI) != 0){ - // return Warning; - // } - // return Ignore; - // - // case IProblem.LocalVariableIsNeverUsed : - // if ((errorThreshold & CompilerOptions.UnusedLocalVariable) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.UnusedLocalVariable) != 0){ - // return Warning; - // } - // return Ignore; - // - // case IProblem.ArgumentIsNeverUsed : - // if ((errorThreshold & CompilerOptions.UnusedArgument) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.UnusedArgument) != 0){ - // return Warning; - // } - // return Ignore; - // - // case IProblem.NoImplicitStringConversionForCharArrayExpression : - // if ((errorThreshold & CompilerOptions.NoImplicitStringConversion) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.NoImplicitStringConversion) != - // 0){ - // return Warning; - // } - // return Ignore; - // - // case IProblem.NeedToEmulateFieldReadAccess : - // case IProblem.NeedToEmulateFieldWriteAccess : - // case IProblem.NeedToEmulateMethodAccess : - // case IProblem.NeedToEmulateConstructorAccess : - // if ((errorThreshold & CompilerOptions.AccessEmulation) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.AccessEmulation) != 0){ - // return Warning; - // } - // return Ignore; - // case IProblem.NonExternalizedStringLiteral : - // if ((errorThreshold & CompilerOptions.NonExternalizedString) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.NonExternalizedString) != 0){ - // return Warning; - // } - // return Ignore; - // case IProblem.UseAssertAsAnIdentifier : - // if ((errorThreshold & CompilerOptions.AssertUsedAsAnIdentifier) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.AssertUsedAsAnIdentifier) != 0){ - // return Warning; - // } - // return Ignore; - // case IProblem.NonStaticAccessToStaticMethod : - // case IProblem.NonStaticAccessToStaticField : - // if ((errorThreshold & CompilerOptions.StaticAccessReceiver) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.StaticAccessReceiver) != 0){ - // return Warning; - // } - // return Ignore; - // case IProblem.AssignmentHasNoEffect: - // if ((errorThreshold & CompilerOptions.NoEffectAssignment) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.NoEffectAssignment) != 0){ - // return Warning; - // } - // return Ignore; - // case IProblem.UnusedPrivateConstructor: - // case IProblem.UnusedPrivateMethod: - // case IProblem.UnusedPrivateField: - // case IProblem.UnusedPrivateType: - // if ((errorThreshold & CompilerOptions.UnusedPrivateMember) != 0){ - // return Error; - // } - // if ((warningThreshold & CompilerOptions.UnusedPrivateMember) != 0){ - // return Warning; - // } - // return Ignore; - // - // case IProblem.Task : - // return Warning; - // default: - // return Error; - // } - //} + public int computeSeverity(int problemId){ + + // severity can have been preset on the problem +// if ((problem.severity & Fatal) != 0){ +// return Error; +// } + + // if not then check whether it is a configurable problem + switch(problemId){ + + case IProblem.MaskedCatch : + return this.options.getSeverity(CompilerOptions.MaskedCatchBlock); + + case IProblem.UnusedImport : + return this.options.getSeverity(CompilerOptions.UnusedImport); + + case IProblem.MethodButWithConstructorName : + return this.options.getSeverity(CompilerOptions.MethodWithConstructorName); + + case IProblem.OverridingNonVisibleMethod : + return this.options.getSeverity(CompilerOptions.OverriddenPackageDefaultMethod); + + case IProblem.IncompatibleReturnTypeForNonInheritedInterfaceMethod : + case IProblem.IncompatibleExceptionInThrowsClauseForNonInheritedInterfaceMethod : + return this.options.getSeverity(CompilerOptions.IncompatibleNonInheritedInterfaceMethod); + + case IProblem.OverridingDeprecatedMethod : + case IProblem.UsingDeprecatedType : + case IProblem.UsingDeprecatedMethod : + case IProblem.UsingDeprecatedConstructor : + case IProblem.UsingDeprecatedField : + return this.options.getSeverity(CompilerOptions.UsingDeprecatedAPI); + + case IProblem.LocalVariableIsNeverUsed : + return this.options.getSeverity(CompilerOptions.UnusedLocalVariable); + + case IProblem.ArgumentIsNeverUsed : + return this.options.getSeverity(CompilerOptions.UnusedArgument); + + case IProblem.NoImplicitStringConversionForCharArrayExpression : + return this.options.getSeverity(CompilerOptions.NoImplicitStringConversion); + + case IProblem.NeedToEmulateFieldReadAccess : + case IProblem.NeedToEmulateFieldWriteAccess : + case IProblem.NeedToEmulateMethodAccess : + case IProblem.NeedToEmulateConstructorAccess : + return this.options.getSeverity(CompilerOptions.AccessEmulation); + + case IProblem.NonExternalizedStringLiteral : + return this.options.getSeverity(CompilerOptions.NonExternalizedString); + + case IProblem.UseAssertAsAnIdentifier : + return this.options.getSeverity(CompilerOptions.AssertUsedAsAnIdentifier); + + case IProblem.NonStaticAccessToStaticMethod : + case IProblem.NonStaticAccessToStaticField : + return this.options.getSeverity(CompilerOptions.NonStaticAccessToStatic); + +// case IProblem.IndirectAccessToStaticMethod : +// case IProblem.IndirectAccessToStaticField : +// case IProblem.IndirectAccessToStaticType : +// return this.options.getSeverity(CompilerOptions.IndirectStaticAccess); + + case IProblem.AssignmentHasNoEffect: + return this.options.getSeverity(CompilerOptions.NoEffectAssignment); + + case IProblem.UnusedPrivateConstructor: + case IProblem.UnusedPrivateMethod: + case IProblem.UnusedPrivateField: + case IProblem.UnusedPrivateType: + return this.options.getSeverity(CompilerOptions.UnusedPrivateMember); + + case IProblem.Task : + return Warning; + +// case IProblem.LocalVariableHidingLocalVariable: +// case IProblem.LocalVariableHidingField: +// case IProblem.ArgumentHidingLocalVariable: +// case IProblem.ArgumentHidingField: +// return this.options.getSeverity(CompilerOptions.LocalVariableHiding); + +// case IProblem.FieldHidingLocalVariable: +// case IProblem.FieldHidingField: +// return this.options.getSeverity(CompilerOptions.FieldHiding); + +// case IProblem.PossibleAccidentalBooleanAssignment: +// return this.options.getSeverity(CompilerOptions.AccidentalBooleanAssign); + +// case IProblem.SuperfluousSemicolon: +// return this.options.getSeverity(CompilerOptions.SuperfluousSemicolon); +// +// case IProblem.UndocumentedEmptyBlock: +// return this.options.getSeverity(CompilerOptions.UndocumentedEmptyBlock); +// +// case IProblem.UnnecessaryCast: +// case IProblem.UnnecessaryArgumentCast: +// case IProblem.UnnecessaryInstanceof: +// return this.options.getSeverity(CompilerOptions.UnnecessaryTypeCheck); +// +// case IProblem.FinallyMustCompleteNormally: +// return this.options.getSeverity(CompilerOptions.FinallyBlockNotCompleting); +// +// case IProblem.UnusedMethodDeclaredThrownException: +// case IProblem.UnusedConstructorDeclaredThrownException: +// return this.options.getSeverity(CompilerOptions.UnusedDeclaredThrownException); +// +// case IProblem.UnqualifiedFieldAccess: +// return this.options.getSeverity(CompilerOptions.UnqualifiedFieldAccess); + + /* + * Javadoc syntax errors + */ + // Javadoc explicit IDs +// case IProblem.JavadocUnexpectedTag: +// case IProblem.JavadocDuplicateReturnTag: +// case IProblem.JavadocInvalidThrowsClass: +// case IProblem.JavadocInvalidSeeReference: +// case IProblem.JavadocInvalidSeeHref: +// case IProblem.JavadocInvalidSeeArgs: +// case IProblem.JavadocInvalidTag: +// return this.options.getSeverity(CompilerOptions.InvalidJavadoc); + + /* + * Javadoc tags resolved references errors + */ +// case IProblem.JavadocInvalidParamName: +// case IProblem.JavadocDuplicateParamName: +// case IProblem.JavadocMissingParamName: +// case IProblem.JavadocInvalidThrowsClassName: +// case IProblem.JavadocDuplicateThrowsClassName: +// case IProblem.JavadocMissingThrowsClassName: +// case IProblem.JavadocMissingSeeReference: +// case IProblem.JavadocUsingDeprecatedField: +// case IProblem.JavadocUsingDeprecatedConstructor: +// case IProblem.JavadocUsingDeprecatedMethod: +// case IProblem.JavadocUsingDeprecatedType: +// case IProblem.JavadocUndefinedField: +// case IProblem.JavadocNotVisibleField: +// case IProblem.JavadocAmbiguousField: +// case IProblem.JavadocUndefinedConstructor: +// case IProblem.JavadocNotVisibleConstructor: +// case IProblem.JavadocAmbiguousConstructor: +// case IProblem.JavadocUndefinedMethod: +// case IProblem.JavadocNotVisibleMethod: +// case IProblem.JavadocAmbiguousMethod: +// case IProblem.JavadocParameterMismatch: +// case IProblem.JavadocUndefinedType: +// case IProblem.JavadocNotVisibleType: +// case IProblem.JavadocAmbiguousType: +// case IProblem.JavadocInternalTypeNameProvided: +// case IProblem.JavadocNoMessageSendOnArrayType: +// case IProblem.JavadocNoMessageSendOnBaseType: +// if (!this.options.reportInvalidJavadocTags) +// return ProblemSeverities.Ignore; +// else +// return this.options.getSeverity(CompilerOptions.InvalidJavadoc); + + /* + * Javadoc missing tags errors + */ +// case IProblem.JavadocMissingParamTag: +// case IProblem.JavadocMissingReturnTag: +// case IProblem.JavadocMissingThrowsTag: +// return this.options.getSeverity(CompilerOptions.MissingJavadocTags); + + /* + * Missing Javadoc errors + */ +// case IProblem.JavadocMissing: +// return this.options.getSeverity(CompilerOptions.MissingJavadocComments); + + // by default problems are errors. + default: + return Error; + } + } //public void conditionalArgumentsIncompatibleTypes(ConditionalExpression // expression, TypeBinding trueType, TypeBinding falseType) { // this.handle( diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnit.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnit.java index 3c07bac..50c264c 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnit.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnit.java @@ -21,20 +21,26 @@ import net.sourceforge.phpdt.core.ICompilationUnit; import net.sourceforge.phpdt.core.IJavaElement; import net.sourceforge.phpdt.core.IJavaModelStatusConstants; import net.sourceforge.phpdt.core.IJavaProject; +import net.sourceforge.phpdt.core.IMember; import net.sourceforge.phpdt.core.IMethod; +import net.sourceforge.phpdt.core.IOpenable; import net.sourceforge.phpdt.core.IPackageDeclaration; import net.sourceforge.phpdt.core.IPackageFragment; import net.sourceforge.phpdt.core.IPackageFragmentRoot; +import net.sourceforge.phpdt.core.IParent; import net.sourceforge.phpdt.core.IProblemRequestor; +import net.sourceforge.phpdt.core.ISourceManipulation; import net.sourceforge.phpdt.core.ISourceRange; +import net.sourceforge.phpdt.core.ISourceReference; import net.sourceforge.phpdt.core.IType; +import net.sourceforge.phpdt.core.IWorkingCopy; import net.sourceforge.phpdt.core.JavaModelException; import net.sourceforge.phpdt.core.Signature; import net.sourceforge.phpdt.core.compiler.CharOperation; import net.sourceforge.phpdt.core.jdom.IDOMNode; -import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor; import net.sourceforge.phpdt.internal.compiler.IProblemFactory; import net.sourceforge.phpdt.internal.compiler.SourceElementParser; +import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions; import net.sourceforge.phpdt.internal.compiler.problem.DefaultProblemFactory; import org.eclipse.core.resources.IContainer; @@ -329,8 +335,8 @@ protected boolean generateInfos(OpenableElementInfo info, IProgressMonitor pm, M // generate structure CompilationUnitStructureRequestor requestor = new CompilationUnitStructureRequestor(this, unitInfo, newElements); IProblemFactory factory = new DefaultProblemFactory(); -// SourceElementParser parser = new SourceElementParser(requestor, factory, new CompilerOptions(getJavaProject().getOptions(true))); - SourceElementParser parser = new SourceElementParser(requestor, factory); + SourceElementParser parser = new SourceElementParser(requestor, factory, new CompilerOptions(getJavaProject().getOptions(true))); +// SourceElementParser parser = new SourceElementParser(requestor, factory); requestor.parser = parser; parser.parseCompilationUnit(this, false); if (isWorkingCopy()) { diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnitProblemFinder.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnitProblemFinder.java index 695eb36..e511719 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnitProblemFinder.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnitProblemFinder.java @@ -11,14 +11,15 @@ package net.sourceforge.phpdt.internal.core; import java.util.Locale; +import java.util.Map; import net.sourceforge.phpdt.core.ICompilationUnit; import net.sourceforge.phpdt.core.IJavaElement; import net.sourceforge.phpdt.core.IJavaProject; import net.sourceforge.phpdt.core.IPackageFragment; import net.sourceforge.phpdt.core.IProblemRequestor; -import net.sourceforge.phpdt.core.JavaModelException; import net.sourceforge.phpdt.core.JavaCore; +import net.sourceforge.phpdt.core.JavaModelException; import net.sourceforge.phpdt.core.compiler.CharOperation; import net.sourceforge.phpdt.core.compiler.IProblem; import net.sourceforge.phpdt.internal.compiler.CompilationResult; @@ -81,11 +82,11 @@ public class CompilationUnitProblemFinder extends Compiler { protected CompilationUnitProblemFinder( INameEnvironment environment, IErrorHandlingPolicy policy, -// Map settings, + Map settings, ICompilerRequestor requestor, IProblemFactory problemFactory) { - super(environment, policy, requestor, problemFactory, true);//settings, requestor, problemFactory, true); + super(environment, policy, settings, requestor, problemFactory, true); } /** @@ -197,11 +198,9 @@ public class CompilationUnitProblemFinder extends Compiler { new CompilationUnitProblemFinder( getNameEnvironment(unitElement), getHandlingPolicy(), - getRequestor(), - getProblemFactory(fileName, problemRequestor, monitor)); -// project.getOptions(true), -// getRequestor(), -// getProblemFactory(fileName, problemRequestor, monitor)); + project.getOptions(true), + getRequestor(), + getProblemFactory(fileName, problemRequestor, monitor)); CompilationUnitDeclaration unit = null; try { diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/builder/AbstractImageBuilder.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/builder/AbstractImageBuilder.java index e79256b..bf7cd29 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/builder/AbstractImageBuilder.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/builder/AbstractImageBuilder.java @@ -270,7 +270,7 @@ protected Compiler newCompiler() { return new Compiler( nameEnvironment, DefaultErrorHandlingPolicies.proceedWithAllProblems(), -// javaBuilder.javaProject.getOptions(true), + javaBuilder.javaProject.getOptions(true), this, ProblemFactory.getProblemFactory(Locale.getDefault())); } diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMBuilder.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMBuilder.java index 0ee24f0..737400a 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMBuilder.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMBuilder.java @@ -16,16 +16,13 @@ import java.util.Map; import net.sourceforge.phpdt.core.JavaCore; import net.sourceforge.phpdt.core.compiler.IProblem; import net.sourceforge.phpdt.core.jdom.IDOMCompilationUnit; -import net.sourceforge.phpdt.core.jdom.IDOMField; -import net.sourceforge.phpdt.core.jdom.IDOMImport; -import net.sourceforge.phpdt.core.jdom.IDOMInitializer; -import net.sourceforge.phpdt.core.jdom.IDOMMethod; +import net.sourceforge.phpdt.core.jdom.IDOMFactory; import net.sourceforge.phpdt.core.jdom.IDOMNode; import net.sourceforge.phpdt.core.jdom.IDOMPackage; -import net.sourceforge.phpdt.core.jdom.IDOMType; import net.sourceforge.phpdt.internal.compiler.DocumentElementParser; import net.sourceforge.phpdt.internal.compiler.IDocumentElementRequestor; import net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit; +import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions; import net.sourceforge.phpdt.internal.compiler.problem.DefaultProblemFactory; import net.sourceforge.phpdt.internal.core.util.CharArrayOps; @@ -692,7 +689,7 @@ public void exitMethod(int bodyEnd, int declarationEnd) { * Creates a new parser. */ protected DocumentElementParser getParser(Map settings) { - return new DocumentElementParser(this, new DefaultProblemFactory());//, new CompilerOptions(settings)); + return new DocumentElementParser(this, new DefaultProblemFactory(), new CompilerOptions(settings)); } /** * Initializes the builder to create a document fragment. diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/SimpleDOMBuilder.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/SimpleDOMBuilder.java index df63d2c..aa36b78 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/SimpleDOMBuilder.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/SimpleDOMBuilder.java @@ -14,9 +14,11 @@ import java.util.Map; import net.sourceforge.phpdt.core.JavaCore; import net.sourceforge.phpdt.core.jdom.IDOMCompilationUnit; +import net.sourceforge.phpdt.core.jdom.IDOMFactory; import net.sourceforge.phpdt.internal.compiler.ISourceElementRequestor; import net.sourceforge.phpdt.internal.compiler.SourceElementParser; import net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit; +import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions; import net.sourceforge.phpdt.internal.compiler.problem.DefaultProblemFactory; import net.sourceforge.phpdt.internal.core.util.CharArrayOps; @@ -213,6 +215,6 @@ protected void exitType(int declarationEnd) { * Creates a new parser. */ protected SourceElementParser getParser(Map settings) { - return new SourceElementParser(this, new DefaultProblemFactory());//, new CompilerOptions(settings)); + return new SourceElementParser(this, new DefaultProblemFactory(), new CompilerOptions(settings)); } } diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/StubUtility.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/StubUtility.java index 67714c9..ca646ed 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/StubUtility.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/StubUtility.java @@ -5,6 +5,8 @@ package net.sourceforge.phpdt.internal.corext.codemanipulation; import net.sourceforge.phpdt.core.ICodeFormatter; +import net.sourceforge.phpdt.core.IJavaProject; +import net.sourceforge.phpdt.core.JavaCore; import net.sourceforge.phpdt.core.ToolFactory; import org.eclipse.jface.text.BadLocationException; @@ -510,23 +512,23 @@ public class StubUtility { // return null; // } // -// public static String getTodoTaskTag(IJavaProject project) { -// String markers= null; -// if (project == null) { -// markers= JavaCore.getOption(JavaCore.COMPILER_TASK_TAGS); -// } else { -// markers= project.getOption(JavaCore.COMPILER_TASK_TAGS, true); -// } -// -// if (markers != null && markers.length() > 0) { -// int idx= markers.indexOf(','); -// if (idx == -1) { -// return markers; -// } else { -// return markers.substring(0, idx); -// } -// } -// return null; -// } + public static String getTodoTaskTag(IJavaProject project) { + String markers= null; + if (project == null) { + markers= JavaCore.getOption(JavaCore.COMPILER_TASK_TAGS); + } else { + markers= project.getOption(JavaCore.COMPILER_TASK_TAGS, true); + } + + if (markers != null && markers.length() > 0) { + int idx= markers.indexOf(','); + if (idx == -1) { + return markers; + } else { + return markers.substring(0, idx); + } + } + return null; + } } diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/formatter/CodeFormatter.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/formatter/CodeFormatter.java index 7938516..36955ff 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/formatter/CodeFormatter.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/formatter/CodeFormatter.java @@ -132,16 +132,16 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter { , true /* whitespace */ , false /* nls */ , false /* assert */ - , true /* tokenizeStrings */ - ); // regular scanner for forming lines + , true, /* tokenizeStrings */ + null, null); // regular scanner for forming lines scanner.recordLineSeparator = true; // to remind of the position of the beginning of the line. splitScanner = new Scanner(true /* comment */ , true /* whitespace */ , false /* nls */ , false /* assert */ - , true /* tokenizeStrings */ - ); + , true, /* tokenizeStrings */ + null, null); // secondary scanner to split long lines formed by primary scanning // initialize current line buffer currentLineBuffer = new StringBuffer(); diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/formatter/impl/FormatterOptions.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/formatter/impl/FormatterOptions.java index b8f8626..8784cce 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/formatter/impl/FormatterOptions.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/formatter/impl/FormatterOptions.java @@ -17,16 +17,16 @@ public class FormatterOptions { /** * Option IDs */ - public static final String OPTION_InsertNewlineBeforeOpeningBrace = "net.sourceforge.phpeclipse.core.formatter.newline.openingBrace"; //$NON-NLS-1$ - public static final String OPTION_InsertNewlineInControlStatement = "net.sourceforge.phpeclipse.core.formatter.newline.controlStatement"; //$NON-NLS-1$ - // public static final String OPTION_InsertNewLineBetweenElseAndIf = "net.sourceforge.phpeclipse.core.formatter.newline.elseIf"; //$NON-NLS-1$ - public static final String OPTION_InsertNewLineInEmptyBlock = "net.sourceforge.phpeclipse.core.formatter.newline.emptyBlock"; //$NON-NLS-1$ - public static final String OPTION_ClearAllBlankLines = "net.sourceforge.phpeclipse.core.formatter.newline.clearAll"; //$NON-NLS-1$ - public static final String OPTION_SplitLineExceedingLength = "net.sourceforge.phpeclipse.core.formatter.lineSplit"; //$NON-NLS-1$ - public static final String OPTION_CompactAssignment = "net.sourceforge.phpeclipse.core.formatter.style.assignment"; //$NON-NLS-1$ - public static final String OPTION_TabulationChar = "net.sourceforge.phpeclipse.core.formatter.tabulation.char"; //$NON-NLS-1$ - public static final String OPTION_TabulationSize = "net.sourceforge.phpeclipse.core.formatter.tabulation.size"; //$NON-NLS-1$ - public static final String OPTION_CompactDereferencing = "net.sourceforge.phpeclipse.core.formatter.style.assignment"; + public static final String OPTION_InsertNewlineBeforeOpeningBrace = "net.sourceforge.phpeclipse.formatter.newline.openingBrace"; //$NON-NLS-1$ + public static final String OPTION_InsertNewlineInControlStatement = "net.sourceforge.phpeclipse.formatter.newline.controlStatement"; //$NON-NLS-1$ + // public static final String OPTION_InsertNewLineBetweenElseAndIf = "net.sourceforge.phpeclipse.formatter.newline.elseIf"; //$NON-NLS-1$ + public static final String OPTION_InsertNewLineInEmptyBlock = "net.sourceforge.phpeclipse.formatter.newline.emptyBlock"; //$NON-NLS-1$ + public static final String OPTION_ClearAllBlankLines = "net.sourceforge.phpeclipse.formatter.newline.clearAll"; //$NON-NLS-1$ + public static final String OPTION_SplitLineExceedingLength = "net.sourceforge.phpeclipse.formatter.lineSplit"; //$NON-NLS-1$ + public static final String OPTION_CompactAssignment = "net.sourceforge.phpeclipse.formatter.style.assignment"; //$NON-NLS-1$ + public static final String OPTION_TabulationChar = "net.sourceforge.phpeclipse.formatter.tabulation.char"; //$NON-NLS-1$ + public static final String OPTION_TabulationSize = "net.sourceforge.phpeclipse.formatter.tabulation.size"; //$NON-NLS-1$ + public static final String OPTION_CompactDereferencing = "net.sourceforge.phpeclipse.formatter.style.assignment"; // TODO: add the checkbox in the preferences panel ; load/save public static final String INSERT = "insert"; //$NON-NLS-1$ diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/actions/AddBlockCommentAction.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/actions/AddBlockCommentAction.java index b5d959a..1567bca 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/actions/AddBlockCommentAction.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/actions/AddBlockCommentAction.java @@ -112,7 +112,7 @@ public class AddBlockCommentAction extends BlockCommentAction { boolean wasJavadoc= false; // true if the previous partition is javadoc - if (partType == IPHPPartitions.PHP_MULTILINE_COMMENT) { + if (partType == IPHPPartitions.PHP_PHPDOC_COMMENT) { wasJavadoc= true; @@ -138,7 +138,7 @@ public class AddBlockCommentAction extends BlockCommentAction { } else { // !wasJavadoc - if (partType == IPHPPartitions.PHP_MULTILINE_COMMENT) { + if (partType == IPHPPartitions.PHP_PHPDOC_COMMENT) { // if next is javadoc, end block comment before edits.add(factory.createEdit(partition.getOffset(), 0, getCommentEnd())); // } else if (partType == IJavaPartitions.JAVA_MULTI_LINE_COMMENT) { @@ -182,7 +182,7 @@ public class AddBlockCommentAction extends BlockCommentAction { private boolean isSpecialPartition(String partType) { return// partType == IPHPPartitions.PHP_CHARACTER //|| - partType == IPHPPartitions.PHP_STRING; + partType == IPHPPartitions.PHP_STRING_DQ; //|| partType == IPHPPartitions.PHP_SINGLE_LINE_COMMENT; } diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/actions/RemoveBlockCommentAction.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/actions/RemoveBlockCommentAction.java index 562c26a..60eadc2 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/actions/RemoveBlockCommentAction.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/actions/RemoveBlockCommentAction.java @@ -60,7 +60,7 @@ public class RemoveBlockCommentAction extends BlockCommentAction { while (partEndOffset < endOffset) { - if (partition.getType() == IPHPPartitions.PHP_MULTILINE_COMMENT) { + if (partition.getType() == IPHPPartitions.PHP_PHPDOC_COMMENT) { edits.add(factory.createEdit(partOffset, tokenLength, "")); //$NON-NLS-1$ edits.add(factory.createEdit(partEndOffset - tokenLength, tokenLength, "")); //$NON-NLS-1$ } @@ -70,7 +70,7 @@ public class RemoveBlockCommentAction extends BlockCommentAction { partEndOffset= partOffset + partition.getLength(); } - if (partition.getType() == IPHPPartitions.PHP_MULTILINE_COMMENT) { + if (partition.getType() == IPHPPartitions.PHP_PHPDOC_COMMENT) { edits.add(factory.createEdit(partOffset, tokenLength, "")); //$NON-NLS-1$ edits.add(factory.createEdit(partEndOffset - tokenLength, tokenLength, "")); //$NON-NLS-1$ } diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/JavaEditorPreferencePage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/JavaEditorPreferencePage.java index 1e949f7..a857b52 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/JavaEditorPreferencePage.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/JavaEditorPreferencePage.java @@ -289,8 +289,8 @@ public class JavaEditorPreferencePage extends PreferencePage private Button fBackgroundCustomRadioButton; private Button fBackgroundColorButton; private Button fBoldCheckBox; - // private Button fAddJavaDocTagsButton; - // private Button fEscapeStringsButton; + private Button fAddJavaDocTagsButton; + private Button fEscapeStringsButton; // private Button fGuessMethodArgumentsButton; private SourceViewer fPreviewViewer; private Color fBackgroundColor; @@ -523,12 +523,12 @@ public class JavaEditorPreferencePage extends PreferencePage .add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_SMART_PASTE)); - // overlayKeys.add(new - // OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, - // PreferenceConstants.EDITOR_CLOSE_STRINGS)); - // overlayKeys.add(new - // OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, - // PreferenceConstants.EDITOR_CLOSE_BRACKETS)); + overlayKeys.add(new + OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, + PreferenceConstants.EDITOR_CLOSE_STRINGS_PHP)); + overlayKeys.add(new + OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, + PreferenceConstants.EDITOR_CLOSE_BRACKETS_PHP)); overlayKeys .add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.BOOLEAN, @@ -540,21 +540,21 @@ public class JavaEditorPreferencePage extends PreferencePage .add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_WRAP_STRINGS)); - // overlayKeys.add(new - // OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, - // PreferenceConstants.EDITOR_ESCAPE_STRINGS)); + overlayKeys.add(new + OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, + PreferenceConstants.EDITOR_ESCAPE_STRINGS)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_ADD_JAVADOC_TAGS)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_SMART_HOME_END)); - // overlayKeys.add(new - // OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, - // PreferenceConstants.EDITOR_SUB_WORD_NAVIGATION)); - // overlayKeys.add(new - // OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, - // PreferenceConstants.EDITOR_DISABLE_OVERWRITE_MODE)); + overlayKeys.add(new + OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, + PreferenceConstants.EDITOR_SUB_WORD_NAVIGATION)); + overlayKeys.add(new + OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, + PreferenceConstants.EDITOR_DISABLE_OVERWRITE_MODE)); // overlayKeys.add(new // OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, // PreferenceConstants.EDITOR_SHOW_TEXT_HOVER_AFFORDANCE)); @@ -1151,82 +1151,82 @@ public class JavaEditorPreferencePage extends PreferencePage GridLayout layout = new GridLayout(); layout.numColumns = 1; composite.setLayout(layout); - // String label= - // PreferencesMessages.getString("JavaEditorPreferencePage.overwriteMode"); - // //$NON-NLS-1$ - // addCheckBox(composite, label, - // PreferenceConstants.EDITOR_DISABLE_OVERWRITE_MODE, 1); - // addFiller(composite); - // - // label= - // PreferencesMessages.getString("JavaEditorPreferencePage.smartHomeEnd"); - // //$NON-NLS-1$ - // addCheckBox(composite, label, PreferenceConstants.EDITOR_SMART_HOME_END, - // 1); - // - // label= - // PreferencesMessages.getString("JavaEditorPreferencePage.subWordNavigation"); - // //$NON-NLS-1$ - // addCheckBox(composite, label, - // PreferenceConstants.EDITOR_SUB_WORD_NAVIGATION, 1); - addFiller(composite); + String label= + PreferencesMessages.getString("JavaEditorPreferencePage.overwriteMode"); + //$NON-NLS-1$ + addCheckBox(composite, label, + PreferenceConstants.EDITOR_DISABLE_OVERWRITE_MODE, 1); + addFiller(composite); + + label= + PreferencesMessages.getString("JavaEditorPreferencePage.smartHomeEnd"); + //$NON-NLS-1$ + addCheckBox(composite, label, PreferenceConstants.EDITOR_SMART_HOME_END, + 1); + + label= + PreferencesMessages.getString("JavaEditorPreferencePage.subWordNavigation"); + //$NON-NLS-1$ + addCheckBox(composite, label, + PreferenceConstants.EDITOR_SUB_WORD_NAVIGATION, 1); + addFiller(composite); Group group = new Group(composite, SWT.NONE); layout = new GridLayout(); layout.numColumns = 2; group.setLayout(layout); group.setText(PreferencesMessages .getString("JavaEditorPreferencePage.typing.description")); //$NON-NLS-1$ - // label= - // PreferencesMessages.getString("JavaEditorPreferencePage.wrapStrings"); - // //$NON-NLS-1$ - // Button button= addCheckBox(group, label, - // PreferenceConstants.EDITOR_WRAP_STRINGS, 1); - // - // label= - // PreferencesMessages.getString("JavaEditorPreferencePage.escapeStrings"); - // //$NON-NLS-1$ - // fEscapeStringsButton= addCheckBox(group, label, - // PreferenceConstants.EDITOR_ESCAPE_STRINGS, 1); - // createDependency(button, fEscapeStringsButton); - // - // label= - // PreferencesMessages.getString("JavaEditorPreferencePage.smartPaste"); - // //$NON-NLS-1$ - // addCheckBox(group, label, PreferenceConstants.EDITOR_SMART_PASTE, 1); - // - // label= - // PreferencesMessages.getString("JavaEditorPreferencePage.insertSpaceForTabs"); - // //$NON-NLS-1$ - // addCheckBox(group, label, PreferenceConstants.EDITOR_SPACES_FOR_TABS, - // 1); - // - // label= - // PreferencesMessages.getString("JavaEditorPreferencePage.closeStrings"); - // //$NON-NLS-1$ - // addCheckBox(group, label, PreferenceConstants.EDITOR_CLOSE_STRINGS, 1); - // - // label= - // PreferencesMessages.getString("JavaEditorPreferencePage.closeBrackets"); - // //$NON-NLS-1$ - // addCheckBox(group, label, PreferenceConstants.EDITOR_CLOSE_BRACKETS, 1); - // - // label= - // PreferencesMessages.getString("JavaEditorPreferencePage.closeBraces"); - // //$NON-NLS-1$ - // addCheckBox(group, label, PreferenceConstants.EDITOR_CLOSE_BRACES, 1); - // - // label= - // PreferencesMessages.getString("JavaEditorPreferencePage.closeJavaDocs"); - // //$NON-NLS-1$ - // button= addCheckBox(group, label, - // PreferenceConstants.EDITOR_CLOSE_JAVADOCS, 1); - // - // label= - // PreferencesMessages.getString("JavaEditorPreferencePage.addJavaDocTags"); - // //$NON-NLS-1$ - // fAddJavaDocTagsButton= addCheckBox(group, label, - // PreferenceConstants.EDITOR_ADD_JAVADOC_TAGS, 1); - // createDependency(button, fAddJavaDocTagsButton); + label= + PreferencesMessages.getString("JavaEditorPreferencePage.wrapStrings"); + //$NON-NLS-1$ + Button button= addCheckBox(group, label, + PreferenceConstants.EDITOR_WRAP_STRINGS, 1); + + label= + PreferencesMessages.getString("JavaEditorPreferencePage.escapeStrings"); + //$NON-NLS-1$ + fEscapeStringsButton= addCheckBox(group, label, + PreferenceConstants.EDITOR_ESCAPE_STRINGS, 1); + createDependency(button, fEscapeStringsButton); + + label= + PreferencesMessages.getString("JavaEditorPreferencePage.smartPaste"); + //$NON-NLS-1$ + addCheckBox(group, label, PreferenceConstants.EDITOR_SMART_PASTE, 1); + + label= + PreferencesMessages.getString("JavaEditorPreferencePage.insertSpaceForTabs"); + //$NON-NLS-1$ + addCheckBox(group, label, PreferenceConstants.EDITOR_SPACES_FOR_TABS, + 1); + + label= + PreferencesMessages.getString("JavaEditorPreferencePage.closeStrings"); + //$NON-NLS-1$ + addCheckBox(group, label, PreferenceConstants.EDITOR_CLOSE_STRINGS_PHP, 1); + + label= + PreferencesMessages.getString("JavaEditorPreferencePage.closeBrackets"); + //$NON-NLS-1$ + addCheckBox(group, label, PreferenceConstants.EDITOR_CLOSE_BRACKETS_PHP, 1); + + label= + PreferencesMessages.getString("JavaEditorPreferencePage.closeBraces"); + //$NON-NLS-1$ + addCheckBox(group, label, PreferenceConstants.EDITOR_CLOSE_BRACES, 1); + + label= + PreferencesMessages.getString("JavaEditorPreferencePage.closeJavaDocs"); + //$NON-NLS-1$ + button= addCheckBox(group, label, + PreferenceConstants.EDITOR_CLOSE_JAVADOCS, 1); + + label= + PreferencesMessages.getString("JavaEditorPreferencePage.addJavaDocTags"); + //$NON-NLS-1$ + fAddJavaDocTagsButton= addCheckBox(group, label, + PreferenceConstants.EDITOR_ADD_JAVADOC_TAGS, 1); + createDependency(button, fAddJavaDocTagsButton); return composite; } private void addFiller(Composite composite) { @@ -1569,30 +1569,30 @@ public class JavaEditorPreferencePage extends PreferencePage item.setText(PreferencesMessages .getString("JavaEditorPreferencePage.colors")); //$NON-NLS-1$ item.setControl(createSyntaxPage(folder)); - // item= new TabItem(folder, SWT.NONE); - // item.setText(PreferencesMessages.getString("JavaEditorPreferencePage.codeAssist")); - // //$NON-NLS-1$ - // item.setControl(createContentAssistPage(folder)); + item= new TabItem(folder, SWT.NONE); + item.setText(PreferencesMessages.getString("JavaEditorPreferencePage.codeAssist")); + //$NON-NLS-1$ + item.setControl(createContentAssistPage(folder)); item = new TabItem(folder, SWT.NONE); item.setText(PreferencesMessages .getString("JavaEditorPreferencePage.annotationsTab.title")); //$NON-NLS-1$ item.setControl(createAnnotationsPage(folder)); - // item= new TabItem(folder, SWT.NONE); - // item.setText(PreferencesMessages.getString("JavaEditorPreferencePage.typing.tabTitle")); - // //$NON-NLS-1$ - // item.setControl(createTypingPage(folder)); - // - // item= new TabItem(folder, SWT.NONE); - // item.setText(PreferencesMessages.getString("JavaEditorPreferencePage.hoverTab.title")); - // //$NON-NLS-1$ - // fJavaEditorHoverConfigurationBlock= new - // JavaEditorHoverConfigurationBlock(this, fOverlayStore); - // item.setControl(fJavaEditorHoverConfigurationBlock.createControl(folder)); - // item= new TabItem(folder, SWT.NONE); - // item.setText(PreferencesMessages.getString("JavaEditorPreferencePage.navigationTab.title")); - // //$NON-NLS-1$ - // item.setControl(createNavigationPage(folder)); - // + item= new TabItem(folder, SWT.NONE); + item.setText(PreferencesMessages.getString("JavaEditorPreferencePage.typing.tabTitle")); + //$NON-NLS-1$ + item.setControl(createTypingPage(folder)); + + item= new TabItem(folder, SWT.NONE); + item.setText(PreferencesMessages.getString("JavaEditorPreferencePage.hoverTab.title")); + //$NON-NLS-1$ + fJavaEditorHoverConfigurationBlock= new + JavaEditorHoverConfigurationBlock(this, fOverlayStore); + item.setControl(fJavaEditorHoverConfigurationBlock.createControl(folder)); + item= new TabItem(folder, SWT.NONE); + item.setText(PreferencesMessages.getString("JavaEditorPreferencePage.navigationTab.title")); + //$NON-NLS-1$ + item.setControl(createNavigationPage(folder)); + initialize(); Dialog.applyDialogFont(folder); return folder; @@ -1669,10 +1669,10 @@ public class JavaEditorPreferencePage extends PreferencePage fBackgroundDefaultRadioButton.setSelection(default_); fBackgroundCustomRadioButton.setSelection(!default_); fBackgroundColorButton.setEnabled(!default_); - // boolean closeJavaDocs= - // fOverlayStore.getBoolean(PreferenceConstants.EDITOR_CLOSE_JAVADOCS); - // fAddJavaDocTagsButton.setEnabled(closeJavaDocs); - // fEscapeStringsButton.setEnabled(fOverlayStore.getBoolean(PreferenceConstants.EDITOR_WRAP_STRINGS)); + boolean closeJavaDocs= + fOverlayStore.getBoolean(PreferenceConstants.EDITOR_CLOSE_JAVADOCS); + fAddJavaDocTagsButton.setEnabled(closeJavaDocs); + fEscapeStringsButton.setEnabled(fOverlayStore.getBoolean(PreferenceConstants.EDITOR_WRAP_STRINGS)); // boolean fillMethodArguments= // fOverlayStore.getBoolean(PreferenceConstants.CODEASSIST_FILL_ARGUMENT_NAMES); // fGuessMethodArgumentsButton.setEnabled(fillMethodArguments); diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/OptionsConfigurationBlock.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/OptionsConfigurationBlock.java new file mode 100644 index 0000000..941b851 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/OptionsConfigurationBlock.java @@ -0,0 +1,476 @@ +/******************************************************************************* + * 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 v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.internal.ui.preferences; + +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map; +import java.util.StringTokenizer; + +import net.sourceforge.phpdt.core.IJavaProject; +import net.sourceforge.phpdt.core.JavaCore; +import net.sourceforge.phpdt.internal.ui.util.ExceptionHandler; +import net.sourceforge.phpdt.internal.ui.wizards.IStatusChangeListener; +import net.sourceforge.phpeclipse.PHPeclipsePlugin; + +import org.eclipse.core.resources.IncrementalProjectBuilder; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.dialogs.ProgressMonitorDialog; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; +import org.eclipse.swt.widgets.Widget; + +/** + */ +public abstract class OptionsConfigurationBlock { + + protected static class ControlData { + private String fKey; + private String[] fValues; + + public ControlData(String key, String[] values) { + fKey= key; + fValues= values; + } + + public String getKey() { + return fKey; + } + + public String getValue(boolean selection) { + int index= selection ? 0 : 1; + return fValues[index]; + } + + public String getValue(int index) { + return fValues[index]; + } + + public int getSelection(String value) { + for (int i= 0; i < fValues.length; i++) { + if (value.equals(fValues[i])) { + return i; + } + } + return 0; + } + } + + + protected Map fWorkingValues; + + protected ArrayList fCheckBoxes; + protected ArrayList fComboBoxes; + protected ArrayList fTextBoxes; + protected HashMap fLabels; + + private SelectionListener fSelectionListener; + private ModifyListener fTextModifyListener; + + protected IStatusChangeListener fContext; + protected IJavaProject fProject; // project or null + + private Shell fShell; + + public OptionsConfigurationBlock(IStatusChangeListener context, IJavaProject project) { + fContext= context; + fProject= project; + + fWorkingValues= getOptions(true); + + fCheckBoxes= new ArrayList(); + fComboBoxes= new ArrayList(); + fTextBoxes= new ArrayList(2); + fLabels= new HashMap(); + } + + protected abstract String[] getAllKeys(); + + protected Map getOptions(boolean inheritJavaCoreOptions) { + if (fProject != null) { + return fProject.getOptions(inheritJavaCoreOptions); + } else { + return JavaCore.getOptions(); + } + } + + protected Map getDefaultOptions() { + return JavaCore.getDefaultOptions(); + } + + public final boolean hasProjectSpecificOptions() { + if (fProject != null) { + Map settings= fProject.getOptions(false); + String[] allKeys= getAllKeys(); + for (int i= 0; i < allKeys.length; i++) { + if (settings.get(allKeys[i]) != null) { + return true; + } + } + } + return false; + } + + protected void setOptions(Map map) { + if (fProject != null) { + fProject.setOptions(map); + } else { + JavaCore.setOptions((Hashtable) map); + } + } + + protected Shell getShell() { + return fShell; + } + + protected void setShell(Shell shell) { + fShell= shell; + } + + protected abstract Control createContents(Composite parent); + + protected Button addCheckBox(Composite parent, String label, String key, String[] values, int indent) { + ControlData data= new ControlData(key, values); + + GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL); + gd.horizontalSpan= 3; + gd.horizontalIndent= indent; + + Button checkBox= new Button(parent, SWT.CHECK); + checkBox.setText(label); + checkBox.setData(data); + checkBox.setLayoutData(gd); + checkBox.addSelectionListener(getSelectionListener()); + + String currValue= (String)fWorkingValues.get(key); + checkBox.setSelection(data.getSelection(currValue) == 0); + + fCheckBoxes.add(checkBox); + + return checkBox; + } + + protected Combo addComboBox(Composite parent, String label, String key, String[] values, String[] valueLabels, int indent) { + ControlData data= new ControlData(key, values); + + GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); + gd.horizontalIndent= indent; + + Label labelControl= new Label(parent, SWT.LEFT | SWT.WRAP); + labelControl.setText(label); + labelControl.setLayoutData(gd); + + Combo comboBox= new Combo(parent, SWT.READ_ONLY); + comboBox.setItems(valueLabels); + comboBox.setData(data); + comboBox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); + comboBox.addSelectionListener(getSelectionListener()); + + fLabels.put(comboBox, labelControl); + + Label placeHolder= new Label(parent, SWT.NONE); + placeHolder.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + String currValue= (String)fWorkingValues.get(key); + comboBox.select(data.getSelection(currValue)); + + fComboBoxes.add(comboBox); + return comboBox; + } + + protected void addInversedComboBox(Composite parent, String label, String key, String[] values, String[] valueLabels, int indent) { + ControlData data= new ControlData(key, values); + + GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); + gd.horizontalIndent= indent; + gd.horizontalSpan= 3; + + Composite composite= new Composite(parent, SWT.NONE); + GridLayout layout= new GridLayout(); + layout.marginHeight= 0; + layout.marginWidth= 0; + layout.numColumns= 2; + composite.setLayout(layout); + composite.setLayoutData(gd); + + Combo comboBox= new Combo(composite, SWT.READ_ONLY); + comboBox.setItems(valueLabels); + comboBox.setData(data); + comboBox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); + comboBox.addSelectionListener(getSelectionListener()); + + Label labelControl= new Label(composite, SWT.LEFT | SWT.WRAP); + labelControl.setText(label); + labelControl.setLayoutData(new GridData()); + + fLabels.put(comboBox, labelControl); + + String currValue= (String)fWorkingValues.get(key); + comboBox.select(data.getSelection(currValue)); + + fComboBoxes.add(comboBox); + } + + protected Text addTextField(Composite parent, String label, String key, int indent, int widthHint) { + Label labelControl= new Label(parent, SWT.NONE); + labelControl.setText(label); + labelControl.setLayoutData(new GridData()); + + Text textBox= new Text(parent, SWT.BORDER | SWT.SINGLE); + textBox.setData(key); + textBox.setLayoutData(new GridData()); + + fLabels.put(textBox, labelControl); + + String currValue= (String) fWorkingValues.get(key); + textBox.setText(currValue); + textBox.addModifyListener(getTextModifyListener()); + + GridData data= new GridData(GridData.HORIZONTAL_ALIGN_FILL); + if (widthHint != 0) { + data.widthHint= widthHint; + } + data.horizontalIndent= indent; + data.horizontalSpan= 2; + textBox.setLayoutData(data); + + fTextBoxes.add(textBox); + return textBox; + } + + protected SelectionListener getSelectionListener() { + if (fSelectionListener == null) { + fSelectionListener= new SelectionListener() { + public void widgetDefaultSelected(SelectionEvent e) {} + + public void widgetSelected(SelectionEvent e) { + controlChanged(e.widget); + } + }; + } + return fSelectionListener; + } + + protected ModifyListener getTextModifyListener() { + if (fTextModifyListener == null) { + fTextModifyListener= new ModifyListener() { + public void modifyText(ModifyEvent e) { + textChanged((Text) e.widget); + } + }; + } + return fTextModifyListener; + } + + protected void controlChanged(Widget widget) { + ControlData data= (ControlData) widget.getData(); + String newValue= null; + if (widget instanceof Button) { + newValue= data.getValue(((Button)widget).getSelection()); + } else if (widget instanceof Combo) { + newValue= data.getValue(((Combo)widget).getSelectionIndex()); + } else { + return; + } + fWorkingValues.put(data.getKey(), newValue); + + validateSettings(data.getKey(), newValue); + } + + protected void textChanged(Text textControl) { + String key= (String) textControl.getData(); + String number= textControl.getText(); + fWorkingValues.put(key, number); + validateSettings(key, number); + } + + protected boolean checkValue(String key, String value) { + return value.equals(fWorkingValues.get(key)); + } + + /* (non-javadoc) + * Update fields and validate. + * @param changedKey Key that changed, or null, if all changed. + */ + protected abstract void validateSettings(String changedKey, String newValue); + + + protected String[] getTokens(String text, String separator) { + StringTokenizer tok= new StringTokenizer(text, separator); //$NON-NLS-1$ + int nTokens= tok.countTokens(); + String[] res= new String[nTokens]; + for (int i= 0; i < res.length; i++) { + res[i]= tok.nextToken().trim(); + } + return res; + } + + + public boolean performOk(boolean enabled) { + String[] allKeys= getAllKeys(); + Map actualOptions= getOptions(false); + + // preserve other options + boolean hasChanges= false; + for (int i= 0; i < allKeys.length; i++) { + String key= allKeys[i]; + String oldVal= (String) actualOptions.get(key); + String val= null; + if (enabled) { + val= (String) fWorkingValues.get(key); + if (!val.equals(oldVal)) { + hasChanges= true; + actualOptions.put(key, val); + } + } else { + if (oldVal != null) { + actualOptions.remove(key); + hasChanges= true; + } + } + } + + + if (hasChanges) { + boolean doBuild= false; + String[] strings= getFullBuildDialogStrings(fProject == null); + if (strings != null) { + MessageDialog dialog= new MessageDialog(getShell(), strings[0], null, strings[1], MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL }, 2); + int res= dialog.open(); + if (res == 0) { + doBuild= true; + } else if (res != 1) { + return false; // cancel pressed + } + } + setOptions(actualOptions); + if (doBuild) { + doFullBuild(); + } + } + return true; + } + + protected abstract String[] getFullBuildDialogStrings(boolean workspaceSettings); + + protected void doFullBuild() { + ProgressMonitorDialog dialog= new ProgressMonitorDialog(getShell()); + try { + dialog.run(true, true, new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) throws InvocationTargetException { + monitor.beginTask("", 2); //$NON-NLS-1$ + try { + if (fProject != null) { + monitor.setTaskName(PreferencesMessages.getFormattedString("OptionsConfigurationBlock.buildproject.taskname", fProject.getElementName())); //$NON-NLS-1$ + fProject.getProject().build(IncrementalProjectBuilder.FULL_BUILD, new SubProgressMonitor(monitor,1)); + PHPeclipsePlugin.getWorkspace().build(IncrementalProjectBuilder.INCREMENTAL_BUILD, new SubProgressMonitor(monitor,1)); + } else { + monitor.setTaskName(PreferencesMessages.getString("OptionsConfigurationBlock.buildall.taskname")); //$NON-NLS-1$ + PHPeclipsePlugin.getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, new SubProgressMonitor(monitor, 2)); + } + } catch (CoreException e) { + throw new InvocationTargetException(e); + } finally { + monitor.done(); + } + } + }); + } catch (InterruptedException e) { + // cancelled by user + } catch (InvocationTargetException e) { + String title= PreferencesMessages.getString("OptionsConfigurationBlock.builderror.title"); //$NON-NLS-1$ + String message= PreferencesMessages.getString("OptionsConfigurationBlock.builderror.message"); //$NON-NLS-1$ + ExceptionHandler.handle(e, getShell(), title, message); + } + } + + public void performDefaults() { + fWorkingValues= getDefaultOptions(); + updateControls(); + validateSettings(null, null); + } + + protected void updateControls() { + // update the UI + for (int i= fCheckBoxes.size() - 1; i >= 0; i--) { + Button curr= (Button) fCheckBoxes.get(i); + ControlData data= (ControlData) curr.getData(); + + String currValue= (String) fWorkingValues.get(data.getKey()); + curr.setSelection(data.getSelection(currValue) == 0); + } + for (int i= fComboBoxes.size() - 1; i >= 0; i--) { + Combo curr= (Combo) fComboBoxes.get(i); + ControlData data= (ControlData) curr.getData(); + + String currValue= (String) fWorkingValues.get(data.getKey()); + curr.select(data.getSelection(currValue)); + } + for (int i= fTextBoxes.size() - 1; i >= 0; i--) { + Text curr= (Text) fTextBoxes.get(i); + String key= (String) curr.getData(); + + String currValue= (String) fWorkingValues.get(key); + curr.setText(currValue); + } + } + + protected Button getCheckBox(String key) { + for (int i= fCheckBoxes.size() - 1; i >= 0; i--) { + Button curr= (Button) fCheckBoxes.get(i); + ControlData data= (ControlData) curr.getData(); + if (key.equals(data.getKey())) { + return curr; + } + } + return null; + } + + protected Combo getComboBox(String key) { + for (int i= fComboBoxes.size() - 1; i >= 0; i--) { + Combo curr= (Combo) fComboBoxes.get(i); + ControlData data= (ControlData) curr.getData(); + if (key.equals(data.getKey())) { + return curr; + } + } + return null; + } + + protected void setComboEnabled(String key, boolean enabled) { + Combo combo= getComboBox(key); + Label label= (Label) fLabels.get(combo); + combo.setEnabled(enabled); + label.setEnabled(enabled); + } + + + +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/PHPEditorPreferencePage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/PHPEditorPreferencePage.java index 569458b..902a866 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/PHPEditorPreferencePage.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/PHPEditorPreferencePage.java @@ -1507,6 +1507,7 @@ public class PHPEditorPreferencePage extends PreferencePage PreferenceConstants.EDITOR_CLOSE_BRACKETS_HTML, 1); return composite; } + private static void indent(Control control) { GridData gridData = new GridData(); gridData.horizontalIndent = 20; @@ -1635,6 +1636,7 @@ public class PHPEditorPreferencePage extends PreferencePage * @see PreferencePage#createContents(Composite) */ protected Control createContents(Composite parent) { + initializeDefaultColors(); fOverlayStore.load(); fOverlayStore.start(); TabFolder folder = new TabFolder(parent, SWT.NONE); @@ -1657,12 +1659,12 @@ public class PHPEditorPreferencePage extends PreferencePage item.setText(PHPUIMessages .getString("PHPEditorPreferencePage.behaviourTab.title")); //$NON-NLS-1$ item.setControl(createBehaviourPage(folder)); - // item= new TabItem(folder, SWT.NONE); - // item.setText(PHPUIMessages.getString("PHPEditorPreferencePage.hoverTab.title")); - // //$NON-NLS-1$ - // fJavaEditorHoverConfigurationBlock= new - // JavaEditorHoverConfigurationBlock(fOverlayStore); - // item.setControl(fJavaEditorHoverConfigurationBlock.createControl(folder)); + item= new TabItem(folder, SWT.NONE); + item.setText(PHPUIMessages.getString("PHPEditorPreferencePage.hoverTab.title")); + //$NON-NLS-1$ +// fJavaEditorHoverConfigurationBlock= new +// JavaEditorHoverConfigurationBlock(fOverlayStore); +// item.setControl(fJavaEditorHoverConfigurationBlock.createControl(folder)); initialize(); return folder; } @@ -1750,6 +1752,20 @@ public class PHPEditorPreferencePage extends PreferencePage updateAutoactivationControls(); // fJavaEditorHoverConfigurationBlock.initializeFields(); } + + private void initializeDefaultColors() { + if (!getPreferenceStore().contains(PreferenceConstants.EDITOR_BACKGROUND_COLOR)) { + RGB rgb= getControl().getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND).getRGB(); + PreferenceConverter.setDefault(fOverlayStore, PreferenceConstants.EDITOR_BACKGROUND_COLOR, rgb); + PreferenceConverter.setDefault(getPreferenceStore(), PreferenceConstants.EDITOR_BACKGROUND_COLOR, rgb); + } + if (!getPreferenceStore().contains(PreferenceConstants.EDITOR_FOREGROUND_COLOR)) { + RGB rgb= getControl().getDisplay().getSystemColor(SWT.COLOR_LIST_FOREGROUND).getRGB(); + PreferenceConverter.setDefault(fOverlayStore, PreferenceConstants.EDITOR_FOREGROUND_COLOR, rgb); + PreferenceConverter.setDefault(getPreferenceStore(), PreferenceConstants.EDITOR_FOREGROUND_COLOR, rgb); + } + } + private void updateAutoactivationControls() { boolean autoactivation = fOverlayStore .getBoolean(PreferenceConstants.CODEASSIST_AUTOACTIVATION); diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskConfigurationBlock.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskConfigurationBlock.java new file mode 100644 index 0000000..5931d52 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskConfigurationBlock.java @@ -0,0 +1,294 @@ +/******************************************************************************* + * 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 v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.internal.ui.preferences; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.runtime.IStatus; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; + +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.window.Window; + +import net.sourceforge.phpdt.core.IJavaProject; +import net.sourceforge.phpdt.core.JavaCore; + +import net.sourceforge.phpdt.internal.ui.dialogs.StatusInfo; +import net.sourceforge.phpdt.internal.ui.wizards.IStatusChangeListener; +import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.DialogField; +import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.IDialogFieldListener; +import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.IListAdapter; +import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.LayoutUtil; +import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.ListDialogField; + +/** + */ +public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock { + + private static final String PREF_COMPILER_TASK_TAGS= JavaCore.COMPILER_TASK_TAGS; + private static final String PREF_COMPILER_TASK_PRIORITIES= JavaCore.COMPILER_TASK_PRIORITIES; + + private static final String PRIORITY_HIGH= JavaCore.COMPILER_TASK_PRIORITY_HIGH; + private static final String PRIORITY_NORMAL= JavaCore.COMPILER_TASK_PRIORITY_NORMAL; + private static final String PRIORITY_LOW= JavaCore.COMPILER_TASK_PRIORITY_LOW; + + public static class TodoTask { + public String name; + public String priority; + } + + private static class TodoTaskLabelProvider extends LabelProvider implements ITableLabelProvider { + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object) + */ + public Image getImage(Object element) { + return null; // JavaPluginImages.get(JavaPluginImages.IMG_OBJS_REFACTORING_INFO); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object) + */ + public String getText(Object element) { + return getColumnText(element, 0); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int) + */ + public Image getColumnImage(Object element, int columnIndex) { + return null; + } + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int) + */ + public String getColumnText(Object element, int columnIndex) { + TodoTask task= (TodoTask) element; + if (columnIndex == 0) { + return task.name; + } else { + if (PRIORITY_HIGH.equals(task.priority)) { + return PreferencesMessages.getString("TodoTaskConfigurationBlock.markers.tasks.high.priority"); //$NON-NLS-1$ + } else if (PRIORITY_NORMAL.equals(task.priority)) { + return PreferencesMessages.getString("TodoTaskConfigurationBlock.markers.tasks.normal.priority"); //$NON-NLS-1$ + } else if (PRIORITY_LOW.equals(task.priority)) { + return PreferencesMessages.getString("TodoTaskConfigurationBlock.markers.tasks.low.priority"); //$NON-NLS-1$ + } + return ""; //$NON-NLS-1$ + } + } + + } + + private static final int IDX_ADD= 0; + private static final int IDX_EDIT= 1; + private static final int IDX_REMOVE= 2; + + private IStatus fTaskTagsStatus; + private ListDialogField fTodoTasksList; + + public TodoTaskConfigurationBlock(IStatusChangeListener context, IJavaProject project) { + super(context, project); + + TaskTagAdapter adapter= new TaskTagAdapter(); + String[] buttons= new String[] { + /* 0 */ PreferencesMessages.getString("TodoTaskConfigurationBlock.markers.tasks.add.button"), //$NON-NLS-1$ + /* 1 */ PreferencesMessages.getString("TodoTaskConfigurationBlock.markers.tasks.edit.button"), //$NON-NLS-1$ + /* 2 */ PreferencesMessages.getString("TodoTaskConfigurationBlock.markers.tasks.remove.button"), //$NON-NLS-1$ + + }; + fTodoTasksList= new ListDialogField(adapter, buttons, new TodoTaskLabelProvider()); + fTodoTasksList.setDialogFieldListener(adapter); + fTodoTasksList.setLabelText(PreferencesMessages.getString("TodoTaskConfigurationBlock.markers.tasks.label")); //$NON-NLS-1$ + fTodoTasksList.setRemoveButtonIndex(IDX_REMOVE); + + String[] columnsHeaders= new String[] { + PreferencesMessages.getString("TodoTaskConfigurationBlock.markers.tasks.name.column"), //$NON-NLS-1$ + PreferencesMessages.getString("TodoTaskConfigurationBlock.markers.tasks.priority.column"), //$NON-NLS-1$ + }; + + fTodoTasksList.setTableColumns(new ListDialogField.ColumnsDescription(columnsHeaders, true)); + unpackTodoTasks(); + if (fTodoTasksList.getSize() > 0) { + fTodoTasksList.selectFirstElement(); + } else { + fTodoTasksList.enableButton(IDX_EDIT, false); + } + + fTaskTagsStatus= new StatusInfo(); + } + + protected final String[] getAllKeys() { + return new String[] { + PREF_COMPILER_TASK_TAGS, PREF_COMPILER_TASK_PRIORITIES + }; + } + + public class TaskTagAdapter implements IListAdapter, IDialogFieldListener { + + private boolean canEdit(ListDialogField field) { + return field.getSelectedElements().size() == 1; + } + + public void customButtonPressed(ListDialogField field, int index) { + doTodoButtonPressed(index); + } + + public void selectionChanged(ListDialogField field) { + field.enableButton(IDX_EDIT, canEdit(field)); + } + + public void doubleClicked(ListDialogField field) { + if (canEdit(field)) { + doTodoButtonPressed(IDX_EDIT); + } + } + + public void dialogFieldChanged(DialogField field) { + validateSettings(PREF_COMPILER_TASK_TAGS, null); + } + + } + + protected Control createContents(Composite parent) { + setShell(parent.getShell()); + + Composite markersComposite= createMarkersTabContent(parent); + + validateSettings(null, null); + + return markersComposite; + } + + private Composite createMarkersTabContent(Composite folder) { + + GridLayout layout= new GridLayout(); + layout.marginHeight= 0; + layout.marginWidth= 0; + layout.numColumns= 2; + + Composite markersComposite= new Composite(folder, SWT.NULL); + markersComposite.setLayout(layout); + + fTodoTasksList.doFillIntoGrid(markersComposite, 3); + LayoutUtil.setHorizontalSpan(fTodoTasksList.getLabelControl(null), 2); + + GridData data= (GridData)fTodoTasksList.getListControl(null).getLayoutData(); + data.grabExcessHorizontalSpace= true; + data.grabExcessVerticalSpace= true; + data.verticalAlignment= GridData.FILL; + //data.heightHint= SWTUtil.getTableHeightHint(table, 6); + + return markersComposite; + } + + protected void validateSettings(String changedKey, String newValue) { + if (changedKey != null) { + if (PREF_COMPILER_TASK_TAGS.equals(changedKey)) { + fTaskTagsStatus= validateTaskTags(); + } else { + return; + } + } else { + fTaskTagsStatus= validateTaskTags(); + } + IStatus status= fTaskTagsStatus; //StatusUtil.getMostSevere(new IStatus[] { fTaskTagsStatus }); + fContext.statusChanged(status); + } + + private IStatus validateTaskTags() { + return new StatusInfo(); + } + + /* (non-Javadoc) + * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#performOk(boolean) + */ + public boolean performOk(boolean enabled) { + packTodoTasks(); + return super.performOk(enabled); + } + + + protected String[] getFullBuildDialogStrings(boolean workspaceSettings) { + String title= PreferencesMessages.getString("TodoTaskConfigurationBlock.needsbuild.title"); //$NON-NLS-1$ + String message; + if (fProject == null) { + message= PreferencesMessages.getString("TodoTaskConfigurationBlock.needsfullbuild.message"); //$NON-NLS-1$ + } else { + message= PreferencesMessages.getString("TodoTaskConfigurationBlock.needsprojectbuild.message"); //$NON-NLS-1$ + } + return new String[] { title, message }; + } + + /* (non-Javadoc) + * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#updateControls() + */ + protected void updateControls() { + unpackTodoTasks(); + } + + private void unpackTodoTasks() { + String currTags= (String) fWorkingValues.get(PREF_COMPILER_TASK_TAGS); + String currPrios= (String) fWorkingValues.get(PREF_COMPILER_TASK_PRIORITIES); + String[] tags= getTokens(currTags, ","); //$NON-NLS-1$ + String[] prios= getTokens(currPrios, ","); //$NON-NLS-1$ + ArrayList elements= new ArrayList(tags.length); + for (int i= 0; i < tags.length; i++) { + TodoTask task= new TodoTask(); + task.name= tags[i].trim(); + task.priority= (i < prios.length) ? prios[i] : PRIORITY_NORMAL; + elements.add(task); + } + fTodoTasksList.setElements(elements); + } + + private void packTodoTasks() { + StringBuffer tags= new StringBuffer(); + StringBuffer prios= new StringBuffer(); + List list= fTodoTasksList.getElements(); + for (int i= 0; i < list.size(); i++) { + if (i > 0) { + tags.append(','); + prios.append(','); + } + TodoTask elem= (TodoTask) list.get(i); + tags.append(elem.name); + prios.append(elem.priority); + } + fWorkingValues.put(PREF_COMPILER_TASK_TAGS, tags.toString()); + fWorkingValues.put(PREF_COMPILER_TASK_PRIORITIES, prios.toString()); + } + + private void doTodoButtonPressed(int index) { + TodoTask edited= null; + if (index != IDX_ADD) { + edited= (TodoTask) fTodoTasksList.getSelectedElements().get(0); + } + + TodoTaskInputDialog dialog= new TodoTaskInputDialog(getShell(), edited, fTodoTasksList.getElements()); + if (dialog.open() == Window.OK) { + if (edited != null) { + fTodoTasksList.replaceElement(edited, dialog.getResult()); + } else { + fTodoTasksList.addElement(dialog.getResult()); + } + } + } + +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskInputDialog.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskInputDialog.java new file mode 100644 index 0000000..e6aaf30 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskInputDialog.java @@ -0,0 +1,162 @@ +/******************************************************************************* + * 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 v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.internal.ui.preferences; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Shell; + +import org.eclipse.ui.help.WorkbenchHelp; + +import net.sourceforge.phpdt.core.JavaCore; + +import net.sourceforge.phpdt.internal.ui.IJavaHelpContextIds; +import net.sourceforge.phpdt.internal.ui.dialogs.StatusDialog; +import net.sourceforge.phpdt.internal.ui.dialogs.StatusInfo; +import net.sourceforge.phpdt.internal.ui.preferences.TodoTaskConfigurationBlock.TodoTask; +import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.ComboDialogField; +import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.DialogField; +import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.IDialogFieldListener; +import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.LayoutUtil; +import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.StringDialogField; + +/** + * Dialog to enter a na new task tag + */ +public class TodoTaskInputDialog extends StatusDialog { + + private class CompilerTodoTaskInputAdapter implements IDialogFieldListener { + public void dialogFieldChanged(DialogField field) { + doValidation(); + } + } + + private StringDialogField fNameDialogField; + private ComboDialogField fPriorityDialogField; + + private List fExistingNames; + + public TodoTaskInputDialog(Shell parent, TodoTask task, List existingEntries) { + super(parent); + + fExistingNames= new ArrayList(existingEntries.size()); + for (int i= 0; i < existingEntries.size(); i++) { + TodoTask curr= (TodoTask) existingEntries.get(i); + if (!curr.equals(task)) { + fExistingNames.add(curr.name); + } + } + + if (task == null) { + setTitle(PreferencesMessages.getString("TodoTaskInputDialog.new.title")); //$NON-NLS-1$ + } else { + setTitle(PreferencesMessages.getString("TodoTaskInputDialog.edit.title")); //$NON-NLS-1$ + } + + CompilerTodoTaskInputAdapter adapter= new CompilerTodoTaskInputAdapter(); + + fNameDialogField= new StringDialogField(); + fNameDialogField.setLabelText(PreferencesMessages.getString("TodoTaskInputDialog.name.label")); //$NON-NLS-1$ + fNameDialogField.setDialogFieldListener(adapter); + + fNameDialogField.setText((task != null) ? task.name : ""); //$NON-NLS-1$ + + String[] items= new String[] { + PreferencesMessages.getString("TodoTaskInputDialog.priority.high"), //$NON-NLS-1$ + PreferencesMessages.getString("TodoTaskInputDialog.priority.normal"), //$NON-NLS-1$ + PreferencesMessages.getString("TodoTaskInputDialog.priority.low") //$NON-NLS-1$ + }; + + fPriorityDialogField= new ComboDialogField(SWT.READ_ONLY); + fPriorityDialogField.setLabelText(PreferencesMessages.getString("TodoTaskInputDialog.priority.label")); //$NON-NLS-1$ + fPriorityDialogField.setItems(items); + if (task != null) { + if (JavaCore.COMPILER_TASK_PRIORITY_HIGH.equals(task.priority)) { + fPriorityDialogField.selectItem(0); + } else if (JavaCore.COMPILER_TASK_PRIORITY_NORMAL.equals(task.priority)) { + fPriorityDialogField.selectItem(1); + } else { + fPriorityDialogField.selectItem(2); + } + } else { + fPriorityDialogField.selectItem(1); + } + } + + public TodoTask getResult() { + TodoTask task= new TodoTask(); + task.name= fNameDialogField.getText().trim(); + switch (fPriorityDialogField.getSelectionIndex()) { + case 0 : + task.priority= JavaCore.COMPILER_TASK_PRIORITY_HIGH; + break; + case 1 : + task.priority= JavaCore.COMPILER_TASK_PRIORITY_NORMAL; + break; + default : + task.priority= JavaCore.COMPILER_TASK_PRIORITY_LOW; + break; + } + return task; + } + + protected Control createDialogArea(Composite parent) { + Composite composite= (Composite) super.createDialogArea(parent); + + Composite inner= new Composite(composite, SWT.NONE); + GridLayout layout= new GridLayout(); + layout.marginHeight= 0; + layout.marginWidth= 0; + layout.numColumns= 2; + inner.setLayout(layout); + + fNameDialogField.doFillIntoGrid(inner, 2); + fPriorityDialogField.doFillIntoGrid(inner, 2); + + LayoutUtil.setHorizontalGrabbing(fNameDialogField.getTextControl(null)); + LayoutUtil.setWidthHint(fNameDialogField.getTextControl(null), convertWidthInCharsToPixels(45)); + + fNameDialogField.postSetFocusOnDialogField(parent.getDisplay()); + + applyDialogFont(composite); + return composite; + } + + private void doValidation() { + StatusInfo status= new StatusInfo(); + String newText= fNameDialogField.getText(); + if (newText.length() == 0) { + status.setError(PreferencesMessages.getString("TodoTaskInputDialog.error.enterName")); //$NON-NLS-1$ + } else { + if (newText.indexOf(',') != -1) { + status.setError(PreferencesMessages.getString("TodoTaskInputDialog.error.comma")); //$NON-NLS-1$ + } else if (fExistingNames.contains(newText)) { + status.setError(PreferencesMessages.getString("TodoTaskInputDialog.error.entryExists")); //$NON-NLS-1$ + } else if (Character.isWhitespace(newText.charAt(0)) || Character.isWhitespace(newText.charAt(newText.length() - 1))) { + status.setError(PreferencesMessages.getString("TodoTaskInputDialog.error.noSpace")); //$NON-NLS-1$ + } + } + updateStatus(status); + } + + /* + * @see org.eclipse.jface.window.Window#configureShell(Shell) + */ + protected void configureShell(Shell newShell) { + super.configureShell(newShell); + WorkbenchHelp.setHelp(newShell, IJavaHelpContextIds.TODO_TASK_INPUT_DIALOG); + } +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskPreferencePage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskPreferencePage.java new file mode 100644 index 0000000..5d7c765 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskPreferencePage.java @@ -0,0 +1,96 @@ +/******************************************************************************* + * 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 v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.internal.ui.preferences; + +import net.sourceforge.phpdt.internal.ui.IJavaHelpContextIds; +import net.sourceforge.phpdt.internal.ui.dialogs.StatusUtil; +import net.sourceforge.phpdt.internal.ui.wizards.IStatusChangeListener; +import net.sourceforge.phpeclipse.PHPeclipsePlugin; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.preference.PreferencePage; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; +import org.eclipse.ui.help.WorkbenchHelp; + +/* + * The page to configure the compiler options. + */ +public class TodoTaskPreferencePage extends PreferencePage implements IWorkbenchPreferencePage, IStatusChangeListener { + + public static final String ID= "org.eclipse.jdt.ui.preferences.TodoTaskPreferencePage"; //$NON-NLS-1$ + + private TodoTaskConfigurationBlock fConfigurationBlock; + + public TodoTaskPreferencePage() { + setPreferenceStore(PHPeclipsePlugin.getDefault().getPreferenceStore()); + //setDescription(PreferencesMessages.getString("TodoTaskPreferencePage.description")); //$NON-NLS-1$ + + // only used when page is shown programatically + setTitle(PreferencesMessages.getString("TodoTaskPreferencePage.title")); //$NON-NLS-1$ + + fConfigurationBlock= new TodoTaskConfigurationBlock(this, null); + } + + /* + * @see IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) + */ + public void init(IWorkbench workbench) { + } + + /* + * @see PreferencePage#createControl(Composite) + */ + public void createControl(Composite parent) { + // added for 1GEUGE6: ITPJUI:WIN2000 - Help is the same on all preference pages + super.createControl(parent); + WorkbenchHelp.setHelp(getControl(), IJavaHelpContextIds.TODOTASK_PREFERENCE_PAGE); + } + + /* + * @see PreferencePage#createContents(Composite) + */ + protected Control createContents(Composite parent) { + Control result= fConfigurationBlock.createContents(parent); + Dialog.applyDialogFont(result); + return result; + } + + /* + * @see IPreferencePage#performOk() + */ + public boolean performOk() { + if (!fConfigurationBlock.performOk(true)) { + return false; + } + return super.performOk(); + } + + /* + * @see PreferencePage#performDefaults() + */ + protected void performDefaults() { + fConfigurationBlock.performDefaults(); + super.performDefaults(); + } + + /* (non-Javadoc) + * @see org.eclipse.jdt.internal.ui.wizards.IStatusChangeListener#statusChanged(org.eclipse.core.runtime.IStatus) + */ + public void statusChanged(IStatus status) { + setValid(!status.matches(IStatus.ERROR)); + StatusUtil.applyToStatusLine(this, status); + } + +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskPropertyPage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskPropertyPage.java new file mode 100644 index 0000000..a6ecaab --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskPropertyPage.java @@ -0,0 +1,220 @@ +/******************************************************************************* + * 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 v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.internal.ui.preferences; + +import org.eclipse.core.runtime.IStatus; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.BusyIndicator; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; + +import org.eclipse.jface.dialogs.ControlEnableState; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.preference.IPreferenceNode; +import org.eclipse.jface.preference.IPreferencePage; +import org.eclipse.jface.preference.PreferenceDialog; +import org.eclipse.jface.preference.PreferenceManager; +import org.eclipse.jface.preference.PreferenceNode; +import org.eclipse.jface.window.Window; + +import org.eclipse.ui.dialogs.PropertyPage; +import org.eclipse.ui.help.WorkbenchHelp; + +import net.sourceforge.phpdt.core.IJavaElement; +import net.sourceforge.phpdt.core.IJavaProject; + +import net.sourceforge.phpdt.internal.ui.IJavaHelpContextIds; +import net.sourceforge.phpdt.internal.ui.dialogs.StatusInfo; +import net.sourceforge.phpdt.internal.ui.dialogs.StatusUtil; +import net.sourceforge.phpdt.internal.ui.wizards.IStatusChangeListener; +import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.DialogField; +import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.IDialogFieldListener; +import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.LayoutUtil; +import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField; + +/** + * Property page used to configure project specific task tags settings + */ +public class TodoTaskPropertyPage extends PropertyPage { + + private TodoTaskConfigurationBlock fConfigurationBlock; + private Control fConfigurationBlockControl; + private ControlEnableState fBlockEnableState; + private SelectionButtonDialogField fUseWorkspaceSettings; + private SelectionButtonDialogField fChangeWorkspaceSettings; + private SelectionButtonDialogField fUseProjectSettings; + private IStatus fBlockStatus; + + + public TodoTaskPropertyPage() { + fBlockStatus= new StatusInfo(); + fBlockEnableState= null; + + IDialogFieldListener listener= new IDialogFieldListener() { + public void dialogFieldChanged(DialogField field) { + doDialogFieldChanged(field); + } + }; + + fUseWorkspaceSettings= new SelectionButtonDialogField(SWT.RADIO); + fUseWorkspaceSettings.setDialogFieldListener(listener); + fUseWorkspaceSettings.setLabelText(PreferencesMessages.getString("TodoTaskPropertyPage.useworkspacesettings.label")); //$NON-NLS-1$ + + fChangeWorkspaceSettings= new SelectionButtonDialogField(SWT.PUSH); + fChangeWorkspaceSettings.setLabelText(PreferencesMessages.getString("TodoTaskPropertyPage.useworkspacesettings.change")); //$NON-NLS-1$ + fChangeWorkspaceSettings.setDialogFieldListener(listener); + + fUseWorkspaceSettings.attachDialogField(fChangeWorkspaceSettings); + + fUseProjectSettings= new SelectionButtonDialogField(SWT.RADIO); + fUseProjectSettings.setDialogFieldListener(listener); + fUseProjectSettings.setLabelText(PreferencesMessages.getString("TodoTaskPropertyPage.useprojectsettings.label")); //$NON-NLS-1$ + } + + /* + * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) + */ + public void createControl(Composite parent) { + super.createControl(parent); + WorkbenchHelp.setHelp(getControl(), IJavaHelpContextIds.TODOTASK_PROPERTY_PAGE); + } + + /* + * @see org.eclipse.jface.preference.IPreferencePage#createContents(Composite) + */ + protected Control createContents(Composite parent) { + IStatusChangeListener listener= new IStatusChangeListener() { + public void statusChanged(IStatus status) { + fBlockStatus= status; + doStatusChanged(); + } + }; + fConfigurationBlock= new TodoTaskConfigurationBlock(listener, getProject()); + + Composite composite= new Composite(parent, SWT.NONE); + GridLayout layout= new GridLayout(); + layout.marginHeight= 0; + layout.marginWidth= 0; + layout.numColumns= 1; + composite.setLayout(layout); + + fUseWorkspaceSettings.doFillIntoGrid(composite, 1); + LayoutUtil.setHorizontalGrabbing(fUseWorkspaceSettings.getSelectionButton(null)); + + fChangeWorkspaceSettings.doFillIntoGrid(composite, 1); + GridData data= (GridData) fChangeWorkspaceSettings.getSelectionButton(null).getLayoutData(); + data.horizontalIndent= convertWidthInCharsToPixels(3); + data.horizontalAlignment= GridData.BEGINNING; + + fUseProjectSettings.doFillIntoGrid(composite, 1); + + data= new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL ); + data.horizontalSpan= 1; + data.horizontalIndent= convertWidthInCharsToPixels(2); + + fConfigurationBlockControl= fConfigurationBlock.createContents(composite); + fConfigurationBlockControl.setLayoutData(data); + + boolean useProjectSettings= fConfigurationBlock.hasProjectSpecificOptions(); + + fUseProjectSettings.setSelection(useProjectSettings); + fUseWorkspaceSettings.setSelection(!useProjectSettings); + + updateEnableState(); + Dialog.applyDialogFont(composite); + return composite; + } + + private boolean useProjectSettings() { + return fUseProjectSettings.isSelected(); + } + + private void doDialogFieldChanged(DialogField field) { + if (field == fChangeWorkspaceSettings) { + TodoTaskPreferencePage page= new TodoTaskPreferencePage(); + showPreferencePage(TodoTaskPreferencePage.ID, page); + } else { + updateEnableState(); + doStatusChanged(); + } + } + /** + * Method statusChanged. + */ + private void doStatusChanged() { + updateStatus(useProjectSettings() ? fBlockStatus : new StatusInfo()); + } + + /** + * Method getProject. + */ + private IJavaProject getProject() { + return (IJavaProject) getElement().getAdapter(IJavaElement.class); + } + + private void updateEnableState() { + if (useProjectSettings()) { + if (fBlockEnableState != null) { + fBlockEnableState.restore(); + fBlockEnableState= null; + } + } else { + if (fBlockEnableState == null) { + fBlockEnableState= ControlEnableState.disable(fConfigurationBlockControl); + } + } + } + + /* + * @see org.eclipse.jface.preference.IPreferencePage#performDefaults() + */ + protected void performDefaults() { + if (useProjectSettings()) { + fUseProjectSettings.setSelection(false); + fUseWorkspaceSettings.setSelection(true); + fConfigurationBlock.performDefaults(); + } + super.performDefaults(); + } + + /* + * @see org.eclipse.jface.preference.IPreferencePage#performOk() + */ + public boolean performOk() { + return fConfigurationBlock.performOk(useProjectSettings()); + } + + private void updateStatus(IStatus status) { + setValid(!status.matches(IStatus.ERROR)); + StatusUtil.applyToStatusLine(this, status); + } + + private boolean showPreferencePage(String id, IPreferencePage page) { + final IPreferenceNode targetNode = new PreferenceNode(id, page); + + PreferenceManager manager = new PreferenceManager(); + manager.addToRoot(targetNode); + final PreferenceDialog dialog = new PreferenceDialog(getShell(), manager); + final boolean [] result = new boolean[] { false }; + BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() { + public void run() { + dialog.create(); + dialog.setMessage(targetNode.getLabelText()); + result[0]= (dialog.open() == Window.OK); + } + }); + return result[0]; + } + +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/ContentAssistPreference.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/ContentAssistPreference.java index 148058e..68e60ec 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/ContentAssistPreference.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/ContentAssistPreference.java @@ -81,7 +81,7 @@ public class ContentAssistPreference { } private static PHPDocCompletionProcessor getJavaDocProcessor(ContentAssistant assistant) { - IContentAssistProcessor p = assistant.getContentAssistProcessor(IPHPPartitions.PHP_MULTILINE_COMMENT); + IContentAssistProcessor p = assistant.getContentAssistProcessor(IPHPPartitions.PHP_PHPDOC_COMMENT); if (p instanceof PHPDocCompletionProcessor) return (PHPDocCompletionProcessor) p; return null; diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/FastJavaPartitionScanner.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/FastJavaPartitionScanner.java index 41246b6..70f5461 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/FastJavaPartitionScanner.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/FastJavaPartitionScanner.java @@ -18,19 +18,21 @@ import org.eclipse.jface.text.rules.Token; */ public class FastJavaPartitionScanner implements IPartitionTokenScanner { - private final static String SKIP= "__skip"; //$NON-NLS-1$ - public final static String JAVA_STRING= "__php_string"; //$NON-NLS-1$ - public final static String JAVA_SINGLE_LINE_COMMENT= "__php_singleline_comment"; //$NON-NLS-1$ - public final static String JAVA_MULTI_LINE_COMMENT= "__php_multiline_comment"; //$NON-NLS-1$ - public final static String JAVA_DOC= "__php_phpdoc"; //$NON-NLS-1$ +// private final static String SKIP= "__skip"; //$NON-NLS-1$ +// public final static String JAVA_STRING= "__php_string"; //$NON-NLS-1$ +// public final static String JAVA_SINGLE_LINE_COMMENT= "__php_singleline_comment"; //$NON-NLS-1$ +// public final static String JAVA_MULTI_LINE_COMMENT= "__php_multiline_comment"; //$NON-NLS-1$ +// public final static String JAVA_DOC= "__php_phpdoc"; //$NON-NLS-1$ // states - private static final int JAVA= 0; - private static final int SINGLE_LINE_COMMENT= 1; + private static final int HTML= 0; + private static final int SINGLE_LINE_COMMENT= 1; private static final int MULTI_LINE_COMMENT= 2; - private static final int JAVADOC= 3; - private static final int CHARACTER= 4; - private static final int STRING= 5; + private static final int PHPDOC= 3; +// private static final int CHARACTER= 4; + private static final int STRING_SQ= 4; // single quote string + private static final int STRING_DQ= 5; // double quote string + private static final int PHP= 6; // double quote string // beginning of prefixes and postfixes private static final int NONE= 0; @@ -57,35 +59,25 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { /** The amount of characters already read on first call to nextToken(). */ private int fPrefixLength; - // emulate JavaPartitionScanner - private static final boolean fgEmulate= false; + // emulate JavaPartitionScanner +// private static final boolean fgEmulate= false; private int fJavaOffset; private int fJavaLength; private final IToken[] fTokens= new IToken[] { new Token(null), - new Token(JAVA_SINGLE_LINE_COMMENT), - new Token(JAVA_MULTI_LINE_COMMENT), - new Token(JAVA_DOC), - new Token(SKIP), - new Token(JAVA_STRING) + new Token(IPHPPartitions.PHP_SINGLELINE_COMMENT), + new Token(IPHPPartitions.PHP_MULTILINE_COMMENT), + new Token(IPHPPartitions.PHP_PHPDOC_COMMENT), + new Token(IPHPPartitions.PHP_STRING_SQ), + new Token(IPHPPartitions.PHP_STRING_DQ), + new Token(IPHPPartitions.PHP_PARTITIONING), }; /* * @see org.eclipse.jface.text.rules.ITokenScanner#nextToken() */ public IToken nextToken() { - - // emulate JavaPartitionScanner - if (fgEmulate) { - if (fJavaOffset != -1 && fTokenOffset + fTokenLength != fJavaOffset + fJavaLength) { - fTokenOffset += fTokenLength; - return fTokens[JAVA]; - } else { - fJavaOffset= -1; - fJavaLength= 0; - } - } fTokenOffset += fTokenLength; fTokenLength= fPrefixLength; @@ -98,7 +90,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { case ICharacterScanner.EOF: if (fTokenLength > 0) { fLast= NONE; // ignore last - return preFix(fState, JAVA, NONE, 0); + return preFix(fState, HTML, NONE, 0); } else { fLast= NONE; @@ -107,8 +99,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { } case '\r': - // emulate JavaPartitionScanner - if (!fgEmulate && fLast != CARRIAGE_RETURN) { + if ( fLast != CARRIAGE_RETURN) { fLast= CARRIAGE_RETURN; fTokenLength++; continue; @@ -117,22 +108,23 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { switch (fState) { case SINGLE_LINE_COMMENT: - case CHARACTER: - case STRING: +// case CHARACTER: + case STRING_SQ: + case STRING_DQ: if (fTokenLength > 0) { IToken token= fTokens[fState]; // emulate JavaPartitionScanner - if (fgEmulate) { - fTokenLength++; - fLast= NONE; - fPrefixLength= 0; - } else { +// if (fgEmulate) { +// fTokenLength++; +// fLast= NONE; +// fPrefixLength= 0; +// } else { fLast= CARRIAGE_RETURN; fPrefixLength= 1; - } +// } - fState= JAVA; + fState= HTML; return token; } else { @@ -149,8 +141,9 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { case '\n': switch (fState) { case SINGLE_LINE_COMMENT: - case CHARACTER: - case STRING: +// case CHARACTER: + case STRING_SQ: + case STRING_DQ: // assert(fTokenLength > 0); return postFix(fState); @@ -160,48 +153,50 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { } default: - if (!fgEmulate && fLast == CARRIAGE_RETURN) { + if ( fLast == CARRIAGE_RETURN) { switch (fState) { case SINGLE_LINE_COMMENT: - case CHARACTER: - case STRING: +// case CHARACTER: + case STRING_SQ: + case STRING_DQ: int last; int newState; switch (ch) { case '/': last= SLASH; - newState= JAVA; + newState= HTML; break; case '*': last= STAR; - newState= JAVA; + newState= HTML; break; case '\'': last= NONE; - newState= CHARACTER; + // newState= CHARACTER; + newState= STRING_SQ; break; case '"': last= NONE; - newState= STRING; + newState= STRING_DQ; break; case '\r': last= CARRIAGE_RETURN; - newState= JAVA; + newState= HTML; break; case '\\': last= BACKSLASH; - newState= JAVA; + newState= HTML; break; default: last= NONE; - newState= JAVA; + newState= HTML; break; } @@ -216,14 +211,14 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { // states switch (fState) { - case JAVA: + case PHP: switch (ch) { case '/': if (fLast == SLASH) { if (fTokenLength - getLastLength(fLast) > 0) { - return preFix(JAVA, SINGLE_LINE_COMMENT, NONE, 2); + return preFix(PHP, SINGLE_LINE_COMMENT, NONE, 2); } else { - preFix(JAVA, SINGLE_LINE_COMMENT, NONE, 2); + preFix(PHP, SINGLE_LINE_COMMENT, NONE, 2); fTokenOffset += fTokenLength; fTokenLength= fPrefixLength; break; @@ -238,9 +233,9 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { case '*': if (fLast == SLASH) { if (fTokenLength - getLastLength(fLast) > 0) - return preFix(JAVA, MULTI_LINE_COMMENT, SLASH_STAR, 2); + return preFix(PHP, MULTI_LINE_COMMENT, SLASH_STAR, 2); else { - preFix(JAVA, MULTI_LINE_COMMENT, SLASH_STAR, 2); + preFix(PHP, MULTI_LINE_COMMENT, SLASH_STAR, 2); fTokenOffset += fTokenLength; fTokenLength= fPrefixLength; break; @@ -254,9 +249,9 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { case '\'': fLast= NONE; // ignore fLast if (fTokenLength > 0) - return preFix(JAVA, CHARACTER, NONE, 1); + return preFix(PHP, STRING_SQ, NONE, 1); else { - preFix(JAVA, CHARACTER, NONE, 1); + preFix(PHP, STRING_SQ, NONE, 1); fTokenOffset += fTokenLength; fTokenLength= fPrefixLength; break; @@ -265,9 +260,9 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { case '"': fLast= NONE; // ignore fLast if (fTokenLength > 0) - return preFix(JAVA, STRING, NONE, 1); + return preFix(PHP, STRING_DQ, NONE, 1); else { - preFix(JAVA, STRING, NONE, 1); + preFix(PHP, STRING_DQ, NONE, 1); fTokenOffset += fTokenLength; fTokenLength= fPrefixLength; break; @@ -283,7 +278,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { consume(); break; - case JAVADOC: + case PHPDOC: switch (ch) { case '/': switch (fLast) { @@ -291,7 +286,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { return postFix(MULTI_LINE_COMMENT); case STAR: - return postFix(JAVADOC); + return postFix(PHPDOC); default: consume(); @@ -316,7 +311,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { if (fLast == SLASH_STAR) { fLast= SLASH_STAR_STAR; fTokenLength++; - fState= JAVADOC; + fState= PHPDOC; } else { fTokenLength++; fLast= STAR; @@ -337,7 +332,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { } break; - case STRING: + case STRING_DQ: switch (ch) { case '\\': fLast= (fLast == BACKSLASH) ? NONE : BACKSLASH; @@ -346,7 +341,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { case '\"': if (fLast != BACKSLASH) { - return postFix(STRING); + return postFix(STRING_DQ); } else { consume(); @@ -359,7 +354,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { } break; - case CHARACTER: + case STRING_SQ: switch (ch) { case '\\': fLast= (fLast == BACKSLASH) ? NONE : BACKSLASH; @@ -368,7 +363,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { case '\'': if (fLast != BACKSLASH) { - return postFix(CHARACTER); + return postFix(STRING_SQ); } else { consume(); @@ -414,55 +409,61 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { private final IToken postFix(int state) { fTokenLength++; fLast= NONE; - fState= JAVA; + fState= HTML; fPrefixLength= 0; return fTokens[state]; } private final IToken preFix(int state, int newState, int last, int prefixLength) { // emulate JavaPartitionScanner - if (fgEmulate && state == JAVA && (fTokenLength - getLastLength(fLast) > 0)) { - fTokenLength -= getLastLength(fLast); - fJavaOffset= fTokenOffset; - fJavaLength= fTokenLength; - fTokenLength= 1; - fState= newState; - fPrefixLength= prefixLength; - fLast= last; - return fTokens[state]; - - } else { +// if (fgEmulate && state == JAVA && (fTokenLength - getLastLength(fLast) > 0)) { +// fTokenLength -= getLastLength(fLast); +// fJavaOffset= fTokenOffset; +// fJavaLength= fTokenLength; +// fTokenLength= 1; +// fState= newState; +// fPrefixLength= prefixLength; +// fLast= last; +// return fTokens[state]; +// +// } else { fTokenLength -= getLastLength(fLast); fLast= last; fPrefixLength= prefixLength; IToken token= fTokens[state]; fState= newState; return token; - } +// } } private static int getState(String contentType) { if (contentType == null) - return JAVA; - - else if (contentType.equals(JAVA_SINGLE_LINE_COMMENT)) + return HTML; + + else if (contentType.equals(IPHPPartitions.PHP_PARTITIONING)) + return PHP; + + else if (contentType.equals(IPHPPartitions.PHP_SINGLELINE_COMMENT)) return SINGLE_LINE_COMMENT; - else if (contentType.equals(JAVA_MULTI_LINE_COMMENT)) + else if (contentType.equals(IPHPPartitions.PHP_MULTILINE_COMMENT)) return MULTI_LINE_COMMENT; - else if (contentType.equals(JAVA_DOC)) - return JAVADOC; - - else if (contentType.equals(JAVA_STRING)) - return STRING; + else if (contentType.equals(IPHPPartitions.PHP_PHPDOC_COMMENT)) + return PHPDOC; - else if (contentType.equals(SKIP)) - return CHARACTER; + else if (contentType.equals(IPHPPartitions.PHP_STRING_DQ)) + return STRING_DQ; + + else if (contentType.equals(IPHPPartitions.PHP_STRING_SQ)) + return STRING_SQ; + +// else if (contentType.equals(SKIP)) +// return CHARACTER; else - return JAVA; + return HTML; } /* @@ -478,16 +479,16 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { if (offset == partitionOffset) { // restart at beginning of partition - fState= JAVA; + fState= HTML; } else { fState= getState(contentType); } // emulate JavaPartitionScanner - if (fgEmulate) { - fJavaOffset= -1; - fJavaLength= 0; - } +// if (fgEmulate) { +// fJavaOffset= -1; +// fJavaLength= 0; +// } } /* @@ -500,13 +501,13 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner { fTokenLength= 0; fPrefixLength= 0; fLast= NONE; - fState= JAVA; + fState= HTML; // emulate JavaPartitionScanner - if (fgEmulate) { - fJavaOffset= -1; - fJavaLength= 0; - } +// if (fgEmulate) { +// fJavaOffset= -1; +// fJavaLength= 0; +// } } /* diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/IPHPPartitions.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/IPHPPartitions.java index 0e582b6..8d6b040 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/IPHPPartitions.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/IPHPPartitions.java @@ -11,8 +11,11 @@ package net.sourceforge.phpdt.internal.ui.text; public interface IPHPPartitions { public final static String PHP_PARTITIONING = "__php"; //$NON-NLS-1$ + public final static String PHP_PHPDOC_COMMENT = "__php_phpdoc_comment"; //$NON-NLS-1$ + public final static String PHP_SINGLELINE_COMMENT = "__php_singleline_comment"; //$NON-NLS-1$ public final static String PHP_MULTILINE_COMMENT = "__php_multiline_comment"; //$NON-NLS-1$ - public final static String PHP_STRING = "__php_string"; //$NON-NLS-1$ + public final static String PHP_STRING_DQ = "__php_string"; //$NON-NLS-1$ + public final static String PHP_STRING_SQ = "__php_string_sq"; //$NON-NLS-1$ public final static String JAVASCRIPT = "__javascript"; //$NON-NLS-1$ public final static String JS_MULTILINE_COMMENT = "__js_multiline_comment"; //$NON-NLS-1$ public final static String CSS = "__css"; //$NON-NLS-1$ diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/java/JavaStringAutoIndentStrategy.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/java/JavaStringAutoIndentStrategy.java new file mode 100644 index 0000000..319980b --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/java/JavaStringAutoIndentStrategy.java @@ -0,0 +1,206 @@ +/******************************************************************************* + * 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 v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.internal.ui.text.java; + +import net.sourceforge.phpdt.ui.PreferenceConstants; +import net.sourceforge.phpeclipse.PHPeclipsePlugin; + +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.text.BadLocationException; +import org.eclipse.jface.text.DefaultAutoIndentStrategy; +import org.eclipse.jface.text.DocumentCommand; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IRegion; +import org.eclipse.jface.text.ITypedRegion; +import org.eclipse.jface.text.TextUtilities; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.texteditor.ITextEditorExtension3; + + +/** + * Auto indent strategy for java strings + */ +public class JavaStringAutoIndentStrategy extends DefaultAutoIndentStrategy { + + private String fPartitioning; + + /** + * The input string doesn't contain any line delimiter. + * + * @param inputString the given input string + * @return the displayable string. + */ + private String displayString(String inputString, String indentation, String delimiter) { + + int length = inputString.length(); + StringBuffer buffer = new StringBuffer(length); + java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(inputString, "\n\r", true); //$NON-NLS-1$ + while (tokenizer.hasMoreTokens()){ + + String token = tokenizer.nextToken(); + if (token.equals("\r")) { //$NON-NLS-1$ + buffer.append("\\r"); //$NON-NLS-1$ + if (tokenizer.hasMoreTokens()) { + token = tokenizer.nextToken(); + if (token.equals("\n")) { //$NON-NLS-1$ + buffer.append("\\n"); //$NON-NLS-1$ + buffer.append("\" + " + delimiter); //$NON-NLS-1$ + buffer.append(indentation); + buffer.append("\""); //$NON-NLS-1$ + continue; + } else { + buffer.append("\" + " + delimiter); //$NON-NLS-1$ + buffer.append(indentation); + buffer.append("\""); //$NON-NLS-1$ + } + } else { + continue; + } + } else if (token.equals("\n")) { //$NON-NLS-1$ + buffer.append("\\n"); //$NON-NLS-1$ + buffer.append("\" + " + delimiter); //$NON-NLS-1$ + buffer.append(indentation); + buffer.append("\""); //$NON-NLS-1$ + continue; + } + + StringBuffer tokenBuffer = new StringBuffer(); + for (int i = 0; i < token.length(); i++){ + char c = token.charAt(i); + switch (c) { + case '\r' : + tokenBuffer.append("\\r"); //$NON-NLS-1$ + break; + case '\n' : + tokenBuffer.append("\\n"); //$NON-NLS-1$ + break; + case '\b' : + tokenBuffer.append("\\b"); //$NON-NLS-1$ + break; + case '\t' : + // keep tabs verbatim + tokenBuffer.append("\t"); //$NON-NLS-1$ + break; + case '\f' : + tokenBuffer.append("\\f"); //$NON-NLS-1$ + break; + case '\"' : + tokenBuffer.append("\\\""); //$NON-NLS-1$ + break; + case '\'' : + tokenBuffer.append("\\'"); //$NON-NLS-1$ + break; + case '\\' : + tokenBuffer.append("\\\\"); //$NON-NLS-1$ + break; + default : + tokenBuffer.append(c); + } + } + buffer.append(tokenBuffer); + } + return buffer.toString(); + } + + /** + * Creates a new Java string auto indent strategy for the given document partitioning. + * + * @param partitioning the document partitioning + */ + public JavaStringAutoIndentStrategy(String partitioning) { + super(); + fPartitioning= partitioning; + } + + private boolean isLineDelimiter(IDocument document, String text) { + String[] delimiters= document.getLegalLineDelimiters(); + if (delimiters != null) + return TextUtilities.equals(delimiters, text) > -1; + return false; + } + + private String getLineIndentation(IDocument document, int offset) throws BadLocationException { + + // find start of line + int adjustedOffset= (offset == document.getLength() ? offset - 1 : offset); + IRegion line= document.getLineInformationOfOffset(adjustedOffset); + int start= line.getOffset(); + + // find white spaces + int end= findEndOfWhiteSpace(document, start, offset); + + return document.get(start, end - start); + } + + private String getModifiedText(String string, String indentation, String delimiter) throws BadLocationException { + return displayString(string, indentation, delimiter); + } + + private void javaStringIndentAfterNewLine(IDocument document, DocumentCommand command) throws BadLocationException { + + ITypedRegion partition= TextUtilities.getPartition(document, fPartitioning, command.offset); + int offset= partition.getOffset(); + int length= partition.getLength(); + + if (command.offset == offset) { + // we are really just before the string partition -> feet the event through the java indenter + // new JavaAutoIndentStrategy(fPartitioning).customizeDocumentCommand(document, command); + return; + } + + if (command.offset == offset + length && document.getChar(offset + length - 1) == '\"') + return; + + String indentation= getLineIndentation(document, command.offset); + String delimiter= TextUtilities.getDefaultLineDelimiter(document); + + IRegion line= document.getLineInformationOfOffset(offset); + String string= document.get(line.getOffset(), offset - line.getOffset()); + if (string.trim().length() != 0) + indentation += String.valueOf("\t\t"); //$NON-NLS-1$ + + IPreferenceStore preferenceStore= PHPeclipsePlugin.getDefault().getPreferenceStore(); + if (isLineDelimiter(document, command.text)) + command.text= "\" +" + command.text + indentation + "\""; //$NON-NLS-1$//$NON-NLS-2$ + else if (command.text.length() > 1 && preferenceStore.getBoolean(PreferenceConstants.EDITOR_ESCAPE_STRINGS)) + command.text= getModifiedText(command.text, indentation, delimiter); + } + + private boolean isSmartMode() { + IWorkbenchPage page= PHPeclipsePlugin.getActivePage(); + if (page != null) { + IEditorPart part= page.getActiveEditor(); + if (part instanceof ITextEditorExtension3) { + ITextEditorExtension3 extension= (ITextEditorExtension3) part; + return extension.getInsertMode() == ITextEditorExtension3.SMART_INSERT; + } + } + return false; + } + + /* + * @see org.eclipse.jface.text.IAutoIndentStrategy#customizeDocumentCommand(IDocument, DocumentCommand) + */ + public void customizeDocumentCommand(IDocument document, DocumentCommand command) { + try { + if (command.length != 0 || command.text == null) + return; + + IPreferenceStore preferenceStore= PHPeclipsePlugin.getDefault().getPreferenceStore(); + + if (preferenceStore.getBoolean(PreferenceConstants.EDITOR_WRAP_STRINGS) && isSmartMode()) + javaStringIndentAfterNewLine(document, command); + + } catch (BadLocationException e) { + } + } +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/wizards/IStatusChangeListener.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/wizards/IStatusChangeListener.java new file mode 100644 index 0000000..63129e3 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/wizards/IStatusChangeListener.java @@ -0,0 +1,23 @@ +/******************************************************************************* + * 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 v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.internal.ui.wizards; + +import org.eclipse.core.runtime.IStatus; + +public interface IStatusChangeListener { + + /** + * Notifies this listener that the given status has changed. + * + * @param status the new status + */ + void statusChanged(IStatus status); +} diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/PreferenceConstants.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/PreferenceConstants.java index d5f0188..56c2e4e 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/PreferenceConstants.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/PreferenceConstants.java @@ -735,16 +735,6 @@ public class PreferenceConstants { public final static String EDITOR_CLOSE_STRINGS_PHP = "closeStringsPHP"; //$NON-NLS-1$ /** - * A named preference that controls whether the 'wrap strings' feature is - * enabled. - *

- * Value is of type Boolean. - *

- * @since 2.1 - */ - public final static String EDITOR_WRAP_STRINGS = "wrapStrings"; //$NON-NLS-1$ - - /** * A named preference that controls whether the 'close brackets' feature is * enabled in PHP mode *

@@ -754,6 +744,26 @@ public class PreferenceConstants { */ public final static String EDITOR_CLOSE_BRACKETS_PHP = "closeBracketsPHP"; //$NON-NLS-1$ + /** + * A named preference that controls whether the 'wrap strings' feature is + * enabled. + *

+ * Value is of type Boolean. + *

+ * @since 2.1 + */ + public final static String EDITOR_WRAP_STRINGS= "wrapStrings"; //$NON-NLS-1$ + + /** + * A named preference that controls whether the 'escape strings' feature is + * enabled. + *

+ * Value is of type Boolean. + *

+ * @since 3.0 + */ + public final static String EDITOR_ESCAPE_STRINGS= "escapeStrings"; //$NON-NLS-1$ + /** * A named preference that controls whether the 'close braces' feature is * enabled. @@ -833,7 +843,16 @@ public class PreferenceConstants { * @since 2.1 */ public final static String EDITOR_SMART_HOME_END = AbstractTextEditor.PREFERENCE_NAVIGATION_SMART_HOME_END; - + + /** + * A named preference that controls whether the 'sub-word navigation' feature is + * enabled. + *

+ * Value is of type Boolean. + *

+ * @since 2.1 + */ + public final static String EDITOR_SUB_WORD_NAVIGATION= "subWordNavigation"; //$NON-NLS-1$ /** * A named preference that controls if temporary problems are evaluated and shown in the UI. *

@@ -2201,16 +2220,19 @@ public final static String EDITOR_TEXT_FONT= "net.sourceforge.phpdt.ui.editors.t store.setDefault(PreferenceConstants.CODEASSIST_INSERT_COMPLETION, true); store.setDefault(PreferenceConstants.CODEASSIST_FILL_ARGUMENT_NAMES, false); store.setDefault(PreferenceConstants.CODEASSIST_GUESS_METHOD_ARGUMENTS, true); - + store.setDefault(PreferenceConstants.EDITOR_SMART_HOME_END, true); + store.setDefault(PreferenceConstants.EDITOR_SUB_WORD_NAVIGATION, true); store.setDefault(PreferenceConstants.EDITOR_SMART_PASTE, true); store.setDefault(PreferenceConstants.EDITOR_CLOSE_STRINGS_PHP, true); store.setDefault(PreferenceConstants.EDITOR_CLOSE_BRACKETS_PHP, true); store.setDefault(PreferenceConstants.EDITOR_CLOSE_BRACES, true); store.setDefault(PreferenceConstants.EDITOR_CLOSE_JAVADOCS, true); store.setDefault(PreferenceConstants.EDITOR_WRAP_STRINGS, true); + store.setDefault(PreferenceConstants.EDITOR_ESCAPE_STRINGS, false); store.setDefault(PreferenceConstants.EDITOR_ADD_JAVADOC_TAGS, true); store.setDefault(PreferenceConstants.EDITOR_FORMAT_JAVADOCS, true); + store.setDefault(PreferenceConstants.EDITOR_DISABLE_OVERWRITE_MODE, false); store.setDefault(PreferenceConstants.EDITOR_CLOSE_STRINGS_HTML, true); store.setDefault(PreferenceConstants.EDITOR_CLOSE_BRACKETS_HTML, true); diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/text/JavaTextTools.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/text/JavaTextTools.java index 2937b46..946e308 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/text/JavaTextTools.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/text/JavaTextTools.java @@ -54,7 +54,7 @@ public class JavaTextTools { private final static String[] TYPES = new String[] { IPHPPartitions.PHP_PARTITIONING, - IPHPPartitions.PHP_MULTILINE_COMMENT, + IPHPPartitions.PHP_PHPDOC_COMMENT, IPHPPartitions.HTML, IPHPPartitions.HTML_MULTILINE_COMMENT, IPHPPartitions.JAVASCRIPT, @@ -95,7 +95,7 @@ public class JavaTextTools { /** The SmartyDoc scanner */ private SmartyDocCodeScanner fSmartyDocScanner; /** The Java partitions scanner */ - private FastJavaPartitionScanner fPartitionScanner; + private PHPPartitionScanner fPartitionScanner; /** The preference store */ private IPreferenceStore fPreferenceStore; @@ -131,7 +131,8 @@ public class JavaTextTools { fHTMLScanner = new HTMLCodeScanner(fColorManager, store); fSmartyScanner = new SmartyCodeScanner(fColorManager, store); fSmartyDocScanner = new SmartyDocCodeScanner(fColorManager, store); - fPartitionScanner = new FastJavaPartitionScanner(); +// fPartitionScanner = new FastJavaPartitionScanner(); + fPartitionScanner = new PHPPartitionScanner(); } /** @@ -167,7 +168,8 @@ public class JavaTextTools { fHTMLScanner = new HTMLCodeScanner(fColorManager, store); fSmartyScanner = new SmartyCodeScanner(fColorManager, store); fSmartyDocScanner = new SmartyDocCodeScanner(fColorManager, store); - fPartitionScanner = new FastJavaPartitionScanner(); + // fPartitionScanner = new FastJavaPartitionScanner(); + fPartitionScanner = new PHPPartitionScanner(); } /** diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/builder/IdentifierIndexManager.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/builder/IdentifierIndexManager.java index c8c1a67..532a301 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/builder/IdentifierIndexManager.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/builder/IdentifierIndexManager.java @@ -32,7 +32,7 @@ public class IdentifierIndexManager { private Scanner fScanner; private int fToken; public LineCreator() { - fScanner = new Scanner(true, false, false, false, true); + fScanner = new Scanner(true, false, false, false, true, null, null); } /** * Add the information of the current identifier to the line diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java index 43295c7..d7acab4 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java @@ -2429,7 +2429,7 @@ public abstract class PHPEditor extends ExtendedTextEditor implements IViewPart List segmentation = new ArrayList(); for (int i = 0; i < linePartitioning.length; i++) { - if (IPHPPartitions.PHP_STRING.equals(linePartitioning[i].getType())) + if (IPHPPartitions.PHP_STRING_DQ.equals(linePartitioning[i].getType())) segmentation.add(linePartitioning[i]); } diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSourceViewerConfiguration.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSourceViewerConfiguration.java index 038abd3..0353b6d 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSourceViewerConfiguration.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSourceViewerConfiguration.java @@ -22,6 +22,7 @@ import net.sourceforge.phpdt.internal.ui.text.JavaOutlineInformationControl; import net.sourceforge.phpdt.internal.ui.text.JavaReconciler; import net.sourceforge.phpdt.internal.ui.text.java.JavaFormattingStrategy; import net.sourceforge.phpdt.internal.ui.text.java.JavaReconcilingStrategy; +import net.sourceforge.phpdt.internal.ui.text.java.JavaStringAutoIndentStrategy; import net.sourceforge.phpdt.internal.ui.text.java.hover.JavaEditorTextHoverDescriptor; import net.sourceforge.phpdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy; import net.sourceforge.phpdt.internal.ui.text.phpdoc.PHPDocCompletionProcessor; @@ -34,7 +35,7 @@ import net.sourceforge.phpeclipse.phpeditor.php.PHPAutoIndentStrategy; import net.sourceforge.phpeclipse.phpeditor.php.PHPCompletionProcessor; import net.sourceforge.phpeclipse.phpeditor.php.PHPDoubleClickSelector; import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider; -import org.eclipse.core.resources.IFile; + import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.DefaultAutoIndentStrategy; @@ -69,8 +70,6 @@ import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.text.source.SourceViewerConfiguration; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IFileEditorInput; /** * Configuration for an SourceViewer which shows PHP code. */ @@ -203,6 +202,9 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration { */ public IAutoIndentStrategy getAutoIndentStrategy( ISourceViewer sourceViewer, String contentType) { + if (IPHPPartitions.PHP_STRING_DQ.equals(contentType)) + return new JavaStringAutoIndentStrategy(getConfiguredDocumentPartitioning(sourceViewer)); + return (IPHPPartitions.PHP_PARTITIONING.equals(contentType) ? new PHPAutoIndentStrategy() : new DefaultAutoIndentStrategy()); @@ -336,7 +338,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration { return new String[]{IPHPPartitions.HTML, IPHPPartitions.HTML_MULTILINE_COMMENT, IPHPPartitions.PHP_PARTITIONING, - IPHPPartitions.PHP_MULTILINE_COMMENT, + IPHPPartitions.PHP_PHPDOC_COMMENT, IPHPPartitions.CSS, IPHPPartitions.CSS_MULTILINE_COMMENT, IPHPPartitions.JAVASCRIPT, @@ -373,7 +375,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration { assistant.setContentAssistProcessor(new PHPCompletionProcessor(), IPHPPartitions.PHP_PARTITIONING); assistant.setContentAssistProcessor(new PHPDocCompletionProcessor(), - IPHPPartitions.PHP_MULTILINE_COMMENT); + IPHPPartitions.PHP_PHPDOC_COMMENT); // assistant.enableAutoActivation(true); // assistant.setAutoActivationDelay(500); // assistant.setProposalPopupOrientation(ContentAssistant.PROPOSAL_OVERLAY); @@ -496,9 +498,9 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration { reconciler.setRepairer(dr, IPHPPartitions.PHP_PARTITIONING); dr = new DefaultDamagerRepairer(getPHPDocScanner()); reconciler.setDamager(dr, - IPHPPartitions.PHP_MULTILINE_COMMENT); + IPHPPartitions.PHP_PHPDOC_COMMENT); reconciler.setRepairer(dr, - IPHPPartitions.PHP_MULTILINE_COMMENT); + IPHPPartitions.PHP_PHPDOC_COMMENT); return reconciler; } /* @@ -624,7 +626,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration { presenter.setInformationProvider(provider, IPHPPartitions.PHP_PARTITIONING); presenter.setInformationProvider(provider, - IPHPPartitions.PHP_MULTILINE_COMMENT); + IPHPPartitions.PHP_PHPDOC_COMMENT); presenter.setInformationProvider(provider, IPHPPartitions.SMARTY_MULTILINE_COMMENT); presenter.setInformationProvider(provider, diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartition.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartition.java index 08f9c08..bbb45e4 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartition.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartition.java @@ -10,7 +10,7 @@ import org.eclipse.jface.text.IDocument; /** * @author slanger - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ */ public class PHPPartition extends Partition { @@ -38,7 +38,7 @@ public class PHPPartition extends Partition */ protected boolean allowedPartition(String type) { - if(type.equals(IPHPPartitions.PHP_MULTILINE_COMMENT)) + if(type.equals(IPHPPartitions.PHP_PHPDOC_COMMENT)) return true; return false; diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartitionScanner.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartitionScanner.java index 35d5208..2cb2eb9 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartitionScanner.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartitionScanner.java @@ -6,7 +6,7 @@ * Created on 05.03.2003 * * @author Stefan Langer (musk) - * @version $Revision: 1.23 $ + * @version $Revision: 1.24 $ */ package net.sourceforge.phpeclipse.phpeditor.php; @@ -51,9 +51,10 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { public PHPPartitionScanner(int fileType) { this.tokens.put(IPHPPartitions.PHP_PARTITIONING, new Token(IPHPPartitions.PHP_PARTITIONING)); + this.tokens.put(IPHPPartitions.PHP_STRING_DQ, new Token(IPHPPartitions.PHP_STRING_DQ)); this.tokens.put( - IPHPPartitions.PHP_MULTILINE_COMMENT, - new Token(IPHPPartitions.PHP_MULTILINE_COMMENT)); + IPHPPartitions.PHP_PHPDOC_COMMENT, + new Token(IPHPPartitions.PHP_PHPDOC_COMMENT)); this.tokens.put(IPHPPartitions.HTML, new Token(IPHPPartitions.HTML)); this.tokens.put( IPHPPartitions.HTML_MULTILINE_COMMENT, @@ -161,7 +162,7 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { switch (c) { case '<' : if (!isInString(IPHPPartitions.PHP_PARTITIONING) - && fContentType != IPHPPartitions.PHP_MULTILINE_COMMENT + && fContentType != IPHPPartitions.PHP_PHPDOC_COMMENT && checkPattern(new char[] { '?', 'p', 'h', 'p' }, true)) { if (fContentType != IPHPPartitions.PHP_PARTITIONING && fCurrentLength > 5) { unread(5); @@ -181,7 +182,7 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { fCurrentLength = 5; } else if ( !isInString(IPHPPartitions.PHP_PARTITIONING) - && fContentType != IPHPPartitions.PHP_MULTILINE_COMMENT + && fContentType != IPHPPartitions.PHP_PHPDOC_COMMENT && checkPattern(new char[] { '?' }, false)) { if (fContentType != IPHPPartitions.PHP_PARTITIONING && fCurrentLength > 2) { unread(2); @@ -198,7 +199,7 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { } else if ( !isInString(IPHPPartitions.PHP_PARTITIONING) && (fContentType != IPHPPartitions.PHP_PARTITIONING) // BUG #769044 - && (fContentType != IPHPPartitions.PHP_MULTILINE_COMMENT) // BUG #769044 + && (fContentType != IPHPPartitions.PHP_PHPDOC_COMMENT) // BUG #769044 && checkPattern(new char[] { '!', '-', '-' })) { // return previouse partition if (fContentType != IPHPPartitions.HTML_MULTILINE_COMMENT && fCurrentLength > 4) { unread(4); @@ -316,9 +317,9 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { if (fContentType == IPHPPartitions.PHP_PARTITIONING && fCurrentLength > 2) { unread(2); IToken token = getToken(fContentType); - fContentType = IPHPPartitions.PHP_MULTILINE_COMMENT; + fContentType = IPHPPartitions.PHP_PHPDOC_COMMENT; return token; - } else if (fContentType == IPHPPartitions.PHP_MULTILINE_COMMENT) { + } else if (fContentType == IPHPPartitions.PHP_PHPDOC_COMMENT) { fTokenOffset = fOffset - 2; fCurrentLength = 2; } @@ -328,10 +329,10 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { break; case '*' : if (!isInString(IPHPPartitions.PHP_PARTITIONING) && (c = read()) == '/') { - if (fContentType == IPHPPartitions.PHP_MULTILINE_COMMENT) { + if (fContentType == IPHPPartitions.PHP_PHPDOC_COMMENT) { fContentType = IPHPPartitions.PHP_PARTITIONING; partitionBorder = true; - return getToken(IPHPPartitions.PHP_MULTILINE_COMMENT); + return getToken(IPHPPartitions.PHP_PHPDOC_COMMENT); } else if (fContentType == IPHPPartitions.CSS_MULTILINE_COMMENT) { } else if (fContentType == IPHPPartitions.JS_MULTILINE_COMMENT) { }