#
# Copyright 2000-2007 JetBrains s.r.o.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

########################################################################################################################
# Unuzed imports
########################################################################################################################
unused.import=Unused import
optimize.imports=Optimize imports
optimize.all.imports=Optimize unused import statements

########################################################################################################################
# Create class fix
########################################################################################################################
dialog.create.class.package.chooser.title=Choose destination package
create.directory.command=Create directory
destination.package=Destination package:
dialog.create.class.label.0=Create class ''{0}''
second.unsafe.call=Second unsafe call
call.can.throw.npe=Calling chain can throw NullPointerException

groovy.dfa.issues=Data flow issues
other=Other

unused.assignment=Unused Assignment
unused.assignment.tooltip=Assignment is not used
unused.variable=Variable is not used

unused.inc.dec=Unused Incrementing or Decrementing

unassigned.access=Variable Not Assigned
unassigned.access.short.name=VariableNotAssigned
unassigned.access.tooltip=Variable ''{0}'' might not be assigned
no.return.display.name=Missing Return Statement
no.return.short.name=MissingReturnStatement
no.return.message=Not all execution paths return a value
create.dynamic.property=Create dynamic property
dynamic.property=Dynamic property
unresolved.type.status=Type ''{0}'' is not resolved
resolved.type.status=Type ''{0}'' is resolved
no.type.specified=No type specified
dynamic.element=Dynamic Element

########################################################################################################################
# InpectorGroovy properties
########################################################################################################################
pointless.boolean.problem.descriptor=#ref can be simplified to ''{0}'' #loc
pointless.arithmetic.error.message=#ref can be replaced with ''{0}'' #loc
pointless.boolean.display.name=Pointless boolean expression
pointless.boolean.quickfix=Simplify

Cannot.perform.undo.operation=Cannot perform undo operation
Undo.disable=Undo Disabled
field.already.defined=Variables with field names
clashing.getters=Clashing getters

access.to.inaccessible.element=Access to inaccessible element

type.doesnt.contain.method=Type ''{0}'' cannot be iterated in range because it does not have method ''{1}''
incorrect.range.argument=Incorrect range arguments
type.doesnt.implemnt.comparable=Type ''{0}'' doesn't implement Comparable
add.method=Add method ''{0}()'' to class ''{1}''
implement.class=Implement {0}
fix.class=Fix class {0}
check.labeled.statement=Labeled statement inspection
unnecessary.qualified.reference=Unnecessary qualified reference
rtype.cannot.contain.ltype=''{1}'' cannot contain ''{0}''
new.instance.of.singleton=New instance of class annotated with @groovy.lang.Singleton
replace.new.expression.with.0.instance=Replace with ''{0}.instance''
getter.0.clashes.with.getter.1={0} clashes with {1}
unused.0=Unused {0}
remove.0=Remove {0}
replace.postfix.0.with.prefix.0=Replace postfix {0} with prefix {0}
replace.0.with.1=Replace {0} with binary {1}
gr.deprecated.api.usage=Deprecated API inspection
category.method.0.cannot.be.applied.to.1=Category method ''{0}'' cannot be applied to ''{1}''
local.var.0.is.reassigned=Local variable ''{0}'' is reassigned
anonymous.class=anonymous class
closure=closure
other.scope=Other scope
method.may.be.static=Method may be static
method.may.be.static.only.private.or.final.option=Only check final or private methods
method.may.be.static.ignore.empty.method.option=Ignore empty methods
have.instance.refs.in.closure=(have instance references inside closure)
method.may.be.static.ignore.instance.refs.in.closure.option=Ignore instance references inside closures
ignore.boolean.expressions=Ignore unassigned variables in boolean checks
highlight.if.groovy.object.methods.overridden=Highlight references from class overriding invokeMethod(), getProperty(), or setProperty()
highlight.if.missing.methods.declared=Highlight references from class declaring missingMethod() or missingProperty()
gr.package.inspection.check.scripts=Check scripts
gr.package=Package mismatch
java.style.property.access=Java-style accessor invocation
type.customizer.is.not.marked.as.a.resource.file=Type customizer script is not marked as compiler resources
add.to.resources=Add to resources
add.type.customizer.to.resources=Add type customizer script to resources
target.0.does.not.exist=Target ''{0}'' does not exist
target.annotation.is.unused=@Target is unused
change.lvalue.type=Change variable ''{0}'' type to ''{1}''
replace.qualified.name.with.import=Replace qualified name with import
highlight.assignments.from.void=Highlight assignments from void type
comments.count.as.content=Comments count as content
ignore.when.catch.parameter.is.named.ignore.or.ignored=Ignore when catch parameter is named ignore or ignored
no.applicable.signature.found=No applicable signature found
expected.type.0=Expected {0}
declare.explicit.implementations.of.trait=Declare explicit implementations of trait
