|
From: <caw...@us...> - 2007-08-02 17:50:10
|
Revision: 2920
http://rubyeclipse.svn.sourceforge.net/rubyeclipse/?rev=2920&view=rev
Author: cawilliams
Date: 2007-08-02 10:50:08 -0700 (Thu, 02 Aug 2007)
Log Message:
-----------
fix #5427 - Add code check for defining method_missing but no respond_to
Modified Paths:
--------------
trunk/com.aptana.rdt/plugin.xml
trunk/com.aptana.rdt/src/com/aptana/rdt/AptanaRDTPlugin.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/parser/warnings/RubyRedLint.java
Added Paths:
-----------
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/parser/warnings/MethodMissingWithoutRespondTo.java
Modified: trunk/com.aptana.rdt/plugin.xml
===================================================================
--- trunk/com.aptana.rdt/plugin.xml 2007-08-02 17:35:18 UTC (rev 2919)
+++ trunk/com.aptana.rdt/plugin.xml 2007-08-02 17:50:08 UTC (rev 2920)
@@ -77,9 +77,16 @@
<argument prefKey="com.aptana.rdt.compiler.problem.maxReturns"/>
</error>
<error
+ categoryId="org.rubypeople.rdt.errors.codeConvention"
+ label="Constant name doesn't match convention"
+ prefKey="com.aptana.rdt.compiler.problem.constantNamingConvention"/>
+ <category
+ id="org.rubypeople.rdt.errors.codeConvention"
+ name="Ruby Coding Conventions"/>
+ <error
categoryId="org.rubypeople.rdt.errors.potentialProblems"
- label="Constant name doesn't match convention"
- prefKey="com.aptana.rdt.compiler.problem.constantNamingConvention"/>
+ label="method_missing defined without re-defined respond_to"
+ prefKey="com.aptana.rdt.compiler.problem.methodMissingWithoutRespondTo"/>
</extension>
<!-- =================================================================================== -->
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/AptanaRDTPlugin.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/AptanaRDTPlugin.java 2007-08-02 17:35:18 UTC (rev 2919)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/AptanaRDTPlugin.java 2007-08-02 17:50:08 UTC (rev 2920)
@@ -203,6 +203,12 @@
*/
public static final String COMPILER_PB_CONSTANT_NAMING_CONVENTION = PLUGIN_ID + ".compiler.problem.constantNamingConvention"; //$NON-NLS-1$
+ /**
+ * Possible configurable option ID.
+ * @see #getDefaultOptions()
+ * @since 1.0.0
+ */
+ public static final String COMPILER_PB_METHOD_MISSING_NO_RESPOND_TO = PLUGIN_ID + "com.aptana.rdt.compiler.problem.methodMissingWithoutRespondTo";
// The shared instance
private static AptanaRDTPlugin plugin;
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/parser/warnings/MethodMissingWithoutRespondTo.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/parser/warnings/MethodMissingWithoutRespondTo.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/parser/warnings/MethodMissingWithoutRespondTo.java 2007-08-02 17:50:08 UTC (rev 2920)
@@ -0,0 +1,41 @@
+package com.aptana.rdt.internal.parser.warnings;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.jruby.ast.ClassNode;
+import org.jruby.ast.DefnNode;
+import org.jruby.evaluator.Instruction;
+import org.rubypeople.rdt.internal.core.parser.warnings.RubyLintVisitor;
+
+import com.aptana.rdt.AptanaRDTPlugin;
+
+public class MethodMissingWithoutRespondTo extends RubyLintVisitor {
+
+ private Map<String, DefnNode> methods = new HashMap<String, DefnNode>();
+
+ public MethodMissingWithoutRespondTo(String contents) {
+ super(contents);
+ }
+
+ @Override
+ protected String getOptionKey() {
+ return AptanaRDTPlugin.COMPILER_PB_METHOD_MISSING_NO_RESPOND_TO;
+ }
+
+ @Override
+ public Instruction visitDefnNode(DefnNode iVisited) {
+ methods.put(iVisited.getName(), iVisited);
+ return super.visitDefnNode(iVisited);
+ }
+
+ @Override
+ public void exitClassNode(ClassNode iVisited) {
+ if (methods.containsKey("method_missing") && !methods.containsKey("respond_to")) {
+ createProblem(methods.get("method_missing").getNameNode().getPosition(), "Class defines method_missing, but does not define custom respond_to");
+ }
+ methods.clear();
+ super.exitClassNode(iVisited);
+ }
+
+}
Property changes on: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/parser/warnings/MethodMissingWithoutRespondTo.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/parser/warnings/RubyRedLint.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/parser/warnings/RubyRedLint.java 2007-08-02 17:35:18 UTC (rev 2919)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/parser/warnings/RubyRedLint.java 2007-08-02 17:50:08 UTC (rev 2920)
@@ -83,6 +83,7 @@
visitors.add(new EnumerableInclusionVisitor(contents));
visitors.add(new AndOrUsedOnRighthandAssignment(contents));
visitors.add(new ConstantNamingConvention(contents));
+ visitors.add(new MethodMissingWithoutRespondTo(contents));
return visitors;
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|